典型结构
整体式结构(单内核)
- 所有操作系统功能在内核态运行
- 效率高,但模块耦合紧密
微内核结构
- 内核只保留最基本功能(进程通信、中断处理等)
- 其他功能(文件系统、设备驱动等)在用户态实现
- 高可靠性、可扩展性
分层结构
- 按功能层次组织,下层向上层提供服务
重点 运行模型
根据 OS 的运行方式,分为三种模型:
① 非进程内核模型
- 内核运行在任何进程上下文之外,以一个独立的内核映像存在
- 内核代码不依附于任何用户进程,拥有自己独立的栈和内存区域
- 实际例子:
- MS-DOS:整个 OS 是一个常驻内存的程序,与用户程序完全分离
- 传统 UNIX(早期):核心常驻内存,中断/异常直接在核心态处理,不涉及进程切换
- 特点:简单直接,但缺乏灵活性
② OS 功能在用户进程内执行的模型
- OS 内核代码在用户进程的上下文中执行
- 当进程通过系统调用或中断与异常陷入内核时,进程本身切换到核心态继续运行(使用进程自己的内核栈)
- 内核代码共享进程的地址空间(仅核心态部分)
- 实际例子:
- Linux:进程调用
read()→ 陷入内核 → 在当前进程上下文中执行内核代码(sys_read)→ 返回用户态。操作系统-错误 和top显示的sy%(内核态 CPU 时间)就是这部分 - Windows NT 内核:系统服务分发后,在调用线程的上下文中执行内核函数
- Linux:进程调用
- 特点:性能好(无需额外上下文切换),现代主流 OS 的模式
③ OS 功能作为独立进程执行的模型
- OS 的各功能模块作为独立的内核/系统进程运行
- 用户进程通过进程间通信(IPC) 向这些系统进程请求服务
- 代表微内核结构
- 特点:高模块化/可靠性(一个模块崩溃不影响整个系统),但 IPC 开销大
| 模型 | 典型 OS | 性能 | 健壮性 |
|---|---|---|---|
| 非进程内核 | MS-DOS、早期 UNIX | 高 | 低 |
| 用户进程内执行 | Linux、Windows NT | 高 | 中 |
| 独立进程执行 | MINIX、QNX、Mach | 中(IPC 开销) | 高 |
用户接口
- 命令接口(命令解释器 / shell)
- 程序接口(系统调用)
- 图形用户接口(图标、窗口)