Linux内核的工作机制的研究和理解

(整期优先)网络出版时间:2023-10-17
/ 2

Linux内核的工作机制的研究和理解

丽鸿 李琳

广东交通职业技术学院信息学院  广东省清远市  511510

Linux是一套开放开源计算机操作系统,同时,它自带了便携式操作系统接口,集多客户、多功能为一体,支援多线程和多CPU的控制系统的运行。Linux系统也被称为Unix系统,不过据说现在世界上大部分的服务器都是以Linux系统为主的,而且绝大部分的超级计算机都在使用着Linux所以学习linux对于计算机专业的学生相当重要。

以下是对linux里的一些重要模块的研究和理解。

1.精简的Linux系统概念模型

linux操作系统是一个基于POSIX的多用户、多任务、支持多线程的复杂系统。      

                                                         https://img2020.cnblogs.com/blog/2237445/202105/2237445-20210517163538615-1390622058.png

(1)进程管理:主要负载CPU的访问控制,对CPU进行调度管理;

(2)内存管理:主要提供对内存资源的访问控制;

(3)文件系统:将硬盘的扇区组织成文件系统,实现文件读写等操作;

(4)设备驱动程序:用于控制所有的外部设备及控制器;

(5)网络服务:主要负责管理各种网络设备,并实现各种网络协议栈,最终实现通过网络连接其它系统的功能;

每个部分分别处理一项明确的功能,又向其它各个部分提供自己所完成的功能,相互协调,共同完成操作系统的任务。

2.1进程管理

进程的基本状态
  创建状态:
    进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
  就绪状态:
    进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
  执行状态:
    进程处于就绪状态被调度后,进程进入执行状态
  阻塞状态:
    正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
  终止状态:
    进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

https://img2020.cnblogs.com/blog/2338636/202105/2338636-20210517210705902-622629052.png

2.2中断管理

      中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。

      同步中断由CPU本身产生,又称为内部中断。这里同步是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕后,CPU才能进行中断,不能在执行期间。所以也称为异常(exception)。

      异步中断是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括指令执行期间,所以也被称为中断(interrupt)。

      异常又可分为可屏蔽中断(Maskable interrupt)和非屏蔽中断(Nomaskable interrupt)。而中断可分为故障(fault)、陷阱(trap)、终止(abort)三类。

      广义上讲,中断又可分为四类:中断、故障、陷阱、终止。

Linux中断机制由三部分组成:

  1. 中断子系统初始化:内核自身初始化过程中对中断处理机制初始化,例如中断的数据结构以及中断请求等。
  2. 中断或异常处理:中断整体处理过程。
  3. 中断API:为设备驱动提供API,例如注册,释放和激活等。

                                    https://img2020.cnblogs.com/blog/2237445/202105/2237445-20210517170820071-1101762563.png

2.3文件管理

       Linux中一切都是文件,包括硬件设备,这样用户可以采用读写文件的方式实现访问硬件。

       文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的有序序列。文件系统,就是操作系统中实现文件统一管理的一组软件、被管理的文件以及为实施文件管理所需要的一些数据结构的总称。要实现操作系统对其他各种不同文件系统的支持,就要将对各种不同文件系统的操作和管理纳入到一个统一的框架中。对用户程序隐去各种不同文件系统的实现细节,为用户程序提供一个统一的、抽象的、虚拟的文件系统界面,这就是所谓的虚拟文件系统VFS。为各类文件系统提供了一个统一的操作界面和应用编程接口。

      原理也很简单,用户态下有几个系统调用函数,包括read()、write()、open()、close()等,作用类似于字面意义,就是读写打开关闭文件。 然后调用内核中sys_open()、sys_read()等函数,对包括FAT、设备文件等在内的文件系统操作。可以说VFS是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用。

      通常,虚拟文件系统分为三个层次:

第一层为文件系统接口层,如open/write/close等系统调用接口。

第二层为VFS接口层。该层有两个接口:一个是与用户的接口;一个是与特定文件系统的接口。VFS与用户的接口将所有对文件的操作定向到相应的特定文件系统函数上。VFS与特定文件系统的接口主要是通过VFS-operations实现。

第三层是具体文件系统层,提供具体文件系统的结构和实现,包括网络文件系统,如NFS。

      这里以打开文件说明。打开文件即使用 open 函数,它首先通过按名查找,看在高速缓存中有没有查找的 inode,如果有那么对其进行引用并加 1。如果没有将创建新的 vfs的 inode 对象和目录项对象等。 Open 函数调用的系统服务例程是 sys_open 函数,其接受的参数为文件目录和访问的模式。如果文件存在则返回一个文件描述符fd,如果不存在则返回-1. Read 函数调用的服务例程是 sys_read ,接受三个参数。分别是一个文件描述符 fd,一个对数据缓存的地方buf,和需要传输的数据的多少 count。Read 对将文件读入缓存区。

 影响性能的因素: 1.硬件的速度2.缓存的命中 3.网络性能4.内存限制5.文件系统性能

https://img2020.cnblogs.com/blog/2338636/202105/2338636-20210517211823999-1636973210.png

2.4设备驱动程序

驱动是应用程序操作硬件的中间层

https://img2020.cnblogs.com/blog/2338636/202105/2338636-20210517212346729-188700579.png

设备驱动程序相关的数据结构

https://img2020.cnblogs.com/blog/2338636/202105/2338636-20210517212408811-1855537060.png

目前大多数人们对Linux系统的掌握还仅仅只是入门而已,并没有达到很高的专业水平。因此掌握Linux是个很漫长的过程,也非常耗时间。作为计算机专业的学子,Linux在将来有更多广阔的发展空间,所以现在的学习都是值得的。在不远的将来我们一定可以掌握Linux系统知识,为计算机系统贡献自己的力量。