操作系统体系结构
引例
内核是操作系统最基本,最核心的部分,实现操作系统内核功能的那些程序就是内核程序。
有的操作系统会将和硬件接触最紧密的例如时钟管理,中断等等放在内核中,像进程管理,存储器管理,设备管理等功能呢不放在内核中。这种区别就引出了大内核小内核。
而其也会对系统的性能造成影响。
操作系统的内核运行在内核态,非内核运行在用户态。
在内核态和用户态切换是需要成本的,要消耗不少时间,频繁的切换会导致系统性能降低。
大内核(宏内核/单内核)
将操作系统的主要功能模块都作为内核,运行在核心态。 | |
优点 | 高性能 |
缺点 | 内核代码庞大,结构混乱,难以维护 1.内核庞大功能复杂,难以维护 2.大内核中某个功能模块出错,就可能导致整个女系统崩溃 |
典型 | Linux,UNIX |
微内核
只把最基本的功能保留在内核 | |
优点 | 内核功能少,结构清晰,方便维护 1.内核小功能少、易于维护,内核可靠性高 2.内核外的某个功能模块出错不会导致整个系统克崩溃 |
缺点 | 需要频繁的在核心态和用户态之间切换,性能低 1.性能低,需要频繁的切换 用户态/核心态。用户态下的各功能模块不可以直接相互调用,只能通过内核的"消息传递"来间接通信 2.用户态下的各功能模块不可以直接相互调用女只能通过内核的"消息传递“来间接通信 |
典型 | Windows NT |
分层结构
特性、思想 | 内核分多层,每层可单向调用更低一层提供的接网(只可以相邻级调用) |
优点 | 1.便于调试和验证,自底向上逐层调试验证 2.易扩充和易维护,各层之间调用接口清晰固定 |
缺点 | 1.仅可调用相邻低层,难以合理定义各层的边界 2.效率低,不可跨层调用,系统调用执行时间长 |
模块化
特性、思想 | 将内核划分为多个模块,各模块之间相互协作 内核 =主模块+可加载内核模块 主模块:只负责核心功能,如进程调度、内存管理 可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内核 |
优点 | 1.模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发 2.支持动态加载新的内核模块(如:安装设备驱动程序、安装新的文件系统模块到内核),增强OS适应性 3.任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高 |
缺点 | 1.模块间的接口定义未必合理、实用 2.模块间相互依赖,更难调试和验证 |
外核
特性、思想 | 内核负责进程调度、进程通信等功能,外核负责中为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全 |
优点 | 1.外核可直接给用户进程分配“不虚拟、不抽象"内的硬件资源,使用户进程可以更灵活的使用硬件资源 2.减少了虚拟硬件资源的"映射层",提升效率 |
缺点 | 1.降低了系统的一致性 2.使系统变得更复杂 |