宏内核 & 微内核
本节目录
什么是宏内核
在宏内核架构下,整个系统被分为内核与应用两层,内核运行在特权级,集中控制所有计算资源,应用运行在非特权级,受内核管理,使用内核提供的各种服务。更简明的解释如下图所示:

宏内核的优点
- 丰富的沉淀和积累:宏内核经过多年的发展,积累了丰富的功能和优化。
- 巨大的统一的社区和生态:拥有庞大的用户群体和开发者社区,生态完善。
- 针对不同场景的优化:经过 30 年的优化,宏内核能够针对各种场景提供高效的支持。
宏内核的缺点
- 安全性与可靠性问题:模块之间缺乏强隔离机制,可能导致安全隐患和可靠性问题。
- 实时性支持:由于系统复杂,难以进行最坏情况时延分析,不利于实时应用。
- 系统过于庞大:如 Linux 等宏内核系统代码行数庞大,可能阻碍了创新和灵活性。
- 扩展性
- 向上扩展:难以剪裁和扩展宏内核系统以支持从 KB 级别到 TB 级别的不同场景。
- 向下扩展:同样存在扩展性挑战,难以满足极小化系统的需求。
- 硬件异构性:难以长期支持定制化的方式解决特定硬件问题。
- 功能安全:例如 Linux,很难通过严格的功能安全认证(如汽车安全完整性认证 ASIL-D)。
- 信息安全:单点错误可能导致整个系统出错,存在大量已知的安全问题(CVE)。
- 确定性时延:虽然 Linux 花费了多年时间合并实时补丁,但目前仍不确定是否能支持确定性时延要求。
什么是微内核
在微内核架构下,采用“最小化内核功能”的方式,将操作系统功能移到用户态,称为"服务"(Server),而在用户模块之间,使用消息传递机制通信。下图所示为微内核架构:

微内核的优点
- 易于扩展:直接添加一个用户进程即可为操作系统增加服务。
- 易于移植:大部分模块与底层硬件无关。
- 更加可靠:在内核模式运行的代码量大大减少。
- 更加安全:即使存在漏洞,服务与服务之间存在进程粒度隔离。
- 更加健壮:单个模块出现问题不会影响到系统整体。
微内核的缺点
- 性能较差:内核中的模块交互由函数调用变成了进程间通信。
- 生态欠缺:尚未形成像 Linux 一样具有广泛开发者的社区。
- 重用问题:重用宏内核操作系统提供兼容性,带来新问题。
下面的图可以直观展示出微内核的性能缺陷:

有兴趣研究微内核的同学,可以自行查找相关资料学习。
宏内核 vs 微内核
下面,我们对比一下宏内核和微内核。
它们的一个非常大的区别,在于共享数据状态。宏内核中,大量的共享状态在内核态;而微内核里,部分数据在内核态,部分在用户态。

其次,在性能上,我们在上一部分已经展示出,对于某些情况下,微内核的性能会比宏内核差很多。
对于实际的操作流程,以“创建文件”为例:

混合内核架构
既然宏内核和微内核各有优缺点,那么有没有一种架构,能够结合两者的优点,同时避免两者的缺点呢?
答案是有的,这就是混合内核架构。

混合内核架构,将需要性能的模块重新放回内核态,所以可以同时具备宏内核和微内核的优点,同时避免两者的缺点。
- Windows NT:微内核+内核态的系统服务+系统框架
- macOS/i0S:Mach 微内核+BSD4.3+系统框架