宏内核
将系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为用户程序提供高性能的性能优势。
微内核
只把最基本的功能留在内核,其余模块都运行在用户态。
包含在内核中的核心功能包括:
- 与硬件处理紧密相关的部分,如低级存储器管理;中断和陷入处理
- 一些较基本的功能,如进程、线程管理
- 客户与服务器之间的通信
低级存储器管理,用于实现将逻辑地址变换为物理地址等的页表机制和地址变换机制,这一部分依赖于硬件。而关于页面置换算法选择、内存分配回收策略等则放在微内核外的存储器管理服务器中。
缺点
- 性能较差:内核中的模块交互由函数调用变成了进程间通信
- 重用问题:重用宏内核操作系统提供兼容性,带来新问题
外核(Exokernel)
外核只负责硬件资源的分配、回收、保护等。
不提供硬件抽象
- “只要内核提供抽象,就不能实现性能最大化”
- 只有应用才知道最适合的抽象(end-to-end 原则)
不管理资源,只管理应用
- 负责将计算资源与应用的绑定,以及资源的回收
- 保证多个应用之间的隔离
库 OS(LibOS)
- 策略与机制分离:将对硬件的抽象以库的形式提供
- 高度定制化:不同应用可使用不同的 LibOS,或完全自定义
- 更高性能:LibOS 与应用其他代码之间通过函数调用直接交互
优点
- OS 无抽象,能在理论上提供最优性能
- 应用对计算有更精确的实时等控制
- LibOS 在用户态更易调试,调试周期更短
- 可以按照应用领域的特点和需求,动态组装成最适合该应用领域的
LibOS
,最小化非必要代码,从而获得更高性能 - 处于硬件特权级的操作系统内核可以做到非常小,并且由于多个
LibOS
之间的强隔离性,从而可以提升安全性和可靠性
缺点
- 对计算资源的利用效率主要由应用决定
- 定制化过多,导致维护难度增加