12_Linux内核结构

news2024/10/6 16:24:24

Linux内核结构

1.内核的主要组成部分

  • Linux 内核主要的 5 个部分:进程调度、内存管理、虚拟文件系统、网络接口、进程通信。在系统移植的时候,它们是内核的基本元素,这 5 个部分之间的关系,如图所示:

    image-20240317103615156

    • 进程调度(管理):进程是在计算机系统中资源分配的最小单元,而进程调度就是负责控制进程对 CPU 的访问。 内核负责创建和销毁进程, 而且由调度程序采取合适的调度策略,实现进程间的合理且实时的处理器资源的共享,从而实现多个进程在一个或多个处理器上的抽象。内核还负责实现不同进程间、进程和其他部件之间的通信。
    • 内存管理:内存是计算机系统中最主要的资源,内存管理就是负责多个进程安全地共享主内存区域,为每个进程在有限的物理资源上建立一个虚拟地址空间。内存管理部分代码可分为硬件无关部分和硬件有关部分:硬件无关部分实现进程和内存之间的地址映射等功能;硬件有关部分实现不同体系结构上的内存管理相关功能并为内存管理提供虚拟接口。
    • 虚拟文件系统(VFS):在 Linux 系统中的任何一个概念几乎都可以看做一个文件,虚拟文件系统隐藏了不同类型硬件的具体细节,为所有的硬件设备提供了一个标准的接口 ,从而在整个系统的几乎所有机制中使用文件的抽象。VFS支持数十种不同类型的文件系统,如 ext3、ext4等。
    • 设备管理:Linux 系统中几乎每个系统操作最终都映射到一个或多个物理设备上。 除了处理器、内存等少数的硬件资源之外,任何一种设备控制操作都由设备特定的驱动代码来进行。内核中必须提供系统中可能要操作的每一种外设的驱动。
    • 网络管理:内核支持各种网络标准协议和网络设备。网络管理部分可分为网络协议栈和网络设备驱动程序。网络协议栈负责实现每种可能的网络传输协议(TCP/IP 协议等),网络设备驱动程序负责与各种网络硬件设备或虚拟设备进行通信。
  • 五部分间的关系

    • 进程调度与内存管理:二者互相依赖,在多道程序环境下,程序要运行必须为之创建进程,而创建进程首先就是要将程序和数据装入内存。另外,内存管理子系统也存在进程的挂起和恢复过程。
    • 进程间通信与内存管理:进程间通信子系统要依赖内存管理支持共享内存通信机制,通过对共同的内存区域进行操作来达到通信的目的。
    • 虚拟文件系统与网络接口:虚拟文件系统通过依赖网络接口支持网络文件系统(NFS),也通过依赖内存管理支持 RAMDISK 设备。
    • 内存管理与虚拟文件系统:内存管理利用虚拟文件系统支持交换,交换进程定期地由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理将会向文件系统发出请求,同时,挂起当前正在运行的进程。

2.内核源码目录结构

  • Linux 内核代码以源码树的形式存放,如果在安装系统的时候已经安装了源码树,其源码树就在/usr/src/linux 下,源码树结构如图所示:

    ![image-20240317105826865](https://img-blog.csdnimg.cn/img_convert/6e8aeb8a60c3c8e70d8b3925a24c1a1b.png)
    
  • 目录功能介绍

    内核源码的顶层有许多子目录,分别组织存放各种内核子系统或者文件。具体的目录说明如下表所示:

    目录作用
    arch包括了体系结构相关的代码,每一个子目录都代表一种支持的体系结构,如 arch/i386、arch/arm、arch/ppc
    crypto常用加密和散列算法(如 AES、SHA 等),以及一些压缩和 CRC 校验算法
    drivers放置系统所有的设备驱动程序(包括硬件相关和硬件无关),如 drivers/char、drivers/block等
    documentation/内核文档
    fs列出了Linux 支持的所有文件系统,目前 Linux 支持 ext3、 vfat、 ntfs、 yaffs2、ramfs、 cramfs 和 romfs 等多种文件系统。在嵌入式系统中常用的闪存设备的文件系统有cramfs、 romfs、 ramfs、 jffs2、 yaffs 等文件系统。
    include包括内核编译时所需要的大部分头文件。与平台无关的头文件在include/linux 子目录下, include/scsi 目录则是有关 scsi 设备的头文件目录,与 arm 相关的头文件在 include/asm-arm 子目录下
    init包含核心的初始化代码(注意,不是系统的引导代码)。它包含两个文件main.c 和 version.c,这是研究核心如何工作的一个非常好的起点。
    ipc包含核心进程间的通信代码。 Linux 下进程间通信机制主要包括管道、 信号、消息队列、共享内存、信号量、套接口。
    kernelLinux 内核管理的核心代码,与处理器结构相关代码都放在 arch/*/kernel目录下
    lib含了核心的库代码,如 zlib、crc32。与处理器结构相关的库代码被放在 arch/*/lib/目录下。
    mm包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm 目录下。
    net包括Linux核心的网络部分代码, 其每个子目录存放一个具体的网络协议或者网络模型代码。
    sound声音驱动的支持
    scripts包含用于配置核心的脚本文件(内部或者外部使用的脚本)
    usr用户的代码
                                             |
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1526593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

检查约束

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 检查约束 检查约束指的是在数据列上设置一些过滤条件,当过滤条件满足的时候才可以进行保存,如果不满足则出现错误。例如,设置年龄的信息…

微服务:高并发带来的问题的容错方案

1.相关脚本(陈天狼) 启动nacos客户端: startup.cmd -m standalone 启动sentinel控制台: # 直接使⽤jar命令启动项⽬(控制台本身是⼀个SpringBoot项⽬) java -Dserver.port8080 -Dcsp.sentinel.dashboard.serverlocalhost:808…

蓝桥杯冲刺_二分(正在补题)

二分一定要是单调队列&#xff0c;单调才具有二段性 特征 最小值最大化 最大值最小化 15 届蓝桥杯 14 天省赛冲刺营 1 期 - M次方根 - 蓝桥云课 (lanqiao.cn) #include <bits/stdc.h> using namespace std;double n,l,r,mid; double eps1e-8;bool check(double mid,i…

JavaSE综合练习-图书系统1.0

Main import book.BookList; import user.AdminUser; import user.NormalUser; import user.User; import java.util.Scanner;//程序入口函数 public class Main {public static User login(){Scanner scannernew Scanner(System.in);System.out.println("请输入你的姓名…

HTML表格(HTML 表格的使用,收藏这一篇就够了)

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 今天聊聊 table。HTML <table> 元素用于创建表格&#xff0c;它是一种将数据按行和列组织排列的结构&#xff0c;用于在网页中呈现复杂的数据集。HTML 表格具有以下 2 种主要用途&#x…

java方法的引用传递和值传递

1、方法的值参数传递 下面代码&#xff0c;它会在控制台输出什么&#xff1f; public class ArrayTest {public static void main(String[] args) {int number 100;System.out.println(number);change(number);System.out.println(number);}public static void change(int n…

Qt学习--继承(并以分文件实现)

基类 & 派生类 一个类可以派生自多个类&#xff0c;这意味着&#xff0c;它可以从多个基类继承数据和函数。定义一个派生类&#xff0c;我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名。 总结&#xff1a;简单来说&#xff0c;父类有的&#xff0c;子…

【Paper Reading】6.RLHF-V 提出用RLHF的1.4k的数据微调显著降低MLLM的虚幻问题

分类 内容 论文题目 RLHF-V: Towards Trustworthy MLLMs via Behavior Alignment from Fine-grained Correctional Human Feedback 作者 作者团队&#xff1a;由来自清华大学和新加坡国立大学的研究者组成&#xff0c;包括Tianyu Yu, Yuan Yao, Haoye Zhang, Taiwen He, Y…

[SaaS] 淘宝设计AI

“淘宝设计AI” 让国际大牌造世界双11超级品牌 超级发布https://mp.weixin.qq.com/s/xFVDARQHxlweKAYG91DtYw下面是一个完整的品牌营销海报设计流程&#xff0c;AIGC起到了巨大作用&#xff0c;但是仍然很难去一步解决这个问题&#xff0c;还是逐步修改的一个过程。 Midjouner…

java 面向对象--equals方法

Object 类的使用 类 java.lang.Object是类层次结构的根类&#xff0c;即所有其它类的父类。每个类都使用 Object 作为超类。 Object类型的变量与除Object以外的任意引用数据类型的对象都存在多态引用 method(Object obj){…} //可以接收任何类作为其参数 Person o new Person…

【NTN 卫星通信】 TN和多NTN配合的应用场景

1 场景描述 此场景描述了农村环境&#xff0c;其中MNO (运营商TerrA)仅在城市附近提供本地地面覆盖&#xff0c;而MNO (SatA)提供广泛的NTN覆盖。SatA使用GSO轨道和NGSO轨道上的卫星。SatA与TerrA有漫游协议&#xff0c;允许:   所有TerrA用户的连接&#xff0c;当这些用户不…

超分之SwinIR

SwinIR: Image restoration using Swin TransformerSwinIR: 使用Swin Transformer 进行图像恢复Liang J, Cao J, Sun G, et al.Proceedings of the IEEE/CVF international conference on computer vision. 2021: 1833-1844. 摘要 首先&#xff0c;介绍了Image restoration的含…

Ingress 基于URL路由多个服务

文章目录 前言一、基于请求地址转发不同应用的pod1.创建一个nginx的pod和一个apache的pod及其各自的service2.创建ingress实现一个地址两个path分别访问nginx和apache3.验证根据域名web2.study.com的两个路径/foo和/bar来访问到不同的pod4.分别在nginx和apache的pod里创建网站目…

win32汇编弹出对话框

之前书上有一个win32 asm 的odbc例子&#xff0c;它有一个窗体&#xff0c;可以执行sql&#xff1b;下面看一下弹出一个录入数据的对话框&#xff1b; 之前它在.code段包含2个单独的asm文件&#xff0c;增加第三个&#xff0c;增加的这个里面是弹出对话框的窗口过程&#xff0…

Python--类中作用域

1、在面向对象编程中&#xff0c;主要的变量就是成员变量&#xff08;属性&#xff09;和局部变量 class Cat:# 属性name Noneage None# n1, n2, result为局部变量def cal(self, n1, n2):result n1 n2print(f"result{result}") 2、作用域的分类&#xff1a;属性…

Vue3-03_组件基础_上

单页面应用程序 什么是单页面应用程序 单页面应用程序&#xff08;英文名&#xff1a;Single Page Application&#xff09;简称 SPA&#xff0c;顾 名思义&#xff0c;指的是一个 Web 网站中只有唯一的一个 HTML 页面&#xff0c;所有的 功能与交互都在这唯一的一个页面内完…

09|代理(上):ReAct框架,推理与行动的协同

应用思维链推理并不能解决大模型的固有问题&#xff1a;无法主动更新自己的知识&#xff0c;导致出现事实幻觉。也就是说&#xff0c;因为缺乏和外部世界的接触&#xff0c;大模型只拥有训练时见过的知识&#xff0c;以及提示信息中作为上下文提供的附加知识。如果你问的问题超…

Fitten Code对JetBrains支持再升级,新增7大功能

十科技基于计图框架&#xff0c;推出基于代码大模型的 AI 代码助手 ——Fitten Code&#xff0c;今天&#xff0c;Fitten Code再升级&#xff0c;新增7大功能。特此转载。 「一键开启编程新时代&#xff0c;Fitten Code 对 JetBrains 支持再升级&#xff01;」 Fitten Code代码…

新火种AI|英伟达GTC大会在即,它能否撑住场面,为AI缔造下一个高度?

作者&#xff1a;小岩 编辑&#xff1a;彩云 英伟达不完全属于AI行业&#xff0c;但神奇的是&#xff0c;整个AI领域都有着英伟达的传说。因为几乎所有的AI巨头都需要英伟达的芯片来提供算力支持。 也正因此&#xff0c;纵使AI赛道人来人往&#xff0c;此起彼伏&#xff0c;…

zabbix企业微信接入结合海螺问问编写的shell脚本

前言 博客懒得写详细了&#xff0c;视频剪的累死了&#xff0c;看视频就好了 白帽小丑的个人空间-白帽小丑个人主页-哔哩哔哩视频 shell脚本 #!/bin/bash #set -x CorpID"" #我的企业下面的CorpID Secret"" #创建的应用那…