1.系统概述
Linux操作系统由4个主要的子系统所组成,如图2-6所示。
图2-5 CentOS图标
图2-6 Linux系统的4个子系统
1)用户应用程序——在某个特定的Linux系统上运行的应用程序集合,它将随着该计算机系统的用途不同而有所变化,但一般会包括文字处理应用程序和Web浏览器。
2)O/S服务——这些服务一般认为是操作系统的一部分(开窗系统、命令外壳程序等);此外,内核的编程接口(编译工具和库)也属于这个子系统。
3)Linux内核——包括内核抽象和对硬件资源(如CPU)的间接访问。
4)硬件控制器——这个子系统包含在Linux实现中所有可能的物理设备,例如,CPU、内存硬件、硬盘以及网络硬件等都是这个系统的成员。
上述系统划分方法是照搬Garlan和Shaw在《Garlan 1994》中介绍的分层类型。每个子系统层都只能与跟它相邻的层通信。此外,子系统之间的依赖关系是从上到下的:靠上的层依赖于靠下的层,但靠下的层并不依赖于靠上的层。
2.内核的目标
Linux内核向用户进程提供了一个虚拟机器接口。编写进程的时候并不需要知道计算机上安装了哪些物理硬件——Linux内核会把所有的硬件抽象成统一的虚拟接口。此外,Linux以对用户透明的方式支持多任务:每个进程工作时就像它是计算机上唯一的进程,好像是独自使用了主存和其他硬件资源一样。内核实际上同时运行许多个进程,并负责对硬件资源的间接访问,这样可以保证各个进程访问的公平性,并保证进程间的安全性。
3.内核结构的概述
Linux内核由5个主要的子系统构成。
1)进程调度程序(SCHED)负责控制进程访问CPU。调度程序所使用的策略可以保证进程能够公平地访问CPU,同时保证内核可以准时执行一些必需的硬件操作。
2)内存管理程序(MM)使多个进程可以安全地共享机器的主存系统。此外,内核管理程序支持虚拟内存。虚拟内存使得Linux可以支持进程使用超过系统中的内存数量的内存。暂时用不着的存储信息可以交换出内存,存放到使用文件系统的永久性存储器上,然后在需要它们的时候再交换回来。
3)虚拟文件系统(VFS)通过提供一个所有设备的公共文件接口,VFS抽象了不同硬件设备的细节。此外,VFS支持与其他操作系统兼容的不同的文件系统格式。
4)网络接口(NET)提供了对许多建网标准和网络硬件的访问。
5)进程间通信(IPC)子系统为单个Linux系统上进程与进程之间的通信提供了一些机制。(www.xing528.com)
图2-7是Linux内核的高级分解,图中线段的箭头是从依赖其他的子系统指向被依赖的子系统。从图2-7中可以看出,最中心最重要的子系统是进程调度程序,其他所有的子系统都依赖于进程调度程序,这是因为所有的子系统都需要中断和恢复进程的执行。一般来说,子系统会中断那些等待硬件操作完成的进程,同时恢复那些操作已经完成了的进程。例如,当某进程试图通过网络发送消息时,网络接口可能需要中断该进程,直到硬件成功完成了消息的发送。当消息发送完以后(或者硬件返回出错信号),则网络接口将用返回码来恢复该进程。返回码显示了操作是成功完成还是失败。其他子系统(内存管理程序、虚拟文件系统以及进程间通信)都是由于相似的原因而必须依赖于进程调度程序。
相比之下,其他的依赖关系就不那样明显了,但是它们也同样重要:
1)在进程恢复执行时,进程调度程序将使用内存管理程序来调整硬件内存映射。
图2-7 核心子系统
2)进程间通信子系统依赖于内存管理程序来支持共享内存通信机制。进程除了可以访问它们通常的私有内存外,共享内存通信机制将使它们可以访问一个公共的内存区。
3)虚拟文件系统使用网络接口来支持网络文件系统,它还使用内存管理程序来提供Ramdisk设备。
4)内存管理程序使用虚拟文件系统来支持交换。这是内存管理程序之所以依赖于进程调度程序的唯一原因。当某进程访问的内存当前已经被交换出内存时,内存管理程序请求文件系统从永久性存储设备中去取该内存,并中断该进程。
除了显式的依赖关系以外,内核中所有的子系统还依赖于一些在任何子系统中都没有显示出来的公共资源。它们包括所有内核子系统用于分配和释放内核所使用内存的过程、打印警告或错误信息的过程以及系统调试过程等。
这一级别的系统结构类型类似于Garlan和Shaw在《Garlan 1994》中所讨论的数据抽象类型。这里描述的每一个系统都包含状态信息,这些状态信息可以使用过程接口来访问,而每个子系统都需要维护它们所管理的资源的完整性。
4.系统数据结构
(1)任务列表
进程调度程序为每个活跃的进程维护一块数据。这些数据块是存储在链表中的,该链表称为任务列表。进程调度程序常常维护一个当前指针,该指针显示当前的活跃进程。
(2)内存映射
内存管理程序为每个进程都存储了一个从虚拟地址到物理地址的映射表,它还存储了一些有关如何获取和替换特定页面的其他信息。这一信息存放在内存映射数据结构中,该结构存放在进程调度程序的任务列表中。
(3)索引节点
在逻辑文件系统上,虚拟文件系统使用索引节点来表示文件。索引节点数据结构存放着从文件块编号到物理设备地址的映射。如果两个进程打开了同一个文件,则这两个进程可以共享索引节点数据结构。这一共享是通过指向同一个索引节点的任务数据块来完成的。
(4)数据连接
所有的数据结构都保存在进程调度程序的任务列表中。系统的每个进程都会有一个数据结构,该数据结构中包含着指向内存映射信息的指针,以及指向代表所有打开文件的索引节点的指针。最后,任务数据结构还包含着指向一些数据结构的指针,这些数据结构代表了与每个任务相联系的打开的网络连接。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。