操作系统体系结构

概述

alt text

  • 操作系统内核需要运行在内核态。
  • 操作系统的非内核功能运行在用户态。

操作系统内核

内核是操作系统最基本,最核心的部分。实现操作系统内核的功能的那些程序就是内核程序

  • 时钟管理:实现计时功能。
  • 中断处理:负责实现中断机制。
  • 原语:
    • 是一种特殊的程序。
    • 处于操作系统最底层,最接近硬件的部分。
    • 这些程序的运行具有原子性——其运行只能一气呵成,不可中断。
    • 运行时间较短,调用频繁。
  • 对系统资源进行管理功能:
    • 进程管理
    • 存储器管理
    • 设备管理

时钟管理,中断处理,原语是与硬件关联紧密的模块。而对系统资源的管理更多是对数据结构的操作,不会直接涉及硬件。

操作系统内核结构

alt text

大内核和微内核

alt text

比如:应用程序想请求操作系统的服务,这些服务的处理涉及到进程管理,存储管理,设备管理。

对于大内核:CPU只需要进行两次变态即可
对于微内核:CPU需要进行很多次变态。

大内核:将操作系统的主要功能模块都作为系统内核,运行在核心态。

  • 优点:高性能。
  • 缺点:内核代码庞大,结构混乱,难以维护。

微内核:只把最基本的功能保留在内核

  • 优点:内核功能少,结构清晰,方便维护。
  • 缺点:需要频繁地在核心态和用户态之间切换,性能低。

分层结构

alt text

特征:内核分为多层,每层可以调用更低一层的服务。
优点:

  • 便于调试和验证
  • 易扩充和维护,各层之间调用接口清晰固定。

缺点:

  • 仅可调用相邻低层,难以合理定义各层边界。
  • 效率低,不能跨层调用,系统调用执行时间长。

模块化

模块化是将内核划分为多个模块,各模块之间相互协作。内核就可以被分为主模块和可加载内核模块。

  • 主模块:只负责核心功能,如进程调度,内存管理。
  • 可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内核。

alt text

优点:

  • 各模块之间逻辑情绪易于维护。
  • 支持动态加载新的内核模块。
  • 如果模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高。

缺点:

  • 模块间的接口定义未必合理,实用。
  • 模块间相互依赖,更难调试验证。

宏内核

所有的系统功能都放在内核里

优点:

  • 性能高,内核各种功能都可以直接相互调用。

缺点:

  • 内核庞大功能复杂,难以维护。
  • 大内核中某个功能模块出错,就可能导致整个系统崩溃。

微内核

只把中断,原语,进程通信等核心功能放入内核;文件管理,设备管理。进程管理等功能以用户进程的形式运行在用户态。

优点:

  • 内核小,功能少,易于维护,内核可靠性高。
  • 内核外的某个功能模块出错不会导致整个系统崩溃。

缺点:

  • 性能低,需要频繁的切换内核态和用户态。
  • 用户态下各个功能模块不能直接相互调用,只能通过内核的消息传递来间接通信。

外核

内核负责进程调度,进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核保证资源使用安全。

alt text

优点:

  • 外核可以直接给用户进程分配物理资源
  • 减少了虚拟硬件资源的映射层,提升效率。

缺点:

  • 降低了系统的一致性
  • 使系统变得复杂。