Linux内核体系结构简析

article/2025/6/27 9:32:17

1.Linux内核

        

1.1 Linux内核的任务

  1. 从技术层面讲,内核是硬件和软件之间的一个中间层,作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。
  2. 从应用程序的角度讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。在实际工作中内核抽象出了相关的细节。
  3. 从资源管理的角度讲,内核是一个资源管理程序。负责将可用的共享资源(如CPU时间,磁盘空间,网络连接等)分配到各个系统进程。
  4. 从系统层面将,内核相当于是一个库,提供了一组面向系统的命令。系统调用相对于应用程序来说,就像调用普通函数一样。

1.2 Linux系统层次结构

                       

  1. Linux系统结构中位于最上层的是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下的是内核空间,Linux内核正是位于此。
            1)GNU C Library(glibc)也在此。提供了 连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制
            2)内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间(进程是资源分配的独立单位),而内核则占用单独的地址空间。
  2. Linux内核可进一步分为3层,最上面的是系统调用接口,它实现了一些基本功能,例如:read,write。系统调用接口之下是内核代码,可以更加精确地定义为独立于体系机构的内核代码(Linux所支持的所有处理器体系结构所通用的)。在这些代码之下是依赖于体系结构的代码,构成了BSP(Board Support Package)的部分——是嵌入式系统开发中的核心组件,充当硬件与操作系统之间的桥梁。它提供底层硬件驱动、配置及接口。
  3. 内核被划分为多个子系统。Linux也可以看作是一个整体,因为它会将所有这些基本服务都集成在内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信,I/O,内存和进程管理等

2. Linux内核体系结构

       Linux内核的主要组件是:系统调用接口,进程管理,内存管理,虚拟文件系统,网络堆栈,设备驱动程序,硬件架构的相关代码。

2.1 系统调用接口(SCI,system call interface)

       该层提供了某些机制执行从用户空间到内核的函数调用。该接口依赖于体系结构,甚至在相同的处理器族内也是如此。SCI层实际是一个非常有用的函数调用多路复用和多路分解服务。

2.2 进程管理(PM, process management)

  1. 进程管理的重点是进程的执行。在Linux并不区分线程和进程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和CPU寄存器)。内核通过SCI提供了一个应用程序编程接口(API)来创建一个新进程(fork, exec 或 Portable Operating System Interface),停止进程(kill, exit)。并在它们之间进行通信和同步(signal)
  2. 进程管理还包括处理活动进程之间共享CPU的需求。内核实现了一种新型的调度算法,不管有多少个线程正在竞争CPU,这种算法都可以在固定时间内进行操作——O(1)调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。同样也可以支持多处理器。

2.3 内存管理(MM, memory management)

       内核所管理的另外一个重要资源是内存。内存是按照所谓的内存页方式进行管理的(大部分体系来说都是 4KB)。Linux包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。Linux的内存管理不止4KB缓冲区,而是对4KB缓冲区提供一种抽象,如 Slab分配器 ——通过​​分层管理​​(伙伴系统 + Slab)和​​对象重用​​,高效解决了小内存块的分配问题。这种内存管理的方式使用4KB缓冲区为基数,然后从中分配结构并跟踪内存页使用情况。这样就允许根据系统需要来动态调整内存使用 (页面交换算法)

2.4 虚拟文件系统(VFS,virtual file system)

       虚拟文件系统是Linux内核中文件系统的通用的接口抽象。VFS在SCI和内核所支持的文件系统之间提供了一个交换层

2.5 网络堆栈

网络堆栈在设计上遵循模拟协议本身的分层体系结构,如IP协议是传输协议TCP下面的核心网络层协议。TCP之上的协议是 socket层,通过SCI进行调用,socket层网络子系统的标准API,它为各种网络协议提供了一个用户接口。从原始帧访问到IP协议数据单元(PDU),再到UDP,socket层提供了一种标准化的方式进行管理连接,并在各个终点之间移动数据。

2.6 设备驱动程序(大部分代码)

设备驱动程序是用于管理硬件设备并与之交互的核心组件。它们充当用户空间与硬件之间的桥梁,使应用程序无需直接操作底层硬件即可使用设备功能。

2.7 依赖体系结构的代码

3. Linux驱动的paltform机制

       Linux的paltform机制将本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform_device提供的标准接口进行申请并使用。这样提供了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性。
       platform机制分为以下三个步骤:
       1)总线注册阶段
                内核启动初始化main.c文件中的kernal_init()→do_basic_setup()→driver_init()→platform_bus_init()→bus_register(&platform_bus_type),由此注册了一条platform总线(虚拟总线,platform_bus)。
        2)驱动注册阶段
                Platform_driver_register()→driver_register()→bus_add_driver()→driver_attach()→bus_for_each_dev(),对在每个挂在虚拟的platform bus的设备作__deriver_attach()→driver_probe_device(),判断drv→bus→match()是否执行成功,此时通过指针执行platform_match→strncmp(pdev→name,drv→name,BUS_ID_SIZE),如果相符就调用really_probe(实际就是执行相应设备的platform_driver→probe(platform_device)。)开始真正的探测,如果probe成功,则绑定设备到该驱动。
        从上面可以看出,platform机制最后还是调用了bus_register(),device_add(),driver_register()这三个关键的函数。
        关键结构体: 

struct platform_device {const char* name;   //设备名称,要与platform_driver的name一样,这样总线才能匹配成功u32 id;   //id号,插入总线下相同name的设备编号(一个驱动可以有多个设备),如果只有一个设备填-1struct device dev;  //内嵌的具体的device结构体,其中成员platform_data,是个void *类型,可以给平台driver提供各种数据(比如:GPIO引脚等等)u32 num_resources;      //资源数量,struct resource  * resource;    //资源结构体,保存设备的信息
};
struct resource {resource_size_t start;                    //起始资源,如果是地址的话,必须是物理地址resource_size_t end;                      //结束资源,如果是地址的话,必须是物理地址const char *name;                         //资源名unsigned long flags;                      //资源的标志//比如IORESOURCE_MEM,表示地址资源, IORESOURCE_IRQ表示中断引脚... ...struct resource *parent, *sibling, *child;   //资源拓扑指针父、兄、子,可以构成链表
};
  • 涉及到的函数如下(在dev设备的入口出口函数中用到)

int platform_device_register(struct platform_device * pdev);//注册dev设备
int platform_device_unregister(struct platform_device * pdev);//注销dev设备

                platform机制的好处:

                1. 提供了platform_bus_type类型的总线,把那些不是总线型的soc设备都添加到这条虚拟总线上。使得,总线——设备——驱动的模式可以得到普及。

                2. 提供了platform_device和platform_driver类型的数据结构,将传统的device和driver数据结构嵌入其中,并且加入resource成员,以便于和Open Firmware这种动态传递设备的新型bootloader和kernal接轨。

参考引用:linux_kernel_wiki/文章/Linux内核架构和工作原理.md at main · 0voice/linux_kernel_wiki


http://www.hkcw.cn/article/KvVkeLllcK.shtml

相关文章

ESP-IDF 离线安装——同时存在多个版本以及进行版本切换的方法

一、离线安装包的下载方法 ESP-IDF离线安装包下载链接 我下载了下面三个版本进行测试 二、离线安装包的安装方法 1.创建文件夹 创建ESP-IDF文件夹,并为不同版本的IDF分别创建一个文件夹,如下图所示 2.双击离线安装包(以5.0版本为例&am…

企业数实产业技术融合数据(2000-2024)

1943 企业数实产业技术融合(2000-2024) 数据简介 当前,高质量发展成为经济发展主赛道,新质生产力不仅是经济转型的关键力量 ,更是引领新兴战略性产业、提高国家竞争力的核心要素。在全球经济动荡格局中,发展新质生产力对推动高…

CANoe Trace中DLC和Data length的区别

✅ 1. DLC 与 Data Length 的区别 字段名含义备注DLC (Data Length Code)指示该 CAN 帧声明的数据长度(0~8)这是 报文头中的信息Data LengthCANoe 实际提取并显示的 Data 字节数量一般是 等于 DLC,但有例外(如下) ✅ …

简单了解string类的特性及使用(C++)

string的特性 string类不属于STL,它属于标准库 但由于它具有数据结构的特性,所以从归类的角度,可以将string类归类到容器里面去 在C标准库中,std::string 是一个特化的类型,实际上是 std::basic_string 的别名。std…

【stm32开发板】PCB模块化布局

一、DCDC电路布局规则 通顺 抗干扰 1.通顺 流过大电流的路径尽可能的短 2.抗干扰 可以在反馈线附近加过孔,增强抗干扰能力 二、PCB布局 1、将原理图转到PCB 2.点击应用修改 3.修改规则 将mm改成mil 将安全间距里的填充区域/泪滴的导线间距改为6,还…

【性能调优系列】深入解析火焰图:从基础阅读到性能优化实战

博客目录 一、火焰图基础:结构与阅读方法二、深入分析火焰图:关键观察点与性能瓶颈识别1. 识别最宽的函数块2. HTTP 请求处理分析3. 数据库操作分析4. 业务逻辑分析 三、性能优化实战:从火焰图到解决方案1. 线程池性能优化2. 数据库访问优化3…

AI智能体|扣子(Coze)搭建【合同/文档审查】工作流

你好,我是偶然!前段时间工作上发生了重大的调整,导致我停更超一周。 但在这段时间里,我也有了一些自己的职场上的感悟,下面我分享给你,再给你分享今天的智能体。 不要怕任何的人和事,为什么怕&a…

家政维修平台实战12搭建服务详情功能

目录 1 创建页面2 搭建布局2.1 搭建背景容器2.2 添加内容区域2.3 配置服务项目图片2.4 搭建标题和价格2.5 搭建服务详情 最终效果总结 上一篇我们介绍了服务规格的搭建过程,有了后台功能并且维护好数据之后,我们就可以开发服务详情页面了,先看…

回测效率提升500%!khQuant打板策略回测性能深度剖析——基于miniQMT的回测系统深度优化【AI量化第29篇】

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统(KhQuant 是其核心框架)。 一、…

2025年上半年各地都发布了哪些电竞政策?虎牙Hyper电竞嘉年华引领新趋势

近日,2025虎牙Hyper电竞嘉年华正式宣布将于6月21日至22日在成都欢乐谷主题公园举行。这场盛会融合了电竞、文旅与乡村振兴,由新华社国家重点实验室主办,新华优品作为支持平台。活动不仅将呈现精彩的电竞比赛,还将通过直播展示乡村美景、特色农产品以及村民的热情好客。作为…

黄金直线拉升 国际金价跳空高开

6月2日,受特朗普关税政策影响,国际金价跳空高开,截至发稿前已经超过3340美元。今年以来,国际金价累计上涨约25.5%。截至当天上午10:30,各大银行和品牌金条价格普遍上涨,周生生、中国黄金、水贝等品牌的金条价格都有所上升。其中,周生生的涨幅最大,较前一天上涨了6元/克…

德约科维奇法网100胜 晋级八强续写辉煌

德约科维奇在法网男单1/8决赛中直落三盘击败英国名将诺里,顺利晋级八强。接下来他将与兹维列夫争夺四强席位。此前,德约科维奇五次对阵诺里均取得胜利。比赛中,德约科维奇首盘迅速破发并以6比2赢得第一盘。第二盘,尽管诺里一度领先,但德约科维奇迅速回破并以6比3再下一城。…

【AI+若依框架】基础应用篇

【AI若依框架】基础应用篇 一、若依搭建1、基础2、RuoYi-Vue2.1 后端项目搭建2.2 前端项目搭建 二、入门案例三、功能详解1、权限控制1.1 基础概念1.2 案例操作 2、数据字典2.1 基础知识2.2 案列操作 3、其他功能3.1 参数设置3.2 通知公告3.3 日志管理 4、监控功能4.1 监控相关…

美国2.5亿只蜜蜂出逃密密麻麻 车祸引发蜜蜂大逃亡

美国西北部的华盛顿州发生了一场车祸,导致约2.5亿只蜜蜂飞出。这起事故发生在当地时间5月30日,一辆运送蜜蜂的卡车在靠近加拿大边境的地区行驶时侧翻。霍特科姆县治安官办公室随后通过社交媒体发布消息,提醒公众避开该区域,以防被大量蜜蜂蜇伤。据霍特科姆县应急部门发言人…

意大利埃特纳火山喷发 灰柱高达5千米

当地时间6月2日,意大利西西里岛的埃特纳火山再次喷发,火山灰柱高达至少5千米。尽管如此,位于火山附近的卡塔尼亚机场依然保持运转,未受火山喷发影响。西西里大区政府主席斯基法尼表示,政府民事保护部门正在密切监测火山活动,目前喷发暂时不会对当地居民构成危险。作为欧洲…

天机学堂(初始项目)

资料的网盘链接:https://pan.baidu.com/s/1IyA8mHLhPQv6ibZR4a0DUQ 提取码: xdnb 1.学习背景 各位同学大家好,经过前面的学习我们已经掌握了《微服务架构》的核心技术栈。相信大家也体会到了微服务架构相对于项目一的单体架构要复杂很多,…

TomatoSCI数据分析实战:探索社交媒体成瘾

今天我们尝试对一份社交媒体成瘾的调查数据进行几项简单的分析,看看可以得出哪些有意思的结论?图1A是这份数据的说明,因为篇幅太长只把部分数据贴出来(图1B)。 01 不同性别的成瘾程度会不同吗? 我们使用bo…

【安全】VulnHub靶场 - W1R3S

【安全】VulnHub靶场 - W1R3S 备注一、故事背景二、Web渗透1.主机发现端口扫描2.ftp服务3.web服务 三、权限提升 备注 2025/05/22 星期四 简单的打靶记录 一、故事背景 您受雇对 W1R3S.inc 个人服务器进行渗透测试并报告所有发现。 他们要求您获得 root 访问权限并找到flag&…

【Java Web】6.登入认证

📘博客主页:程序员葵安 🫶感谢大家点赞👍🏻收藏⭐评论✍🏻 文章目录 一、登录功能 1.1 需求 1.2 思路分析 1.3 代码实现 二、登录校验 2.1 问题分析 2.2 会话技术 2.2.1 会话技术介绍 2.2.2 会话…

探秘Transformer系列之(35)--- 大模型量化基础

探秘Transformer系列之(35)— 大模型量化基础 文章目录 探秘Transformer系列之(35)--- 大模型量化基础0x00 概述0x01 outlier1.1 定义1.2 特点1.3 出现过程1.4 分布规律1.5 出现原因1.5.1 softmaxLLM模型VIT模型 1.5.2 RoPE现象分…