这是"操作系统系列教程"的第二十五篇。前面几篇我们补写了导论模块,知道了操作系统是什么、Linux 是什么、国产操作系统有哪些。这一篇,我们回到操作系统本身,聊一个更底层、也更根本的问题:操作系统的体系结构。也就是说,操作系统的各个功能模块,到底是怎么组织在一起的?是全部塞进内核,还是拆分成多个独立服务?这就是宏内核、微内核和外核要回答的问题。
一个"怎么分工"的问题
先来想一个场景。假设你要开一家公司,有销售、财务、人事、技术、后勤五个部门。你有两种管理方式:
方式一:所有部门集中在一个大办公室,部门之间直接喊话沟通。效率高,但一个人出错可能影响所有人,而且办公室会越来越拥挤。
方式二:每个部门独立办公,通过邮件或电话沟通。某个部门出问题不会影响其他部门,但沟通成本高,效率可能下降。
操作系统的设计也面临同样的选择。操作系统的功能很多:进程管理、内存管理、文件系统、设备驱动、网络协议栈......这些功能到底应该怎么组织?
- 全部放在内核里,还是部分放到用户态?
- 模块之间直接调用,还是通过消息传递?
- 内核应该尽可能大,还是尽可能小?
这些问题的答案,就构成了操作系统的体系结构(Operating System Architecture)。
这篇文章,我们就来把操作系统的三种主要体系结构------宏内核 、微内核 和外核------讲清楚。
说明:本文涉及内核设计、进程间通信、系统调用等概念。初学者如果遇到暂时看不懂的术语,可以先跳过细节,重点理解"宏内核把功能都放在内核里,微内核只保留最核心的功能,外核把资源管理交给应用程序"这一核心思想。
一、什么是操作系统的体系结构?
1.1 从"内核该有多大"说起
操作系统的体系结构,核心问题是:内核应该包含哪些功能?
- 如果内核包含所有功能,就是宏内核;
- 如果内核只包含最核心的功能,其他功能放到用户态,就是微内核;
- 如果内核只负责资源保护和分配,把资源管理交给应用程序,就是外核。
这三种体系结构,代表了三种不同的设计哲学。
1.2 体系结构的定义
给出一个正式的定义:
操作系统的体系结构是指操作系统内核的设计方式,包括内核包含哪些功能模块、模块之间如何交互、内核与用户态程序如何分工。
这个定义里有三个关键点:
- 内核包含哪些功能:是全部功能,还是只保留核心功能;
- 模块之间如何交互:是直接函数调用,还是通过消息传递;
- 内核与用户态的分工:哪些功能在内核态,哪些在用户态。
1.3 三种体系结构总览
#mermaid-svg-roIifDw4UIoIdrTS{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-roIifDw4UIoIdrTS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-roIifDw4UIoIdrTS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-roIifDw4UIoIdrTS .error-icon{fill:#552222;}#mermaid-svg-roIifDw4UIoIdrTS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-roIifDw4UIoIdrTS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-roIifDw4UIoIdrTS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-roIifDw4UIoIdrTS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-roIifDw4UIoIdrTS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-roIifDw4UIoIdrTS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-roIifDw4UIoIdrTS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-roIifDw4UIoIdrTS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-roIifDw4UIoIdrTS .marker.cross{stroke:#333333;}#mermaid-svg-roIifDw4UIoIdrTS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-roIifDw4UIoIdrTS p{margin:0;}#mermaid-svg-roIifDw4UIoIdrTS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-roIifDw4UIoIdrTS .cluster-label text{fill:#333;}#mermaid-svg-roIifDw4UIoIdrTS .cluster-label span{color:#333;}#mermaid-svg-roIifDw4UIoIdrTS .cluster-label span p{background-color:transparent;}#mermaid-svg-roIifDw4UIoIdrTS .label text,#mermaid-svg-roIifDw4UIoIdrTS span{fill:#333;color:#333;}#mermaid-svg-roIifDw4UIoIdrTS .node rect,#mermaid-svg-roIifDw4UIoIdrTS .node circle,#mermaid-svg-roIifDw4UIoIdrTS .node ellipse,#mermaid-svg-roIifDw4UIoIdrTS .node polygon,#mermaid-svg-roIifDw4UIoIdrTS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-roIifDw4UIoIdrTS .rough-node .label text,#mermaid-svg-roIifDw4UIoIdrTS .node .label text,#mermaid-svg-roIifDw4UIoIdrTS .image-shape .label,#mermaid-svg-roIifDw4UIoIdrTS .icon-shape .label{text-anchor:middle;}#mermaid-svg-roIifDw4UIoIdrTS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-roIifDw4UIoIdrTS .rough-node .label,#mermaid-svg-roIifDw4UIoIdrTS .node .label,#mermaid-svg-roIifDw4UIoIdrTS .image-shape .label,#mermaid-svg-roIifDw4UIoIdrTS .icon-shape .label{text-align:center;}#mermaid-svg-roIifDw4UIoIdrTS .node.clickable{cursor:pointer;}#mermaid-svg-roIifDw4UIoIdrTS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-roIifDw4UIoIdrTS .arrowheadPath{fill:#333333;}#mermaid-svg-roIifDw4UIoIdrTS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-roIifDw4UIoIdrTS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-roIifDw4UIoIdrTS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-roIifDw4UIoIdrTS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-roIifDw4UIoIdrTS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-roIifDw4UIoIdrTS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-roIifDw4UIoIdrTS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-roIifDw4UIoIdrTS .cluster text{fill:#333;}#mermaid-svg-roIifDw4UIoIdrTS .cluster span{color:#333;}#mermaid-svg-roIifDw4UIoIdrTS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-roIifDw4UIoIdrTS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-roIifDw4UIoIdrTS rect.text{fill:none;stroke-width:0;}#mermaid-svg-roIifDw4UIoIdrTS .icon-shape,#mermaid-svg-roIifDw4UIoIdrTS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-roIifDw4UIoIdrTS .icon-shape p,#mermaid-svg-roIifDw4UIoIdrTS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-roIifDw4UIoIdrTS .icon-shape .label rect,#mermaid-svg-roIifDw4UIoIdrTS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-roIifDw4UIoIdrTS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-roIifDw4UIoIdrTS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-roIifDw4UIoIdrTS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 操作系统体系结构
宏内核
微内核
外核
所有功能在内核态
直接函数调用
只保留核心功能
消息传递
内核只做资源保护
资源管理在用户态
图 1:操作系统的三种主要体系结构。 宏内核、微内核、外核。
二、宏内核:把所有功能装进内核
2.1 什么是宏内核?
宏内核 (Monolithic Kernel)是最传统、最常见的操作系统体系结构。它的核心思想是:把操作系统的所有核心功能都放在内核态中运行。
这些功能包括:
- 进程管理;
- 内存管理;
- 文件系统;
- 设备驱动;
- 网络协议栈;
- 进程间通信。
在宏内核中,所有模块都在同一个地址空间内运行,模块之间可以直接调用函数。
2.2 宏内核的结构
#mermaid-svg-iJuXe0kRUXsuuu8m{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-iJuXe0kRUXsuuu8m .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iJuXe0kRUXsuuu8m .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iJuXe0kRUXsuuu8m .error-icon{fill:#552222;}#mermaid-svg-iJuXe0kRUXsuuu8m .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iJuXe0kRUXsuuu8m .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iJuXe0kRUXsuuu8m .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iJuXe0kRUXsuuu8m .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iJuXe0kRUXsuuu8m .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iJuXe0kRUXsuuu8m .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iJuXe0kRUXsuuu8m .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iJuXe0kRUXsuuu8m .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iJuXe0kRUXsuuu8m .marker.cross{stroke:#333333;}#mermaid-svg-iJuXe0kRUXsuuu8m svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iJuXe0kRUXsuuu8m p{margin:0;}#mermaid-svg-iJuXe0kRUXsuuu8m .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-iJuXe0kRUXsuuu8m .cluster-label text{fill:#333;}#mermaid-svg-iJuXe0kRUXsuuu8m .cluster-label span{color:#333;}#mermaid-svg-iJuXe0kRUXsuuu8m .cluster-label span p{background-color:transparent;}#mermaid-svg-iJuXe0kRUXsuuu8m .label text,#mermaid-svg-iJuXe0kRUXsuuu8m span{fill:#333;color:#333;}#mermaid-svg-iJuXe0kRUXsuuu8m .node rect,#mermaid-svg-iJuXe0kRUXsuuu8m .node circle,#mermaid-svg-iJuXe0kRUXsuuu8m .node ellipse,#mermaid-svg-iJuXe0kRUXsuuu8m .node polygon,#mermaid-svg-iJuXe0kRUXsuuu8m .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-iJuXe0kRUXsuuu8m .rough-node .label text,#mermaid-svg-iJuXe0kRUXsuuu8m .node .label text,#mermaid-svg-iJuXe0kRUXsuuu8m .image-shape .label,#mermaid-svg-iJuXe0kRUXsuuu8m .icon-shape .label{text-anchor:middle;}#mermaid-svg-iJuXe0kRUXsuuu8m .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-iJuXe0kRUXsuuu8m .rough-node .label,#mermaid-svg-iJuXe0kRUXsuuu8m .node .label,#mermaid-svg-iJuXe0kRUXsuuu8m .image-shape .label,#mermaid-svg-iJuXe0kRUXsuuu8m .icon-shape .label{text-align:center;}#mermaid-svg-iJuXe0kRUXsuuu8m .node.clickable{cursor:pointer;}#mermaid-svg-iJuXe0kRUXsuuu8m .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-iJuXe0kRUXsuuu8m .arrowheadPath{fill:#333333;}#mermaid-svg-iJuXe0kRUXsuuu8m .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-iJuXe0kRUXsuuu8m .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-iJuXe0kRUXsuuu8m .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iJuXe0kRUXsuuu8m .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-iJuXe0kRUXsuuu8m .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iJuXe0kRUXsuuu8m .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-iJuXe0kRUXsuuu8m .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-iJuXe0kRUXsuuu8m .cluster text{fill:#333;}#mermaid-svg-iJuXe0kRUXsuuu8m .cluster span{color:#333;}#mermaid-svg-iJuXe0kRUXsuuu8m div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-iJuXe0kRUXsuuu8m .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-iJuXe0kRUXsuuu8m rect.text{fill:none;stroke-width:0;}#mermaid-svg-iJuXe0kRUXsuuu8m .icon-shape,#mermaid-svg-iJuXe0kRUXsuuu8m .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iJuXe0kRUXsuuu8m .icon-shape p,#mermaid-svg-iJuXe0kRUXsuuu8m .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-iJuXe0kRUXsuuu8m .icon-shape .label rect,#mermaid-svg-iJuXe0kRUXsuuu8m .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iJuXe0kRUXsuuu8m .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-iJuXe0kRUXsuuu8m .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-iJuXe0kRUXsuuu8m :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 硬件
内核态
用户态
应用程序
系统库
系统调用接口
进程管理
内存管理
文件系统
设备驱动
网络协议栈
CPU · 内存 · 磁盘 · 网卡
图 2:宏内核的结构。 所有核心功能都在内核态,模块之间直接调用。
2.3 宏内核的优点
| 优点 | 说明 |
|---|---|
| 性能高 | 模块之间直接函数调用,不需要消息传递 |
| 实现直接 | 模块之间可以共享数据结构,调用方便 |
| 设计简单 | 不需要复杂的进程间通信机制 |
| 成熟稳定 | 经过几十年发展和优化 |
2.4 宏内核的缺点
| 缺点 | 说明 |
|---|---|
| 内核体积大 | 所有代码都在内核态,内核越来越大 |
| 可靠性差 | 一个模块出错可能导致整个系统崩溃 |
| 安全性低 | 内核攻击面大,漏洞影响范围广 |
| 扩展困难 | 添加新功能需要重新编译内核或加载模块 |
| 维护复杂 | 模块之间耦合度高,修改一处可能影响多处 |
2.5 宏内核的代表系统
Linux 是最著名的宏内核操作系统。虽然 Linux 支持内核模块(可以在运行时动态加载和卸载驱动),但本质上仍然是宏内核。
传统的 Unix 也是宏内核。早期的 Unix 内核包含了进程管理、内存管理、文件系统、设备驱动等所有功能。

图 3:宏内核的代表系统。 Linux、传统 Unix、FreeBSD。
2.6 Linux 的内核模块机制
Linux 虽然是宏内核,但支持内核模块(Loadable Kernel Module,LKM)。内核模块可以在运行时动态加载和卸载,不需要重新编译整个内核。
bash
# 查看已加载的内核模块
lsmod
# 加载内核模块
modprobe 模块名
# 卸载内核模块
rmmod 模块名
内核模块机制兼顾了宏内核的性能和一定的灵活性,但模块仍然运行在内核态,出错仍可能导致系统崩溃。
三、微内核:只保留最核心的功能
3.1 什么是微内核?
微内核 (Microkernel)的设计思想与宏内核相反:内核只保留最核心的功能,其他功能都移到用户态。
微内核只包含:
- 进程调度;
- 基本内存管理;
- 进程间通信(IPC)。
文件系统、设备驱动、网络协议栈等功能,都以用户态服务的形式运行。
3.2 微内核的结构
#mermaid-svg-Dk3b4xJ7h1d3HjS2{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .error-icon{fill:#552222;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .marker.cross{stroke:#333333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 p{margin:0;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .cluster-label text{fill:#333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .cluster-label span{color:#333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .cluster-label span p{background-color:transparent;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .label text,#mermaid-svg-Dk3b4xJ7h1d3HjS2 span{fill:#333;color:#333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node rect,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node circle,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node ellipse,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node polygon,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .rough-node .label text,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node .label text,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .image-shape .label,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .icon-shape .label{text-anchor:middle;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .rough-node .label,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node .label,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .image-shape .label,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .icon-shape .label{text-align:center;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node.clickable{cursor:pointer;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .arrowheadPath{fill:#333333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .cluster text{fill:#333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .cluster span{color:#333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 rect.text{fill:none;stroke-width:0;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .icon-shape,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .icon-shape p,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .icon-shape .label rect,#mermaid-svg-Dk3b4xJ7h1d3HjS2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Dk3b4xJ7h1d3HjS2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 硬件
内核态
用户态
应用程序
文件系统服务
设备驱动服务
网络服务
微内核
进程调度
基本内存管理
进程间通信
CPU · 内存 · 磁盘 · 网卡
图 4:微内核的结构。 内核只保留进程调度、基本内存管理和 IPC,其他功能在用户态。
3.3 微内核的优点
| 优点 | 说明 |
|---|---|
| 可靠性高 | 某个服务崩溃不会导致整个系统崩溃 |
| 安全性好 | 内核攻击面小,漏洞影响范围有限 |
| 易于扩展 | 添加新服务不需要修改内核 |
| 易于移植 | 内核代码少,移植到新硬件更容易 |
| 适合分布式 | 服务可以在不同机器上运行 |
3.4 微内核的缺点
| 缺点 | 说明 |
|---|---|
| 性能开销大 | 用户态和内核态频繁切换,IPC 成本高 |
| 实现复杂 | 需要精心设计 IPC 机制和服务管理 |
| 生态不成熟 | 相比宏内核,微内核的应用生态较小 |
| 调试困难 | 服务之间通过消息传递,调试更复杂 |
3.5 微内核的代表系统
| 系统 | 说明 |
|---|---|
| QNX | 实时微内核,用于汽车、医疗、工业控制 |
| L4 | 高性能微内核,用于嵌入式和安全领域 |
| Mach | 早期微内核,macOS 的 XNU 内核部分基于 Mach |
| Minix 3 | 教学用微内核,注重可靠性 |
| 鸿蒙 HarmonyOS | 华为的微内核,用于移动和物联网 |
#mermaid-svg-RCauEeI1Cp1oS5GX{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RCauEeI1Cp1oS5GX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RCauEeI1Cp1oS5GX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RCauEeI1Cp1oS5GX .error-icon{fill:#552222;}#mermaid-svg-RCauEeI1Cp1oS5GX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RCauEeI1Cp1oS5GX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RCauEeI1Cp1oS5GX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RCauEeI1Cp1oS5GX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RCauEeI1Cp1oS5GX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RCauEeI1Cp1oS5GX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RCauEeI1Cp1oS5GX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RCauEeI1Cp1oS5GX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RCauEeI1Cp1oS5GX .marker.cross{stroke:#333333;}#mermaid-svg-RCauEeI1Cp1oS5GX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RCauEeI1Cp1oS5GX p{margin:0;}#mermaid-svg-RCauEeI1Cp1oS5GX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RCauEeI1Cp1oS5GX .cluster-label text{fill:#333;}#mermaid-svg-RCauEeI1Cp1oS5GX .cluster-label span{color:#333;}#mermaid-svg-RCauEeI1Cp1oS5GX .cluster-label span p{background-color:transparent;}#mermaid-svg-RCauEeI1Cp1oS5GX .label text,#mermaid-svg-RCauEeI1Cp1oS5GX span{fill:#333;color:#333;}#mermaid-svg-RCauEeI1Cp1oS5GX .node rect,#mermaid-svg-RCauEeI1Cp1oS5GX .node circle,#mermaid-svg-RCauEeI1Cp1oS5GX .node ellipse,#mermaid-svg-RCauEeI1Cp1oS5GX .node polygon,#mermaid-svg-RCauEeI1Cp1oS5GX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RCauEeI1Cp1oS5GX .rough-node .label text,#mermaid-svg-RCauEeI1Cp1oS5GX .node .label text,#mermaid-svg-RCauEeI1Cp1oS5GX .image-shape .label,#mermaid-svg-RCauEeI1Cp1oS5GX .icon-shape .label{text-anchor:middle;}#mermaid-svg-RCauEeI1Cp1oS5GX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RCauEeI1Cp1oS5GX .rough-node .label,#mermaid-svg-RCauEeI1Cp1oS5GX .node .label,#mermaid-svg-RCauEeI1Cp1oS5GX .image-shape .label,#mermaid-svg-RCauEeI1Cp1oS5GX .icon-shape .label{text-align:center;}#mermaid-svg-RCauEeI1Cp1oS5GX .node.clickable{cursor:pointer;}#mermaid-svg-RCauEeI1Cp1oS5GX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RCauEeI1Cp1oS5GX .arrowheadPath{fill:#333333;}#mermaid-svg-RCauEeI1Cp1oS5GX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RCauEeI1Cp1oS5GX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RCauEeI1Cp1oS5GX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RCauEeI1Cp1oS5GX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RCauEeI1Cp1oS5GX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RCauEeI1Cp1oS5GX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RCauEeI1Cp1oS5GX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RCauEeI1Cp1oS5GX .cluster text{fill:#333;}#mermaid-svg-RCauEeI1Cp1oS5GX .cluster span{color:#333;}#mermaid-svg-RCauEeI1Cp1oS5GX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RCauEeI1Cp1oS5GX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RCauEeI1Cp1oS5GX rect.text{fill:none;stroke-width:0;}#mermaid-svg-RCauEeI1Cp1oS5GX .icon-shape,#mermaid-svg-RCauEeI1Cp1oS5GX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RCauEeI1Cp1oS5GX .icon-shape p,#mermaid-svg-RCauEeI1Cp1oS5GX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RCauEeI1Cp1oS5GX .icon-shape .label rect,#mermaid-svg-RCauEeI1Cp1oS5GX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RCauEeI1Cp1oS5GX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RCauEeI1Cp1oS5GX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RCauEeI1Cp1oS5GX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 微内核代表
QNX
L4
Mach
Minix 3
鸿蒙 HarmonyOS
图 5:微内核的代表系统。 QNX、L4、Mach、Minix 3、鸿蒙。
3.6 微内核的性能问题
微内核最大的问题是性能开销。因为服务在用户态,每次服务调用都需要:
- 用户态服务发送消息给内核;
- 内核转发消息给目标服务;
- 目标服务处理消息;
- 结果通过内核返回。
这个过程涉及多次用户态和内核态的切换,以及消息复制,开销远大于宏内核的直接函数调用。
为了解决这个问题,现代微内核采用了多种优化:
- 零拷贝 IPC:避免消息复制;
- 批量 IPC:合并多个消息;
- 共享内存:服务之间直接共享数据。
四、外核:把资源管理交给应用程序
4.1 什么是外核?
外核 (Exokernel)是一种更激进的设计思想:内核只负责资源保护和分配,资源管理完全交给应用程序。
外核的核心思想是:
- 内核只做最少的事:保护资源、分配资源、回收资源;
- 应用程序可以自由管理自己获得的资源;
- 应用程序可以根据自己的需求定制资源管理策略。
4.2 外核的结构
#mermaid-svg-usEvtSIUcCOwlbFJ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-usEvtSIUcCOwlbFJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-usEvtSIUcCOwlbFJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-usEvtSIUcCOwlbFJ .error-icon{fill:#552222;}#mermaid-svg-usEvtSIUcCOwlbFJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-usEvtSIUcCOwlbFJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-usEvtSIUcCOwlbFJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-usEvtSIUcCOwlbFJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-usEvtSIUcCOwlbFJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-usEvtSIUcCOwlbFJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-usEvtSIUcCOwlbFJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-usEvtSIUcCOwlbFJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-usEvtSIUcCOwlbFJ .marker.cross{stroke:#333333;}#mermaid-svg-usEvtSIUcCOwlbFJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-usEvtSIUcCOwlbFJ p{margin:0;}#mermaid-svg-usEvtSIUcCOwlbFJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-usEvtSIUcCOwlbFJ .cluster-label text{fill:#333;}#mermaid-svg-usEvtSIUcCOwlbFJ .cluster-label span{color:#333;}#mermaid-svg-usEvtSIUcCOwlbFJ .cluster-label span p{background-color:transparent;}#mermaid-svg-usEvtSIUcCOwlbFJ .label text,#mermaid-svg-usEvtSIUcCOwlbFJ span{fill:#333;color:#333;}#mermaid-svg-usEvtSIUcCOwlbFJ .node rect,#mermaid-svg-usEvtSIUcCOwlbFJ .node circle,#mermaid-svg-usEvtSIUcCOwlbFJ .node ellipse,#mermaid-svg-usEvtSIUcCOwlbFJ .node polygon,#mermaid-svg-usEvtSIUcCOwlbFJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-usEvtSIUcCOwlbFJ .rough-node .label text,#mermaid-svg-usEvtSIUcCOwlbFJ .node .label text,#mermaid-svg-usEvtSIUcCOwlbFJ .image-shape .label,#mermaid-svg-usEvtSIUcCOwlbFJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-usEvtSIUcCOwlbFJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-usEvtSIUcCOwlbFJ .rough-node .label,#mermaid-svg-usEvtSIUcCOwlbFJ .node .label,#mermaid-svg-usEvtSIUcCOwlbFJ .image-shape .label,#mermaid-svg-usEvtSIUcCOwlbFJ .icon-shape .label{text-align:center;}#mermaid-svg-usEvtSIUcCOwlbFJ .node.clickable{cursor:pointer;}#mermaid-svg-usEvtSIUcCOwlbFJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-usEvtSIUcCOwlbFJ .arrowheadPath{fill:#333333;}#mermaid-svg-usEvtSIUcCOwlbFJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-usEvtSIUcCOwlbFJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-usEvtSIUcCOwlbFJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-usEvtSIUcCOwlbFJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-usEvtSIUcCOwlbFJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-usEvtSIUcCOwlbFJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-usEvtSIUcCOwlbFJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-usEvtSIUcCOwlbFJ .cluster text{fill:#333;}#mermaid-svg-usEvtSIUcCOwlbFJ .cluster span{color:#333;}#mermaid-svg-usEvtSIUcCOwlbFJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-usEvtSIUcCOwlbFJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-usEvtSIUcCOwlbFJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-usEvtSIUcCOwlbFJ .icon-shape,#mermaid-svg-usEvtSIUcCOwlbFJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-usEvtSIUcCOwlbFJ .icon-shape p,#mermaid-svg-usEvtSIUcCOwlbFJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-usEvtSIUcCOwlbFJ .icon-shape .label rect,#mermaid-svg-usEvtSIUcCOwlbFJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-usEvtSIUcCOwlbFJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-usEvtSIUcCOwlbFJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-usEvtSIUcCOwlbFJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 硬件
内核态
用户态
应用程序 A
自定义资源管理
应用程序 B
自定义资源管理
库操作系统 A
库操作系统 B
外核
资源保护
资源分配
资源回收
CPU · 内存 · 磁盘 · 网卡
图 6:外核的结构。 外核只负责资源保护、分配和回收,应用程序通过库操作系统管理资源。
4.3 外核的设计理念
外核的设计理念是:操作系统不应该强制所有程序使用同一种资源管理策略。
例如:
- 数据库可能需要自己的缓存策略;
- 游戏可能需要自己的内存分配策略;
- 实时系统可能需要自己的调度策略。
在宏内核中,这些策略都由内核统一决定。在外核中,应用程序可以自己决定。
4.4 外核的优点
| 优点 | 说明 |
|---|---|
| 灵活性高 | 应用程序可以定制资源管理策略 |
| 性能好 | 避免内核抽象带来的开销 |
| 适合专用系统 | 数据库、实时系统等可以优化 |
| 促进创新 | 新的资源管理策略可以快速实验 |
4.5 外核的缺点
| 缺点 | 说明 |
|---|---|
| 编程复杂 | 应用程序需要自己管理资源 |
| 缺乏保护 | 错误的资源管理可能导致问题 |
| 生态缺失 | 几乎没有实际应用 |
| 兼容性差 | 不同应用程序的管理策略可能冲突 |
4.6 外核的代表系统
外核目前主要停留在学术研究阶段,实际应用很少。代表性的项目包括:
- MIT Exokernel:麻省理工学院的外核研究项目;
- Xok:基于 Exokernel 的操作系统;
- Nemesis:剑桥大学的外核系统。

图 7:外核的代表系统。 主要停留在学术研究阶段。
五、三种体系结构的对比
5.1 核心对比
| 对比项 | 宏内核 | 微内核 | 外核 |
|---|---|---|---|
| 内核功能 | 全部功能 | 核心功能 | 资源保护 |
| 文件系统 | 内核态 | 用户态 | 用户态 |
| 设备驱动 | 内核态 | 用户态 | 用户态 |
| 网络协议栈 | 内核态 | 用户态 | 用户态 |
| 模块交互 | 直接调用 | 消息传递 | 库操作系统 |
| 性能 | 高 | 较低 | 高(专用) |
| 可靠性 | 较低 | 高 | 取决于应用 |
| 安全性 | 较低 | 高 | 取决于应用 |
| 扩展性 | 较差 | 好 | 好 |
| 代表系统 | Linux | QNX | Exokernel |
| 实际应用 | 广泛 | 有限 | 学术研究 |
5.2 结构对比图
#mermaid-svg-dr197jAlIQ5LeVJp{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-dr197jAlIQ5LeVJp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-dr197jAlIQ5LeVJp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-dr197jAlIQ5LeVJp .error-icon{fill:#552222;}#mermaid-svg-dr197jAlIQ5LeVJp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dr197jAlIQ5LeVJp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-dr197jAlIQ5LeVJp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dr197jAlIQ5LeVJp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dr197jAlIQ5LeVJp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-dr197jAlIQ5LeVJp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dr197jAlIQ5LeVJp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dr197jAlIQ5LeVJp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dr197jAlIQ5LeVJp .marker.cross{stroke:#333333;}#mermaid-svg-dr197jAlIQ5LeVJp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dr197jAlIQ5LeVJp p{margin:0;}#mermaid-svg-dr197jAlIQ5LeVJp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-dr197jAlIQ5LeVJp .cluster-label text{fill:#333;}#mermaid-svg-dr197jAlIQ5LeVJp .cluster-label span{color:#333;}#mermaid-svg-dr197jAlIQ5LeVJp .cluster-label span p{background-color:transparent;}#mermaid-svg-dr197jAlIQ5LeVJp .label text,#mermaid-svg-dr197jAlIQ5LeVJp span{fill:#333;color:#333;}#mermaid-svg-dr197jAlIQ5LeVJp .node rect,#mermaid-svg-dr197jAlIQ5LeVJp .node circle,#mermaid-svg-dr197jAlIQ5LeVJp .node ellipse,#mermaid-svg-dr197jAlIQ5LeVJp .node polygon,#mermaid-svg-dr197jAlIQ5LeVJp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dr197jAlIQ5LeVJp .rough-node .label text,#mermaid-svg-dr197jAlIQ5LeVJp .node .label text,#mermaid-svg-dr197jAlIQ5LeVJp .image-shape .label,#mermaid-svg-dr197jAlIQ5LeVJp .icon-shape .label{text-anchor:middle;}#mermaid-svg-dr197jAlIQ5LeVJp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-dr197jAlIQ5LeVJp .rough-node .label,#mermaid-svg-dr197jAlIQ5LeVJp .node .label,#mermaid-svg-dr197jAlIQ5LeVJp .image-shape .label,#mermaid-svg-dr197jAlIQ5LeVJp .icon-shape .label{text-align:center;}#mermaid-svg-dr197jAlIQ5LeVJp .node.clickable{cursor:pointer;}#mermaid-svg-dr197jAlIQ5LeVJp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-dr197jAlIQ5LeVJp .arrowheadPath{fill:#333333;}#mermaid-svg-dr197jAlIQ5LeVJp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dr197jAlIQ5LeVJp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dr197jAlIQ5LeVJp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dr197jAlIQ5LeVJp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-dr197jAlIQ5LeVJp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dr197jAlIQ5LeVJp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-dr197jAlIQ5LeVJp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dr197jAlIQ5LeVJp .cluster text{fill:#333;}#mermaid-svg-dr197jAlIQ5LeVJp .cluster span{color:#333;}#mermaid-svg-dr197jAlIQ5LeVJp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dr197jAlIQ5LeVJp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-dr197jAlIQ5LeVJp rect.text{fill:none;stroke-width:0;}#mermaid-svg-dr197jAlIQ5LeVJp .icon-shape,#mermaid-svg-dr197jAlIQ5LeVJp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dr197jAlIQ5LeVJp .icon-shape p,#mermaid-svg-dr197jAlIQ5LeVJp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-dr197jAlIQ5LeVJp .icon-shape .label rect,#mermaid-svg-dr197jAlIQ5LeVJp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dr197jAlIQ5LeVJp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-dr197jAlIQ5LeVJp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-dr197jAlIQ5LeVJp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 外核
应用
库操作系统
外核
硬件
微内核
应用
文件服务
驱动服务
网络服务
微内核
硬件
宏内核
应用
系统调用
进程 · 内存 · 文件 · 驱动 · 网络
硬件
图 8:三种体系结构的对比。 宏内核功能最全,微内核最精简,外核最灵活。
5.3 混合内核
实际系统中,很多操作系统采用混合内核(Hybrid Kernel),结合宏内核和微内核的特点。
例如:
- Windows NT:微内核设计,但图形子系统、文件系统等在内核态;
- macOS XNU:Mach 微内核 + BSD 宏内核功能。
混合内核试图在性能和可靠性之间找到平衡。

图 9:混合内核的代表系统。 Windows NT 和 macOS XNU。
六、实际应用中的选择
6.1 为什么 Linux 选择宏内核?
Linux 选择宏内核,主要因为:
- 性能:宏内核性能高,适合服务器和嵌入式场景;
- 成熟:宏内核设计经过几十年验证;
- 简单:模块之间直接调用,实现简单;
- 生态:大量驱动和文件系统基于宏内核开发。
6.2 为什么 QNX 选择微内核?
QNX 选择微内核,主要因为:
- 可靠性:汽车、医疗等场景要求高可靠性;
- 实时性:微内核可以更好地支持实时调度;
- 安全性:微内核攻击面小,更安全;
- 分布式:服务可以在不同机器上运行。
6.3 为什么鸿蒙选择微内核?
鸿蒙 HarmonyOS 选择微内核,主要因为:
- 分布式:支持多设备协同;
- 安全性:微内核更安全;
- 低延迟:适合物联网和移动场景;
- 灵活性:可以根据设备类型定制服务。
#mermaid-svg-eefCt2nT19NmHEFf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-eefCt2nT19NmHEFf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-eefCt2nT19NmHEFf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-eefCt2nT19NmHEFf .error-icon{fill:#552222;}#mermaid-svg-eefCt2nT19NmHEFf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-eefCt2nT19NmHEFf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-eefCt2nT19NmHEFf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-eefCt2nT19NmHEFf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-eefCt2nT19NmHEFf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-eefCt2nT19NmHEFf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-eefCt2nT19NmHEFf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-eefCt2nT19NmHEFf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-eefCt2nT19NmHEFf .marker.cross{stroke:#333333;}#mermaid-svg-eefCt2nT19NmHEFf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-eefCt2nT19NmHEFf p{margin:0;}#mermaid-svg-eefCt2nT19NmHEFf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-eefCt2nT19NmHEFf .cluster-label text{fill:#333;}#mermaid-svg-eefCt2nT19NmHEFf .cluster-label span{color:#333;}#mermaid-svg-eefCt2nT19NmHEFf .cluster-label span p{background-color:transparent;}#mermaid-svg-eefCt2nT19NmHEFf .label text,#mermaid-svg-eefCt2nT19NmHEFf span{fill:#333;color:#333;}#mermaid-svg-eefCt2nT19NmHEFf .node rect,#mermaid-svg-eefCt2nT19NmHEFf .node circle,#mermaid-svg-eefCt2nT19NmHEFf .node ellipse,#mermaid-svg-eefCt2nT19NmHEFf .node polygon,#mermaid-svg-eefCt2nT19NmHEFf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-eefCt2nT19NmHEFf .rough-node .label text,#mermaid-svg-eefCt2nT19NmHEFf .node .label text,#mermaid-svg-eefCt2nT19NmHEFf .image-shape .label,#mermaid-svg-eefCt2nT19NmHEFf .icon-shape .label{text-anchor:middle;}#mermaid-svg-eefCt2nT19NmHEFf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-eefCt2nT19NmHEFf .rough-node .label,#mermaid-svg-eefCt2nT19NmHEFf .node .label,#mermaid-svg-eefCt2nT19NmHEFf .image-shape .label,#mermaid-svg-eefCt2nT19NmHEFf .icon-shape .label{text-align:center;}#mermaid-svg-eefCt2nT19NmHEFf .node.clickable{cursor:pointer;}#mermaid-svg-eefCt2nT19NmHEFf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-eefCt2nT19NmHEFf .arrowheadPath{fill:#333333;}#mermaid-svg-eefCt2nT19NmHEFf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-eefCt2nT19NmHEFf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-eefCt2nT19NmHEFf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eefCt2nT19NmHEFf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-eefCt2nT19NmHEFf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eefCt2nT19NmHEFf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-eefCt2nT19NmHEFf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-eefCt2nT19NmHEFf .cluster text{fill:#333;}#mermaid-svg-eefCt2nT19NmHEFf .cluster span{color:#333;}#mermaid-svg-eefCt2nT19NmHEFf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-eefCt2nT19NmHEFf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-eefCt2nT19NmHEFf rect.text{fill:none;stroke-width:0;}#mermaid-svg-eefCt2nT19NmHEFf .icon-shape,#mermaid-svg-eefCt2nT19NmHEFf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eefCt2nT19NmHEFf .icon-shape p,#mermaid-svg-eefCt2nT19NmHEFf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-eefCt2nT19NmHEFf .icon-shape .label rect,#mermaid-svg-eefCt2nT19NmHEFf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eefCt2nT19NmHEFf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-eefCt2nT19NmHEFf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-eefCt2nT19NmHEFf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 体系结构选择
Linux: 宏内核
QNX: 微内核
鸿蒙: 微内核
Windows: 混合内核
图 10:不同系统的体系结构选择。
七、常见误区澄清
| 误区 | 真相 |
|---|---|
| "宏内核就是落后的设计" | 宏内核性能高,Linux 就是宏内核,广泛使用 |
| "微内核一定比宏内核好" | 微内核可靠性高,但性能开销大,各有取舍 |
| "外核已经取代了宏内核和微内核" | 外核仍处于学术研究阶段,实际应用极少 |
| "微内核没有实际应用" | QNX 在汽车、医疗领域广泛使用,鸿蒙也是微内核 |
| "混合内核就是微内核" | 混合内核结合了两者特点,本质上是折中方案 |
| "内核越小越好" | 内核大小需要根据场景权衡,没有绝对标准 |
| "Linux 是纯宏内核" | Linux 支持内核模块,有一定的灵活性 |