Linux0.11内核图解
总结自赵炯《Linux内核完全注释》,做为学习笔记
Linux 内核模式
Linux 0.11 内核,采用了单内核模式。单内核模式的主要优点是内核代码结构紧凑、执行速度快,不足之处主要是层次结构性不强。可粗略地分为三个层次:调用服务的主程序层、执行系统调用的服务层和支持系统调用的底层函数。如图:
Linux 内核系统体系结构
Linux 内核主要由 5 个模块构成,它们分别是:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。这几个模块之间的依赖关系如图:
所有的模块都与进程调度模块存在依赖关系。因为它们都需要依靠进程调度程序来挂起(暂停)或重新运行它们的进程。通常,一个模块会在等待硬件操作期间被挂起,而在操作完成后才可继续运行。
根据Linux 0.11 内核源代码的结构将内核主要模块绘制,如图:
所有这些模块还会依赖于内核中的通用资源。这些资源包 括内核所有子系统都会调用的内存分配和收回函数、打印警告或出错信息函数以及一些系统调试函数。
中断机制
在使用 80X86 组成的 PC 机中,采用了两片 8259A 可编程中断控制芯片。每片可以管理 8 个中断源。 通过多片的级联方式,能构成最多管理 64 个中断向量的系统。在PC/AT 系列兼容机中,使用了两片 8259A 芯片,共可管理 15 级中断向量,如图:
在总线控制器控制下,8259A 芯片可以处于编程状态和操作状态。编程状态是 CPU 使用 IN 或 OUT 指令对 8259A 芯片进行初始化编程的状态。一旦完成了初始化编程,芯片即进入操作状态,此时芯片即 可随时响应外部设备提出的中断请求(IRQ0 – IRQ15)。
通过中断判优选择,芯片将选中当前高优先级 的中断请求作为中断服务对象,并通过 CPU 引脚 INT 通知 CPU 外中断请求的到来,CPU响应后,芯片从数据总线 D7-D0 将编程设定的当前服务对象的中断号送出,CPU 由此获取对应的中断向量值,并执行 中断服务程序。
对于 Linux 内核来说,中断信号通常分为两类:硬件中断和软件中断(异常)。每个中断是由 0-255 之间的一个数字来标识。对于中断 int0–int31(0x00–0x1f),每个中断的功能由 Intel 公司固定设定或保留用, 属于软件中断,但 Intel 公司称之为异常。因为这些中断是在 CPU 执行指令时探测到异常情况而引起的。中断 int32–int255 (0x20–0xff)可以由用户自己设定。 在 Linux 系统中,则将 int32–int47(0x20–0x2f)对应于 8259A 中断控制芯片发出的硬件中断请求信号 IRQ0-IRQ15,并把程序编程发出的系统调用(system_call)中断设置为 int128(0x80)。
进程管理
内核程序通过进程表(task)对进程进行管理,每个进程在