2801 字
14 分钟
1.4操作系统结构

随着操作系统功能的不断扩展和代码规模的持续增长,采用合理的结构设计对降低系统复杂度、提升安全性和可靠性至关重要。

1. 分层法#

分层法将操作系统划分为若干层次,最底层(层0)为硬件,顶层(层N)为用户接口。各层仅可调用其紧邻下层所提供的功能与服务(单向依赖)。

分层法的优点如下:

  1. 便于调试与验证,系统可自底向上逐层开发与测试。层1完成且验证无误后,即可开发层2,因其仅依赖已验证的下层;后续各层以此类推。若某层出现错误,可将其定位在该层内部,因其所有依赖的下层均已通过验证。
  2. 易于扩充与维护。在保持层间接口不变的前提下,可独立修改、替换或新增某一层的实现,而不会影响其他层次的功能。

分层法的问题如下:

  1. 层次划分困难。合理界定各层的功能边界较为复杂,且一旦依赖关系固化,系统架构可能缺乏灵活性。
  2. 运行效率较低。执行一个高层功能通常需穿越多个中间层,每层之间的参数传递与控制转移会引入额外开销,从而影响系统整体性能。

2. 模块化#

模块化是将操作系统按功能划分为若干具有一定独立性的模块。每个模块实现特定的管理功能,并明确定义与其他模块的接口,以便通过这些接口进行通信。还可进一步将模块细分为若干子模块,并且规定子模块之间的接口。这种设计方法称为模块-接口法

在划分模块时,若模块过小,虽然可降低单个模块的复杂性,但会导致模块间交互频繁,增加系统的整体复杂度;若模块过大,则模块内部结构复杂,难以维护。因此,需要在粒度大小之间取得合理平衡。此外,应高度重视模块的独立性:模块独立性越高,相互依赖越少,系统结构越清晰。衡量模块独立性的主要标准有两个:

  • 内聚性,模块内部各组成部分间联系的紧密程度。内聚性越高,模块独立性越好。
  • 耦合度,模块间相互依赖和影响的程度。耦合度越低,模块独立性越好。

模块化的优点:

  1. 提高了操作系统设计的正确性、可理解性和可维护性;
  2. 增强了系统的可适应性,便于功能扩展;
  3. 支持并行开发,加速操作系统研制进程。

模块化的缺点:

  1. 模块间的接口规定很难满足对接口的实际需求。
  2. 各模块设计者齐头并进,每个决定无法建立在上一个已验证的正确决定的基础上,因此无法找到一个可靠的决定顺序。

3. 宏内核#

从操作系统的内核架构来划分,可分为宏内核微内核

宏内核(也称单内核大内核)将系统的主要功能模块集成在一个紧密耦合的整体中,运行于内核态,从而为用户程序提供高效的系统服务。由于各模块共享地址空间,可直接调用彼此的函数,减少了上下文切换和消息传递开销,因而具有较高的性能优势。

然而,随着体系结构和应用需求的不断发展,操作系统需提供的服务日益复杂,代码规模急剧膨胀,导致系统维护困难、可靠性下降,面临典型的“软件危机”。为提升系统的模块化、可扩展性与安全性,微内核技术应运而生:其核心思想是仅保留最基本的功能(如进程调度、进程间通信等)在内核中,而将文件系统、设备驱动等非核心服务移至用户态运行。

从发展现状看,当前主流操作系统(如Linux 、Windows 、Android )主要采用宏内核或混合内核架构,在保持高性能的同时,也吸收了微内核的部分设计理念。例如,macOS 和iOS所采用的XNU内核即融合了Mach微内核与BSD宏内核的特性。这表明,宏内核与微内核并非对立,而是相互借鉴、融合发展。近年来,随着对安全性和可验证性的重视,微内核架构重新受到关注,尤其是谷歌的Fuchsia 和华为的HarmonyOS NEXT ,都采用了微内核架构。

4. 微内核#

(1) 微内核的基本概念#

微内核架构是指将操作系统中最基本的功能保留在内核,而将其他非核心功能移至用户态运行,从而降低内核的复杂性。这些移出的功能被组织为若干独立的服务程序,它们运行在用户态,彼此之间以及与客户进程之间的交互均通过微内核提供的消息传递机制完成。

微内核结构将操作系统划分为两大部分:微内核多个服务器微内核是一个精心设计的小型内核,仅实现操作系统最核心的机制,通常包括:

  1. 与硬件紧密相关的部分;
  2. 基本的资源管理机制;
  3. 客户与服务器间的通信支持。

这些部分为构建完整的操作系统提供了基础,确保内核保持极小规模。操作系统的绝大部分功能都放在微内核外的一组服务器(进程)中实现,运行在用户态。例如,进程/线程服务器、虚拟存储器服务器等,均以用户态进程的形式提供相应服务。

在微内核结构中,为提升可靠性,仅微内核运行在内核态,其余模块均运行在用户态。因此,某一模块(如文件服务器)发生故障时,仅该模块崩溃,系统可通过重启该服务恢复,而不会导致整个系统宕机。相比之下,在宏内核中,文件系统运行于内核态,其崩溃将直接引发系统崩溃。

(2) 微内核的基本功能#

微内核操作系统遵循“机制与策略分离”的设计原则,将与硬件紧密相关的机制置于微内核中,而将策略交由用户态服务器实现。通过这种划分,进程管理、存储器管理和I/O管理等功能均被分解为两部分:机制保留在微内核中,策略则由外部服务器实现。由于服务器通常远大于微内核,该设计使微内核得以保持极小的规模。具体而言,微内核通常具备以下功能:

  1. 进程(线程)管理。微内核提供进程/线程的创建、切换、调度队列管理等机制,而进程分类、优先级分配等策略则由用户态的进程管理服务器实现。
  2. 低级存储器管理。微内核仅包含与硬件相关的地址转换机制(如页表管理、逻辑地址到物理地址的映射),而页面置换算法、内存分配策略等由用户态的存储器管理服务器实现。
  3. 中断和陷入处理。微内核负责捕获硬件中断和陷入事件,在识别中断或异常类型后,将其分发给相应的用户态服务器处理。中断与陷入的捕获及分发机制属于微内核的核心功能。

(3) 微内核的特点#

微内核结构的主要优点如下:

  1. 扩展性和灵活性。新增或修改功能只需调整相应服务器,无须改动内核。
  2. 可靠性和安全性。用户态服务的故障不会导致系统崩溃,且攻击面更小。
  3. 可移植性。仅微内核包含硬件相关代码,其余服务器与平台无关,便于移植。
  4. 分布式计算。客户/服务器间通过消息传递通信,易于扩展至网络环境。

微内核结构的主要缺点是性能问题,每次服务请求需多次穿越内核态与用户态,导致系统调用延迟增加。为缓解此问题,部分现代系统采用混合内核设计,在保留微内核思想的同时,将高频服务移入内核以提升性能,但这又会使微内核的容量明显增大。

尽管如此,微内核因其高可靠性和可验证性,被广泛应用于对系统可靠性要求极高的关键任务领域,如实时操作系统、工业控制、航空航天及军事等。

5. 外核#

与传统操作系统通过抽象层向应用程序提供统一接口不同,外核(exokernel )采用一种截然不同的设计思想:将物理资源直接暴露给用户级系统,自身仅负责资源的安全分配与隔离

在外核架构中,外核作为运行于内核态的极小程序,其核心职责是将底层硬件资源(如磁盘块、内存页、网络包缓冲区等)划分为互不重叠的子集,并分配给不同的用户级系统。例如,一个用户级系统可能被分配磁盘的0~1023块,另一个用户级系统则被分配独特的1024~2047块。外核通过权限检查机制,确保各用户级系统仅能访问其被明确授权的资源,防止越权访问。

在外核之上,可在用户空间构建库操作系统(library OS ),自主实现文件系统、进程调度、虚拟内存管理等传统操作系统功能。由于库操作系统直接操作物理资源,无须经过传统内核强制性的抽象层,因此避免了不必要的数据拷贝、地址转换以及上下文切换开销,显著提升了系统性能与灵活性。

外核机制的主要优点如下。

  1. 减少抽象开销。传统操作系统强制引入虚拟内存、虚拟文件系统等映射层,而外核允许用户级系统按需定制资源使用方式,显著降低了系统开销。
  2. 提升灵活性与性能。用户级系统可根据应用特性优化资源管理策略(如数据库可以直接管理磁盘块),充分发挥硬件的潜力。
  3. 清晰分离保护与实现外核仅负责资源保护,功能实现完全置于用户空间,系统结构简洁且易于验证。

评论