tags:
- OS
The strategy for integrating different operating system components within the kernel can be thought of as an operating system structure.
简单结构并不是一个 well-defined 的结构,体积小、功能简单局限是简单结构的特点。简单结构的接口和功能层次并没有很好的分开。它的设计目标就是为了激活和管理早期计算机的硬件资源。
简单结构的设计直接与硬件交互,减少了中间层。但这也意味着它们缺乏现代操作系统中常见的保护和安全机制。
以MS-DOS (Disk Operating System) 为例的简单结构 :
层次结构:
优点:
缺点:
在分层结构中,操作系统被划分成不同层次(Layer/Level)并使得各个层次完成其层级的功能而不必在意低层级是如何实现的。下图就是分层结构典型的实现方式。
其中,每一层级都为上层提供服务,即下层为上层提供接口,上层直接调用下层实现的功能接口。
优点:
缺点:
分层结构(Layered Approach)的一个经典例子是THE操作系统(Technische Hogeschool Eindhoven Operating System ),它由荷兰科学家Edsger Dijkstra及其团队在1960年代未设计。THE操作系统是为了在教育中展示分层设计概念而创建的, 每层都只能执行特定的功能,并且只能使用更低层提供的功能。THE操作系统的分层如下:
第5层 - 用户界面
↓ ↑
第4层 - 文件系统
↓ ↑
第3层 - I/O缓冲管理
↓ ↑
第2层 - 内存管理
↓ ↑
第1层 - 操作系统核心,负责调度和通信
↓ ↑
第0层 - 硬件
单体内核是一种传统的操作系统架构,其典型代表是早期Unix系统,始于20世纪60年代。在这种架构中,内核不仅包含基本的系统管理功能,还集成了设备驱动、文件系统管理等高级管理任务。其结构组成包括内核和系统程序两部分:
优点:
缺点:
尽管单体内核因其结构庞大且复杂,但许多流行的操作系统如Unix、Linux、Windows、Android和HarmonyOS都采用了基于这种模式的混合结构。这些系统通过在单体内核基础上引入模块化和微内核元素,形成了所谓”混合内核“架构,以提高系统的灵活性和可维护性。
在20世纪80年代,卡内基梅隆大学的研究人员Richard Rashid发布了Mach操作系统,这是第一个采用微内核结构的操作系统。这种结构的操作系统将所有非必需部件从内核中剥离,仅保留诸如地址空间管理、进程调度和进程间通信等核心功能,而其他系统服务则在用户空间运行。 系统服务进程与用户进程之间通过消息机制(一种进程间通信方式, IPC)进行通信。
这种做法的 优点 在于便于扩展操作系统。所有的服务可以在用户空间中增加,而无需修改内核。即使需要对内核进行修改,由于微内核本身体积很小,所需的修改也相对较少。
微内核架构的 缺点 同样明显。由于大多数服务如文件系统和网络协议运行在用户空间,内核与这些服务之间的频繁上下文切换和消息传递显著增加了执行开销。微内核架构的性能通常低于单体内核架构,尤其在需要高频服务调用的场景下,性能差距更为明显。
在这种结构下,内核包含一组核心组件,并能在启动或运行时通过加载模块来引入额外的服务。这种设计常见于现代操作系统如Unix和Linux。核心思想是内核提供必要的基础服务,而其他可选服务则可以在运行时动态地以模块形式加载,实现动态链接。
这种模块化设计允许系统在不重新编译整个内核的情况下,直接添加或更新功能。每当需要更改时,只需操作相关模块而非整个内核,从而简化了更新和维护过程,提高了系统的灵活性和扩展性。
现实应用中,很少有操作系统采用单一严格定义的结构。而是结合各个结构是优点,形成混合系统,以便解决性能、安全性、可用性的问题。
Windows/macOS:宏内核+微内核
Linux:模块化+宏内核
外核是一种十分激进的操作系统内核架构。旨在尽可能地减少对应用程序开发者施加的抽象层。与传统的操作系统内核相比,外核将资源保护和管理分离,允许应用进程直接管理硬件资源。外核首次由MIT的研究人员在1995年提出( engler95_exokernel.pdf)。
最小化内核、高性能、灵活性高是外核的特点。它的设计理念是将操作系统内核的功能最小化,只提供最基本的硬件抽象层,允许应用程序直接管理硬件资源。这种设计与传统的操作系统内核(如Monolithic Kernel和Microkernel)有很大不同。
Exokernel的设计理念对虚拟机管理程序(hypervisors)有很大的启发。特别是Exokernel中的系统调用(syscalls)与虚拟机管理程序中的超调用(hypercalls)有很多相似之处。超调用是虚拟机与虚拟机管理程序之间的接口,用于管理虚拟化环境中的资源。