2021-11-02

linux源码分析之内核结构体系

    想要对linux的内核进行分析首先要对linux的整天结构有一个了解,然后再此基础上逐层或逐模块进行分析;建议从内核的低版本进行分析完后,再挑选高版本进行分析;因为linux内核的整体架构,在大的架构上基本没有太大的改动;只要理解透彻了低版本的源码,分析起高版本的内核代码就不会迷失方向,做到有的放矢。
    操作系统主要由4部分组成:硬件、操作系统内核、操作系统服务和用户应用程序,见下图所示。用户应用程序是指那些文本处理,Internet应用相关的程序或者是用户自行开发的程序;操作系统服务程序是指那些向用户提供的服务被看作是操作系统部分功能的程序。在Linux操作系统上,这些程序包括GNOME、shell命令解析系统以及那些内核编程接口等系统程序;操作系统内核主要用于对硬件资源的抽象和访问调度。

2021-11-02_第1张图片

                              操作系统垂直划分

Linux内核的主要用途就是为了与计算机硬件进行交互,实现对硬件部件的编程控制和接口操作,调度对硬件资源的访问,并为计算机上的用户程序提供一个高级的执行环境和对硬件的虚拟接口。
目前,操作系统内核的结构模式主要可分为整体式的单内核模式和层次式的微内核模式。Linux 0.11内核,采用了单内核模式。单内核的主要有点是内核代码结构紧凑、执行速度快,不足之处是层次结构性不强。
在单内核模式的系统中,操作系统所提供服务的流程为:应用程序使用指定的参数值执行系统调用指令(int x80),使CPU从用户态切换到核心态,然后操作系统根据具体的参数值调用特定的系统调用服务程序,而这些服务程序则根据需要再调用底层的一些支持函数以完成特定的功能。在完成了应用程序所要求的服务后,操作系统又使CPU从核心态切换回用户态,从而返回到应用程序中继续执行后面的指令。因此概要的讲,单内核的内核也可粗略的分为三个层次:调用服务的主程序层、执行系统调用的服务层和支持系统调用的底层函数。

2021-11-02_第2张图片

                               Linux内核系统调用示意图

Linux内核主要由5个模块构成,它们分别是:进程调用模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。
进程调度模块用力啊负责控制进程对CPU资源的使用。所采取的调度策略是各进程能够公平合理地访问CPU,同时保证内核能及时的执行硬件操作。内存管理模块用于确保所有进程能够安全地共享机器主内存区,同时,内存管理模块还支持虚拟内存管理方式,使得Linux支持进程使用比实际内存空间更多的内存容量。并可以利用文件系统把暂时不用的内存数据交换到外部储存设备上去,当需要使再交换回来。文件系统模块用于支持对外部设备的驱动和存储。虚拟文件系统模块通过向所有的外部存储设备提供一个通用的文件接口,隐藏了各种硬件设备的不同细节。从而提供并支持与其他操作系统兼容的多种网络通信标准的访问并支持许多网络硬件。

2021-11-02_第3张图片

由上图可以看出,所有的模块都与进程调度模块存在依赖关系。因为它们都需要依靠进程调度程序来挂起(暂停)或重新运行它们的进程。通常,一个模块会在等待硬件才做期间被挂起,而在操作完成后才可继续运行。例如,当一个进程视图将一数据块写到软盘上去时,软盘驱动程序就可能在启动软盘旋转期间将该进程置为挂起等待状态,而在软盘进入到正常转速后再使得该进程能继续运行。 管理器来支持共享内存通信机制。
进程调度子系统需要使用内存管理来调整一特定进程所使用的物理内存空间。进程间通信子系统则需要依靠内存管理器来支持共享内存通信机制。这种通信机制允许两个进程访问内存的同一个区域以进行进程间信息的交换。

在linux0.11版本时,还没有实现虚拟文件系统和网络接口模块。

2021-11-02_第4张图片

                                  内核结构框图

其中内核级中的几个方框,除了硬件控制方框以外,其他粗线方框分别对应内核源代码的目录组织结构。
除了这些图中已经给出的依赖关系以外,所有这些模块还会依赖于内核中的通用资源。这些资源包括内核所有子系统都会调用的内存分配和收回函数、打印告警或出错信息函数以及一些系统调式函数。

参考书籍:
linux内核源代码情景分析
linux内核设计与实现
深入理解linux内核
深入理解计算机系统
linux内核完全注解等

你可能感兴趣的:(linux)