Linu内核的整体架构

上传人:ni****g 文档编号:431484845 上传时间:2023-11-04 格式:DOCX 页数:7 大小:357.66KB
返回 下载 相关 举报
Linu内核的整体架构_第1页
第1页 / 共7页
Linu内核的整体架构_第2页
第2页 / 共7页
Linu内核的整体架构_第3页
第3页 / 共7页
Linu内核的整体架构_第4页
第4页 / 共7页
Linu内核的整体架构_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《Linu内核的整体架构》由会员分享,可在线阅读,更多相关《Linu内核的整体架构(7页珍藏版)》请在金锄头文库上搜索。

1、Linux内核的整体架构1. 前言本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的 整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和 各个软件子系统对应。注:本文和其它的“Linux内核分析”文章都基于如下约定:a)内核版本为Linux 3.10.29 (该版本是一个long term的版本,会被Linux社区持续维护至少2 年),可以从下面的链接获取:https:/www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.29.tar.xzb)鉴于嵌入式系统大多使用AR

2、M处理器,因此涉及到体系结构部分的内容,都以ARM为分析 对象2. Linux内核的核心功能如下图所示,Linux内核只是Linux操作系统一部分。对下,它管理系统的所有硬件设备;对上, 它通过系统调用,向Library Routine (例如C库)或者其它应用程序提供接口。因此,其核心功能就是:管理硬件设备,供应用程序使用。而现代计算机(无论是PC还是嵌入 式系统)的标准组成,就是CPU、Memory (内存和外存)、输入输出设备、网络设备和其它的 外围设备。所以为了管理这些设备,Linux内核提出了如下的架构。3. Linux内核的整体架构3.1整体架构和子系统划分上图说明了 Linux内

3、核的整体架构。根据内核的核心功能,Linux内核提出了 5个子系统,分别 负责如下的功能:1. Process Scheduler,也称作进程管理、进程调度。负责管理CPU资源,以便让各个进程可 以以尽量公平的方式访问CPU。2. Memory Manager,内存管理。负责管理Memory (内存)资源,以便让各个进程可以安全地 共享机器的内存资源。另外,内存管理会提供虚拟内存的机制,该机制可以让进程使用多于系统 可用Memory的内存,不用的内存会通过文件系统保存在外部非易失存储器中,需要使用的时 候,再取回到内存中。3. VFS(Virtual File System),虚拟文件系统。L

4、inux内核将不同功能的外部设备,例如Disk 设备(硬盘、磁盘、NAND Flash、Nor Flash等)、输入输出设备、显示设备等等,抽象为可 以通过统一的文件操作接口(open、close、read、write等)来访问。这就是Linux系统一切 皆是文件”的体现(其实Linux做的并不彻底,因为CPU、内存、网络等还不是文件,如果真的 需要一切皆是文件,还得看贝尔实验室正在开发的Pla n 9”的)。4. Network,网络子系统。负责管理系统的网络设备,并实现多种多样的网络标准。5. IPC (Inter-Process Communication),进程间通信。IPC不管理任何

5、的硬件,它主要负责Linux系统中进程之间的通信。3.2 进程调度(Process Scheduler)进程调度是Linux内核中最重要的子系统,它主要提供对CPU的访问控制。因为在计算机中, CPU资源是有限的,而众多的应用程序都要使用CPU资源,所以需要“进程调度子系统”对CPU 进行调度管理。进程调度子系统包括4个子模块(见下图),它们的功能如下:1. Scheduling Policy,实现进程调度的策略,它决定哪个(或哪几个)进程将拥有CPU。2. Architecture-specific Schedulers,体系结构相关的部分,用于将对不同CPU的控制,抽象为 统一的接口。这些

6、控制主要在suspend和resume进程时使用,牵涉到CPU的寄存器访问、汇 编指令操作等。3. Architecture-independent Scheduler,体系结构无关的部分。它会和Scheduling Policy 模块 沟通,决定接下来要执行哪个进程,然后通过Architecture-specific Schedulers模块resume指 定的进程。4. System Call In terface,系统调用接口。进程调度子系统通过系统调用接口,将需要提供给用 户空间的接口开放出去,同时屏蔽掉不需要用户空间程序关心的细节。3.3 内存管理(Memory Manager, M

7、M)内存管理同样是Linux内核中最重要的子系统,它主要提供对内存资源的访问控制。Linux系统 会在硬件物理内存和进程所使用的内存(称作虚拟内存)之间建立一种映射关系,这种映射是以 进程为单位,因而不同的进程可以使用相同的虚拟内存,而这些相同的虚拟内存,可以映射到不 同的物理内存上。内存管理子系统包括3个子模块(见下图),它们的功能如下:1. Architecture Specific Managers,体系结构相关部分。提供用于访问硬件Memory的虚拟接 口。2. Architecture In depe nde nt Ma nager,体系结构无关部分。提供所有的内存管理机制,包括:

8、以进程为单位的memory mapping;虚拟内存的Swapping。3. System Call In terface,系统调用接口。通过该接口,向用户空间程序应用程序提供内存的分 配、释放,文件的map等功能。3.4 虚拟文件系统(Virtual Filesystem, VFS)传统意义上的文件系统,是一种存储和组织计算机数据的方法。它用易懂、人性化的方法(文件 和目录结构),抽象计算机磁盘、硬盘等设备上冰冷的数据块,从而使对它们的查找和访问变得 容易。因而文件系统的实质,就是存储和组织数据的方法”,文件系统的表现形式,就是从某个 设备中读取数据和向某个设备写入数据”。随着计算机技术的进

9、步,存储和组织数据的方法也是在不断进步的,从而导致有多种类型的文件 系统,例如FAT、FAT32、NTFS、EXT2、EXT3等等。而为了兼容,操作系统或者内核,要以 相同的表现形式,同时支持多种类型的文件系统,这就延伸出了虚拟文件系统(VFS)的概念。 VFS的功能就是管理各种各样的文件系统,屏蔽它们的差异,以统一的方式,为用户程序提供 访问文件的接口。我们可以从磁盘、硬盘、NAND Flash等设备中读取或写入数据,因而最初的文件系统都是构建 在这些设备之上的。这个概念也可以推广到其它的硬件设备,例如内存、显示器(LCD)、键盘、 串口等等。我们对硬件设备的访问控制,也可以归纳为读取或者写

10、入数据,因而可以用统一的文 件操作接口访问。Linux内核就是这样做的,除了传统的磁盘文件系统之外,它还抽象出了设备 文件系统、内存文件系统等等。这些逻辑,都是由VFS子系统实现。VFS子系统包括6个子模块(见下图),它们的功能如下:Legend: |Non-KernelLayerKernel Sub-SystemModuleMultipleModulesDepends onControl Flow“ |Data Flow |1. Device Drivers,设备驱动,用于控制所有的外部设备及控制器。由于存在大量不能相互兼容 的硬件设备(特别是嵌入式产品),所以也有非常多的设备驱动。因此,L

11、inux内核中将近一半 的Source Code都是设备驱动,大多数的Linux底层工程师(特别是国内的企业)都是在编写 或者维护设备驱动,而无暇估计其它内容(它们恰恰是Linux内核的精髓所在)。2. Device In depe ndent In terface,该模块定义了描述硬件设备的统一方式(统一设备模型), 所有的设备驱动都遵守这个定义,可以降低开发的难度。同时可以用一致的形势向上提供接口。3. Logical Systems,每一种文件系统,都会对应一个Logical System (逻辑文件系统),它会 实现具体的文件系统逻辑。4. System In depe nde nt

12、In terface,该模块负责以统一的接口(快设备和字符设备)表示硬件设 备和逻辑文件系统,这样上层软件就不再关心具体的硬件形态了。5. System Call In terface,系统调用接口,向用户空间提供访问文件系统和硬件设备的统一的接 口。3.5网络子系统(Net)网络子系统在Linux内核中主要负责管理各种网络设备,并实现各种网络协议栈,最终实现通过 网络连接其它系统的功能。在Linux内核中,网络子系统几乎是自成体系,它包括5个子模块(见 下图),它们的功能如下:Legend: |Non-KernelLayerKernel Sub-SystemModuleMultipleMod

13、ulesDepends onControl Flow“ |Data Flow |1. Network Device Drivers,网络设备的驱动,和VFS子系统中的设备驱动是一样的。2. Device In depe ndent In terface,和 VFS 子系统中的是一样的。3. Network Protocols,实现各种网络传输协议,例如IP, TCP, UDP等等。4. Protocol In depe ndent In terface,屏蔽不同的硬件设备和网络协议,以相同的格式提供接口 (socket)。5. System Call in terface,系统调用接口,向用户

14、空间提供访问网络设备的统一的接口。至于IPC子系统,由于功能比较单纯,这里就不再描述了。4. Linux内核源代码的目录结构Linux内核源代码包括三个主要部分:1. 内核核心代码,包括第3章所描述的各个子系统和子模块,以及其它的支撑子系统,例如电 源管理、Linux初始化等2. 其它非核心代码,例如库文件(因为Linux内核是一个自包含的内核,即内核不依赖其它的 任何软件,自己就可以编译通过)、固件集合、KVM (虚拟机技术)等3. 编译脚本、配置文件、帮助文档、版权说明等辅助性文件下图示使用ls命令看到的内核源代码的顶层目录结构,具体描述如下。in elude/ -内核头文件,需要提供给外

15、部模块(例如用户空间代码)使用。kernel/ Linux内核的核心代码,包含了 3.2小节所描述的进程调度子系统,以及和进程调度 相关的模块。mm/ -内存管理子系统(3.3小节)。fs/ 一 VFS子系统(3.4小节)。net/ -不包括网络设备驱动的网络子系统(3.5小节)。ipc/ -IPC (进程间通信)子系统。arch/ -体系结构相关的代码,例如arm, x86等等。arch/mach具体的 machine/board 相关的代码。arch/include/asm -体系结构相关的头文件。arch/boot/dts -设备树(Device Tree)文件。in it/ - Linux系统启动初始化相关的代码。block/ -提供块设备的层次。sou nd/ -音频相关的驱动及子系统,可以看作音频子系统。drivers/ -设备驱动(在Linux kernel 3.10中,设备驱动占了 49.4的代码量)。lib/ -实现需要在内核中使用的库函数,例如CRC、FIFO、list、MD5等。cryp to/ 加密、解密相关的库函数。security/ 一 提供安全特性(SELinux)。virt/ -

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号