点击阅读:操作系统系列文章
1. 大内核和微内核
内核是操作系统最基本、最核心的部分。
实现操作系统内核功能的那些程序就是内核程序。
与硬件关联紧密的模块:
- 时钟管理:实现计时功能
- 中断处理:实现中断机制
- 原语:这种程序的运行具有原子性,运行只能一气呵成,不可中断。
- 是一种特殊的程序
- 处于操作系统最底层,是最接近硬件的部分
- 运行时间较短、调用频繁
不直接接触硬件的模块,更多是对数据结构的操作:
- 进程管理
- 存储器管理
- 设备管理
- 大内核:将所有模块都包含在内。
- 优点:高性能
- 缺点:内核代码庞大、结构混乱、难以维护
- 微内核:只包含与硬件关联紧密的模块。
- 优点:内核功能少,结构清晰,方便维护
- 缺点:频繁在内核态与用户态间切换,性能低
操作系统的内核需要运行在内核态。操作系统的非内核运行在用户态。
应用程序想要请求操作系统的服务,假设这个服务同时涉及到了进程管理、存储管理、设备管理,大内核需要进行两次变态过程,微内核需要进行六次变态过程。
变态过程是有成本的,频繁变态会降低系统的性能。
2. 分层结构
内核分多层,最底层是硬件,最高层是用户接口,每层可单向调用更低一层提供的接口。
优点:
- 便于调试和验证,自底向上逐层调试验证。
- 易扩充和易维护,各层之间调用接口清晰固定。
缺点:
- 仅可调用相邻低层,难以合理定义各层边界。
- 效率低,不可跨层调用,系统调用时间长。
3. 模块化
将内核划分为多个模块,各模块之间相互协作。
内核 = 主模块 + 可加载内存模块
- 主模块:只负责加载核心功能,如进程调度、内存管理
- 可加载内存模块:可以动态加载新模块到内核,而无需重新编译整个内核。
优点:
- 模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发。
- 支持动态加载新的内核模块(如:安装设备驱动程序、安装新的文件系统模块到内核),增强OS适应性。
- 任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高。
缺点:
- 模块间的接口定义未必合理、实用。
- 模块间相互依赖,更难调试和验证。
4. 外核
内核负责进程调度、进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全。
优点:
- 外核可直接给用户进程分配“不虚拟、不抽象”的硬件资源,使用户进程可以更灵活的使用硬件资源。
- 减少了虚拟硬件资源的映射层,提升效率。
缺点:
- 降低了系统的一致性。
- 使系统变得更复杂。
点击阅读:操作系统系列文章