操作系统笔记-1.4 操作系统体系结构(下)
·
王道操作系统,视频链接:1.4 操作系统体系结构(下)
操作系统结构表

图中标记有五角星的为重要内容,其中红色是新内容,黄色是之前讲解过的大内核与微内核内容。
分层结构
操作系统被分为多层,最底层是硬件,最高层是用户接口,每层可调用更低一层。
- 优点:
- 便于调试和验证,自底向上逐层调试验证。
- 易扩充和易维护,各层之间调用接口清晰固定。
- 缺点:
- 仅可调用相邻低层,难以合理定义各层的边界。
比如A需要调用B,B也可能调用A,这样边界就不明确。 - 效率低,不可跨层调用,系统调用执行时间长。
比如A要直接调用D,但是分层结构只允许A调用B,B调用C,C再调用D,这样就很费时间。
- 仅可调用相邻低层,难以合理定义各层的边界。
模块化
将内核划分为多个模块,各模块之间相互协作
内核=主模块(进程、内存等)+可加载内核模块(驱动等)
主模块:只负责核心功能,如进程调度、内存管理
可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内核
- 优点:
- 模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发
- 支持动态加载新的内核模块(如:安装设备驱动程序、安装新的文件系统模块到内核),增强OS适应性
- 任何模块都可以直接调用其他模块,无需采用消息传递进行通讯,效率高。
- 缺点:
- 模块间的接口定义未必合理、实用
比如初始定义了休眠接口,最后发现实际上设备具有多级休眠的特性,要么绕过这个接口重新定义(破坏封装性,引入非标准私有入口(Private Entry Points)),要么改接口塞入更多的参数(接口表面积膨胀(Interface Surface Bloat),增加认知负担),这就会让接口变得臃肿不堪。 - 模块间相互依赖,更难调试和验证
比如相互调用,当一个模块出了问题,不知道是调用的模块有问题,还是调用后有问题。理论来说,分层结构也是一种模块化思想,但是它严格定义了调用方向,比这里的模块化更好维护。
- 模块间的接口定义未必合理、实用
宏内核、微内核
宏内核:
- 所有的系统功能都放在内核里(宏内核结构的OS通常也采用了“模块化”的设计思想)
- 优点:性能高,内额内部各种功能都可以直接相互调用
- 缺点:
- 内核庞大功能复杂,难以维护
- 大内核种某个功能块出错,就可能导致整个系统崩溃
微内核:
- 只把中断、原语、进程通信等最核心的功能放入内核。进程管理、文件管理、设备管理等功能以用户进程的形式运行在用户态。
- 优点:
- 内核小功能少,易于维护,内核可靠性高。
- 内核外的某个功能模块出错不会导致整个系统崩溃。
- 缺点:
- 性能低,需要频繁地切换用户态/核心态。
- 用户态下的各功能模块不可以直接相互调用,只能通过内核的“消息传递”来间接通信。
外核
-
内核负责进程调度、进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全(也就是给了你A空间,你就不能用B空间,A空间是你的,别人就不能轻易越界来用A空间)。
比如:普通操作系统给进程分配的空间是经过抽象的,也就是看起来可能是连续的,实际上可能空间是离散存储的。但是外核分配的是未经抽象的硬件资源,假设进程需要随机访问自己被分配的空间,但是实际上被分配的空间离散程度很高,就可能导致在不同的存储空间,在不同的块中反复横跳,导致效率降低,而分配未经抽象的硬件资源就可以保证分配的空间一定是连续的,避免这个问题。 -
优点:
- 外核可直接给用户进程分配“不虚拟、不抽象”的硬件资源,使用户进程可以更灵活地使用硬件资源。
- 减少了虚拟硬件资源的“映射层”,提升效率。
因为抽象的空间要转化为物理的空间需要有一定开销。
-
缺点:
- 降低了系统的一致性。
比如有些程序分配虚拟地址,有些分配物理地址,前者需要翻译,后者不需要,这就违背了一致性,也就会导致后面的系统变复杂。 - 使系统变得更复杂。
本节考试只会考简单的选择题,合理分配时间。
- 降低了系统的一致性。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)