1. Operating System Structures

第一课 OS Structure Model


The strategy for integrating different operating system components within the kernel can be thought of as an operating system structure.

1.1 Simple Structure

简单结构并不是一个 well-defined 的结构,体积小、功能简单局限是简单结构的特点。简单结构的接口和功能层次并没有很好的分开。它的设计目标就是为了激活和管理早期计算机的硬件资源。

简单结构的设计直接与硬件交互,减少了中间层。但这也意味着它们缺乏现代操作系统中常见的保护和安全机制。

以MS-DOS (Disk Operating System) 为例的简单结构 :

  • 层次结构:

    1. 不支持多线程、多任务、网络、硬件保护和虚拟内存高级功能;
    2. 仅支持命令行接口CLI;
    3. 虽然提供了一些API以访问硬件,但用户程序也可以直接访问硬件。
  • 优点:

    1. 由于用户程序和硬件之间较少的接口层次决定了该系统不错的运行性能;
    2. 层次结构简单、功能局限使得OS开发相对容易。
  • 缺点:

    1. 缺乏数据保护机制,应用程序可以轻易访问并篡改系统中的数据;
    2. 应用程序的错误可能使整个系统崩溃;

    Pasted image 20240501224716.png

1.2 Layered Approach Structure

在分层结构中,操作系统被划分成不同层次(Layer/Level)并使得各个层次完成其层级的功能而不必在意低层级是如何实现的。下图就是分层结构典型的实现方式。

Pasted image 20240501230701.png
其中,每一层级都为上层提供服务,即下层为上层提供接口,上层直接调用下层实现的功能接口。

  1. 最低层级第0层(Layer 0)是硬件层;
  2. 第一层直接控制硬件,实现对硬件的管理功能;
  3. 在第二层的模块功能开发中,若需要使用硬件,必须通过第一次所提供的接口;
  4. 在第三层及以上的模块在开发时必须使用低一层提供的接口,直至第N层的用户接口层。
  • 优点

    1. 分层结构简化了debug的过程,当错误发生时,我们可以很容易地定位到发生错误的层级;
    2. 实现了数据的抽象和封装,每一层只需要知道低一层级所能够提供的服务,无需关注细节;
    3. 通过限制对低层级的直接访问,增强了系统安全;
    4. 结构分层次简化了层次拓展的过程且不影响其他层级。
  • 缺点

    1. 性能开销: 每一层级间的通信都可能引入额外的调用开销。
    2. 层间依赖: 尽管每层理论上只依赖于低一层,但在实际开发中,上层的设计往往难以完全脱离对下层详细实现的依赖,这可能导致上层在下层变更时进行调整,弱化了理想中的独立性。
    3. 设计复杂: 正确地设计各层的功能和接口可能非常复杂,需要精确定义每一层的职责,避免功能重叠或漏洞。
  • 分层结构(Layered Approach)的一个经典例子是THE操作系统(Technische Hogeschool Eindhoven Operating System ),它由荷兰科学家Edsger Dijkstra及其团队在1960年代未设计。THE操作系统是为了在教育中展示分层设计概念而创建的, 每层都只能执行特定的功能,并且只能使用更低层提供的功能。THE操作系统的分层如下:

    第5层 - 用户界面
    ↓ ↑
    第4层 - 文件系统
    ↓ ↑
    第3层 - I/O缓冲管理
    ↓ ↑
    第2层 - 内存管理
    ↓ ↑
    第1层 - 操作系统核心,负责调度和通信
    ↓ ↑
    第0层 - 硬件

1.3 Monolithic Kernel

单体内核是一种传统的操作系统架构,其典型代表是早期Unix系统,始于20世纪60年代。在这种架构中,内核不仅包含基本的系统管理功能,还集成了设备驱动、文件系统管理等高级管理任务。其结构组成包括内核和系统程序两部分:

  1. 内核:工作在特权模式,负责时钟管理、中断管理、设备驱动、CPU切换及对进程、存储器和设备的管理。
  2. 系统程序 :运行在非特权模式,通过系统调用结构利用内核提供的服务。
    Pasted image 20240925014738.png
  • 优点

    1. 简化设计与实现:所有内核功能都整合在同一个地址空间内,无需复杂的通信机制或额外的上下文切换,从而简化了系统设计并提高了执行效率。
    2. 性能优势:由于各部分紧密集成,功能间调用的开销最小,从而在性能上具有优势。
  • 缺点

    1. 系统稳定性问题:由于所有核心都集中在一个大的内核中,任何一个功能的失败都可能导致整个系统的崩溃。
    2. 维护和扩展困难:随着内核功能的增加,其复杂度上升,这使得维护和添加新功能变得困难。(屎山代码)

尽管单体内核因其结构庞大且复杂,但许多流行的操作系统如Unix、Linux、Windows、Android和HarmonyOS都采用了基于这种模式的混合结构。这些系统通过在单体内核基础上引入模块化和微内核元素,形成了所谓”混合内核“架构,以提高系统的灵活性和可维护性。

1.4 Microkernel

在20世纪80年代,卡内基梅隆大学的研究人员Richard Rashid发布了Mach操作系统,这是第一个采用微内核结构的操作系统。这种结构的操作系统将所有非必需部件从内核中剥离,仅保留诸如地址空间管理、进程调度和进程间通信等核心功能,而其他系统服务则在用户空间运行。 系统服务进程与用户进程之间通过消息机制(一种进程间通信方式, IPC)进行通信。
Pasted image 20240925014813.png
这种做法的 优点 在于便于扩展操作系统。所有的服务可以在用户空间中增加,而无需修改内核。即使需要对内核进行修改,由于微内核本身体积很小,所需的修改也相对较少。

微内核架构的 缺点 同样明显。由于大多数服务如文件系统和网络协议运行在用户空间,内核与这些服务之间的频繁上下文切换和消息传递显著增加了执行开销。微内核架构的性能通常低于单体内核架构,尤其在需要高频服务调用的场景下,性能差距更为明显。

1.5 Modular Structure

在这种结构下,内核包含一组核心组件,并能在启动或运行时通过加载模块来引入额外的服务。这种设计常见于现代操作系统如Unix和Linux。核心思想是内核提供必要的基础服务,而其他可选服务则可以在运行时动态地以模块形式加载,实现动态链接。

Pasted image 20240924165346.png

这种模块化设计允许系统在不重新编译整个内核的情况下,直接添加或更新功能。每当需要更改时,只需操作相关模块而非整个内核,从而简化了更新和维护过程,提高了系统的灵活性和扩展性。

1.6 Hybrid Structure

现实应用中,很少有操作系统采用单一严格定义的结构。而是结合各个结构是优点,形成混合系统,以便解决性能、安全性、可用性的问题。

Windows/macOS:宏内核+微内核
Linux:模块化+宏内核

Pasted image 20240501235413.png

1.7 Exokernal

外核是一种十分激进的操作系统内核架构。旨在尽可能地减少对应用程序开发者施加的抽象层。与传统的操作系统内核相比,外核将资源保护和管理分离,允许应用进程直接管理硬件资源。外核首次由MIT的研究人员在1995年提出( engler95_exokernel.pdf)。

最小化内核高性能灵活性高是外核的特点。它的设计理念是将操作系统内核的功能最小化,只提供最基本的硬件抽象层,允许应用程序直接管理硬件资源。这种设计与传统的操作系统内核(如Monolithic Kernel和Microkernel)有很大不同。

Exokernel的设计理念对虚拟机管理程序(hypervisors)有很大的启发。特别是Exokernel中的系统调用(syscalls)与虚拟机管理程序中的超调用(hypercalls)有很多相似之处。超调用是虚拟机与虚拟机管理程序之间的接口,用于管理虚拟化环境中的资源。

Pasted image 20240925015122.png