1.7 操作系统结构

我们已经分析了操作系统的外部(如,程序员接口),现在是分析其内部的时候了。在下面的小节中,为了对各种可能的方式有所了解,我们将考察已经尝试过的六种不同的结构设计。这样做并没有穷尽各种结构方式,但是至少给出了在实践中已经试验过的一些设计思想。这六种设计是,单体系统、层次系统、微内核、客户机-服务器系统、虚拟机和exokernels等。

1.7.1 单体系统

到目前为止,在多数常见的组织形式的处理方式中,全部操作系统在内核态中以单一程序的方式运行。整个操作系统以过程集合的方式编写,链接成一个大型可执行二进制程序。使用这种技术,系统中每个过程可以自由调用其他过程,只要后者提供了前者所需要的一些有用的计算工作。这些可以不受限制彼此调用的成千个过程,常常导致出现一个笨拙和难于理解的系统。

在使用这种处理方式构造实际的目标程序时,首先编译所有单个的过程,或者编译包含过程的文件,然后通过系统链接程序将它们链接成单一的目标文件。依靠对信息的隐藏处理,不过在这里实际上是不存在的,每个过程对其他过程都是可见的(相反的构造中有模块或包,其中多数信息隐藏在模块之中,而且只能通过正式设计的入口点实现模块的外部调用)。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

但是,即使在单体系统中,也可能有一些结构存在。可以将参数放置在良好定义的位置(如,栈),通过这种方式,向操作系统请求所能提供的服务(系统调用),然后执行一个陷阱指令。这个指令将机器从用户态切换到内核态并把控制传递给操作系统,如图1-17中第6步所示。然后,操作系统取出参数并且确定应该执行哪一个系统调用。随后,它在一个表格中检索,在该表格的k槽中存放着指向执行系统调用k过程的指针(图1-17中第7步)。

对于这类操作系统的基本结构,有着如下结构上的建议:

1)需要一个主程序,用来处理服务过程请求。

2)需要一套服务过程,用来执行系统调用。

3)需要一套实用过程,用来辅助服务过程。在该模型中,每一个系统调用都通过一个服务过程为其工作并运行之。要有一组实用程序来完成一些服务过程所需要用到的功能,如从用户程序取数据等。可将各种过程划分为一个三层的模型,如图1-24所示。

阅读 ‧ 电子书库
图 1-24 简单的单体系统结构模型

除了在计算机初启时所装载的核心操作系统外,许多操作系统支持可装载的扩展,诸如I/O设备驱动和文件系统。这些部件可以按照需要载入。