操作系统结构

操作系统结构

    • 操作系统的机制与策略
    • 操作系统管理系统复杂度
    • 操作系统的架构及演进
      • 宏内核(Monolithic Kernel):一个单一庞大的内核负责资源管理,统一系统调用层处理所有 OS 服务,高耦合,低可靠。
      • 微内核(Micro Kernel):内核只负责 IPC,模块化好,高可靠性,IPC 成为性能关键。
      • 混合内核
      • 外核 + 库 OS(Exokernel + LibOS):资源管理和保护隔离,应用负责资源管理。
      • 单内核(Unikernel)
      • 多内核 / 复内核(Multikernel):通过多内核来管理异构多核设备。
    • 参考文献

操作系统的机制与策略

复杂系统的构建须考虑其 内部结构,而 不同目标 之间往往存在冲突,不同需求 之间需要进行权衡。

例如 用户目标 包含易用、易学、功能全、安全和流畅等,而 系统目标 则包含易设计、易实现、易维护、灵活性、可靠性和高效性等。

所以,将策略(what to do, dynamic)与机制(how to do, static)进行 解耦合,操作系统通过调整策略来适应不同应用的需求。

例子 策略 机制
登录 什么用户、什么权限 输入处理、策略文件管理、桌面启动加载
调度 调度算法 调度队列、调度实体(如线程)的表示、调度中断处理

操作系统管理系统复杂度

M.A.L.H 方法,即 模块化(modularity),抽象(abstraction),分层(layering)和层级(hierarchy)

  • 模块化:遵循分而治之原则,将复杂系统分解成通过接口进行交互的 模块,严格保障模块之间的界限。
  • 抽象:在模块化基础上,将 接口与内部实现分离
  • 分层:将模块按照一定的原则进行层次的划分,约束每层内部模块间的交互方式与跨层次模块间的交互方式。通常原则是一个模块只能和同层模块以及相邻的上层或下层模块进行交互。
  • 层级:另外一种模块的组织方式。将功能相近的模块组成一个具有清晰接口的自包含子系统,然后再将这些子系统递归地组成一个具有清晰接口的更大子系统。

操作系统的架构及演进

操作系统结构_第1张图片

宏内核(Monolithic Kernel):一个单一庞大的内核负责资源管理,统一系统调用层处理所有 OS 服务,高耦合,低可靠。

宏内核又称为单内核,将整个系统分为 内核应用 两层,特征是内核的所有模块均运行在内核态,具备直接操作硬件的能力。例如 Unix 就是一种宏内核。

  • 内核:特权级,集中控制所有计算资源。
  • 应用:非特权级,受内核管理,使用内核服务(通过系统调用)。

宏内核 优点拥有丰富的沉淀和积累(社区生态良好,不同场景优化了 30 年),缺点含有结构性缺陷(模块间弱隔离机制导致的 安全性与可靠性问题,系统太复杂无法做最坏情况时延分析导致 实时性支持差,系统太庞大 阻碍创新)。

宏内核无法满足以下场景:

  • 向上向下的扩展:很难去裁剪/扩展一个宏内核系统支持从 KB 级别到 TB 级别的场景。
  • 硬件异构性:很难长期支持一些定制化的方式去解决一些特定问题。
  • 功能安全:Linux 无法通过汽车安全完整性认证。
  • 信息安全:单点错误会导致整个系统出错。
  • 确定性时延:Linux 无法确定是否能支持确定性时延。

微内核(Micro Kernel):内核只负责 IPC,模块化好,高可靠性,IPC 成为性能关键。

微内核将单个功能或模块从内核中拆分出来作为一个独立的服务部署到独立的运行环境中,而内核仅保留少数功能,为这些服务提供通信等基础能力。

最小化内核功能 为设计原则,即将操作系统部分功能移到用户态,称为服务(server)。操作系统运行调度不同进程,并且保证 不同进程间的隔离性,使用 消息传递机制 进行用户模块间的通信。

微内核 优点 有:

  • 易于扩展:直接添加一个用户进程即可为操作系统增加服务。
  • 易于移植:大部分模块与底层硬件无关。
  • 可靠:在内核模式运行的代码量大大减少。
  • 安全:服务于服务之间存在进程粒度的隔离。
  • 健壮:单个模块出现问题不会影响到系统整体运行。

微内核 缺点 有:

  • 性能较差:内核中的模块交互由函数调用变成了进程间通信。
  • 生态欠缺:尚未形成像 Linux 一样具有广泛开发者的社区。
  • 重用问题:重用宏内核操作系统提供兼容性会带来新问题。

混合内核

将宏内核与微内核结合起来。将需要性能的模块重新放回内核态。我们常用的 MacOSWindows 系统就属于混合内核。

  • macOS/IOS = Mach 微内核 + BSD 4.3 + 系统框架。使用 XNU 内核,基于 Mach-2.5 打造,使用 BSD 代码提供文件系统、网络、POSIX 接口等。

  • Windows NT = 微内核 + 内核态的系统服务 + 系统框架。使用 Integral 子系统(用户态)负责处理 I/O、对象、管理、安全和进程等,使用环境子系统(用户态)POSIX,使用 Executive(内核态)为用户态子系统提供服务,使用 Microkernel 提供进程间同步等功能。

外核 + 库 OS(Exokernel + LibOS):资源管理和保护隔离,应用负责资源管理。

外核架构 中外核不提供硬件抽象,不管理资源,只管理应用,即负责将计算资源与应用的绑定以及资源的回收、保证多个应用间的隔离。而服务应用功能则由库 OS 来完成。

外核以 管理与保护分离 为设计原则,使用 安全绑定(Secure binding) 追踪计算资源的拥有权,使用 显式回收(Visible revocation) 保证资源的保护,使用 中止协议(Abort protocol) 回收对资源的访问权。

  • 安全绑定 将 LibOS 与计算资源绑定,允许某些 LibOS 访问某些计算资源如物理内存(可用性),防止这些计算资源被其他 LibOS 访问(隔离性)。
  • 显式资源回收与中止协议 即约定租期,并到期强制回收。
  • 磁盘管理 允许应用之间安全的共享 page cache。

库 OS 实现 策略与机制分离(将对硬件的抽象以库的形式提供),高度定制化(不同应用可使用不同的 LibOS,甚至完全自定义),高性能(LibOS 与应用其他代码间通过函数调用直接交互)。

外核 + 库 OS 的优点是 最佳性能更精确的实时控制更易调试缺点 是对计算资源的利用效率主要由应用决定,定制化过多,导致维护难度增加。

单内核(Unikernel)

可以看做虚拟化环境下的 LibOS,每个虚拟机只使用内核态,内核态中只运行一个应用 + LibOS,通过虚拟化层实现不同实例间的隔离。适合 容器应用 场景。

多内核 / 复内核(Multikernel):通过多内核来管理异构多核设备。

在每个 core 上运行一个小内核,包括 CPU、GPU 等,但 OS 整体是一个分布式系统,应用程序依旧运行在 OS 之上。

参考文献

[1]. 上海交通大学并行与分布式系统研究所 操作系统的结构 PPT.
[2].《现代操作系统原理与实现》陈海波 夏虞斌 等著.

你可能感兴趣的:(操作系统,linux)