Professordeng's Blog

一个关键的设计问题是操作系统的哪个部分应该在内核模式下运行。一种可能是整个操作系统都位于内核中,因此所有系统调用的实现都以内核模式运行。这个组织被称为大内核。

在此组织中,整个操作系统以完全硬件权限运行。这个组织很方便,因为 OS 设计器不必决定操作系统的哪个部分不需要完全的硬件特权。此外,操作系统的不同部分很容易协作。例如,一个操作系统可能有一个缓冲缓存,可以由文件系统和虚拟内存系统共享。

大内核的一个缺点是,操作系统不同部分之间的接口通常很复杂(我们将在本文的其余部分看到),因此操作系统开发人员很容易出错。在大内核中,错误是致命的,因为内核模式中的错误通常会导致内核崩溃。如果内核出现故障,计算机将停止工作,因此所有应用程序也将失败。计算机必须重新启动。

为了降低内核出错的风险,操作系统设计者可以最小化在内核模式下运行的操作系统代码的数量,并在用户模式下执行操作系统的大部分代码。这种内核组织称为微内核。

1-1

figure1-1

1-1 说明了这种微内核设计。在图中,文件系统作为用户级流程运行。作为进程运行的操作系统称为服务器。为了允许应用程序与文件服务器交互,内核提供了一种进程间通信机制,以将消息从一个用户模式进程发送到另一个用户模式进程。例如,如果像 shell 这样的应用程序想要读或写文件,它会向文件服务器发送一条消息并等待响应。

在微内核中,内核接口由一些低级函数组成,这些函数用于启动应用程序、发送消息、访问设备硬件等。这种组织允许内核相对简单,因为大多数操作系统位于用户级服务器中。

XV6 是作为一个大内核实现的,遵循大多数 Unix 操作系统。因此,在 XV6 中,内核接口对应于操作系统接口,内核实现完整的操作系统。由于 XV6 不提供很多服务,它的内核比一些微内核还要小。