Appearance
操作系统结构(分层/模块化/宏内核/微内核/外核)
考情分析
宏内核 vs 微内核是选择题高频对比,外核概念近年新增。🔥🔥 中频。
操作系统动辄上千万行代码,这么大的系统怎么组织才不会乱成一锅粥?
操作系统结构概览
| 结构 | 核心思想 | 代表系统 |
|---|---|---|
| 简单结构 | 无明确模块划分 | 早期 MS-DOS |
| 分层结构 | 按功能分层,上层依赖下层 | THE 系统 |
| 模块化 | 划分为独立模块,定义接口 | Solaris |
| 宏内核 | 所有功能都在内核态运行 | Linux, Windows |
| 微内核 | 只保留最基本功能在内核态 | Mach, MINIX |
| 外核 | 直接向用户暴露物理资源 | Exokernel |
分层结构
将 OS 划分为若干层,最底层为硬件,最高层为用户接口。每层只能使用紧邻下层的服务——类似于公司层级制度,员工只能找直接上级汇报,不能越级。
| 优点 | 缺点 |
|---|---|
| 便于调试和验证(逐层验证) | 合理定义各层比较困难 |
| 易于扩充和维护 | 效率低(层间通信开销) |
模块化
将 OS 划分为若干模块,定义模块间的接口。各模块可以相互调用(不像分层那样只能调用相邻层)。
| 优点 | 缺点 |
|---|---|
| 模块间接口清晰 | 模块间的依赖关系复杂 |
| 易于维护和扩充 | 接口定义不当会导致耦合 |
宏内核(大内核)
所有核心功能(进程管理、内存管理、文件系统、设备驱动等)都在内核态运行,作为一个大的程序链接在一起。
| 优点 | 缺点 |
|---|---|
| 性能高(模块间直接函数调用) | 内核庞大,难以维护 |
| 各模块共享数据方便 | 一个模块崩溃可能导致整个内核崩溃 |
微内核
只保留最基本的功能在内核态(进程调度、进程通信、中断处理),其他服务(文件系统、设备驱动等)运行在用户态,作为独立的服务进程。
| 优点 | 缺点 |
|---|---|
| 内核小,稳定性高 | 性能差(频繁的用户态↔内核态切换) |
| 易扩充(新服务以用户态进程方式添加) | 进程间通信开销大 |
| 一个服务崩溃不影响内核 |
宏内核 vs 微内核
| 比较 | 宏内核 | 微内核 |
|---|---|---|
| 内核大小 | 大 | 小 |
| 性能 | 高 | 低(消息传递开销) |
| 稳定性 | 低(一损俱损) | 高 |
| 扩展性 | 差 | 好 |
| 服务间通信 | 函数调用 | 消息传递 |
| 代表 | Linux, Windows | Mach, QNX |
考试重点
一次应用程序请求文件服务:宏内核只需 2 次态切换(用户→内核→用户),微内核至少需要 4 次(用户→内核→文件服务→内核→用户),甚至更多。这是微内核性能差的根本原因。
外核(Exokernel)
外核的设计理念:不做抽象,直接暴露物理资源给应用程序。
| 传统 OS | 外核 |
|---|---|
| 将物理资源抽象为虚拟资源(虚拟内存、文件系统) | 直接分配物理资源(物理页框、磁盘块) |
| 应用程序通过统一接口访问 | 应用程序自行管理分到的资源 |
外核只负责资源的分配和保护,不做虚拟化。优点是减少了抽象层的开销。
考研高频考点
- 🔥🔥🔥 宏内核 vs 微内核的对比(性能/稳定性/态切换次数)
- 🔥🔥 微内核中内核态只保留最基本功能(调度/IPC/中断处理)
- 🔥🔥 分层结构只能调用紧邻下层
- 🔥 外核的设计理念(直接暴露物理资源)
OS 的结构决定了它的内部组织方式,但还有一个更基本的问题:电脑开机后,操作系统是怎么一步步从磁盘加载到内存并运行起来的?下一篇讲操作系统引导。