宏内核

将系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为用户程序提供高性能的性能优势。

微内核

只把最基本的功能留在内核,其余模块都运行在用户态。

包含在内核中的核心功能包括:

  1. 与硬件处理紧密相关的部分,如低级存储器管理;中断和陷入处理
  2. 一些较基本的功能,如进程、线程管理
  3. 客户与服务器之间的通信

低级存储器管理,用于实现将逻辑地址变换为物理地址等的页表机制和地址变换机制,这一部分依赖于硬件。而关于页面置换算法选择、内存分配回收策略等则放在微内核外的存储器管理服务器中。

缺点

  1. 性能较差:内核中的模块交互由函数调用变成了进程间通信
  2. 重用问题:重用宏内核操作系统提供兼容性,带来新问题

外核(Exokernel)

外核只负责硬件资源的分配、回收、保护等。

不提供硬件抽象

  • “只要内核提供抽象,就不能实现性能最大化”
  • 只有应用才知道最适合的抽象(end-to-end 原则)

不管理资源,只管理应用

  • 负责将计算资源与应用的绑定,以及资源的回收
  • 保证多个应用之间的隔离

库 OS(LibOS)

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

优点

  1. OS 无抽象,能在理论上提供最优性能
  2. 应用对计算有更精确的实时等控制
  3. LibOS 在用户态更易调试,调试周期更短
  4. 可以按照应用领域的特点和需求,动态组装成最适合该应用领域的 LibOS ,最小化非必要代码,从而获得更高性能
  5. 处于硬件特权级的操作系统内核可以做到非常小,并且由于多个 LibOS 之间的强隔离性,从而可以提升安全性和可靠性

缺点

  1. 对计算资源的利用效率主要由应用决定
  2. 定制化过多,导致维护难度增加