OS = 硬件与应用之间的中间层:向下管资源,向上给抽象。
四个核心功能,各有目标:
| 功能 | 管理对象 | 目标 |
|---|---|---|
| 处理机管理 | CPU | 提高 CPU 利用率、多道并发 |
| 存储器管理 | 内存 | 隔离、扩充(虚拟内存)、分配回收 |
| 文件管理 | 磁盘 | 按名存取、安全共享 |
| 设备管理 | I/O 设备 | 屏蔽硬件差异、缓冲与调度 |
两个根本目标:方便用户(抽象)+ 提高利用率(并发)。
CPU 至少两种特权级:用户态、内核态。
用户态程序
│ write(1, "hi", 3) ← 发起系统调用
▼
陷入 (int 0x80 / syscall) ← 硬件切换到内核态
▼
内核态:查系统调用表 → 执行内核函数 → 恢复现场
▼
返回用户态,继续执行下一条指令
进入内核态三方式:系统调用(主动同步)、异常(除零、缺页,被动)、中断(外设信号,异步,见第 9 章)。三者都要保存现场、切内核栈、执行内核代码、恢复返回。
write(1, "hi\n", 3); // 一次系统调用:用户态 → 内核态 → 用户态
用户态/内核态是权限不是角色;切换贵(存现场/切栈/刷 TLB)→ 系统调用要批量(read 一次读一大块)。
| 宏内核(Monolithic) | 微内核(Microkernel) | |
|---|---|---|
| 代表 | Linux、Unix、Windows(混合) | Minix、QNX、Mach |
| 内核态包含 | 进程/内存/文件/驱动等全部 | 仅 IPC、调度、基础内存 |
| 服务方式 | 直接函数调用 | 消息传递(IPC) |
| 性能 | 快(无消息开销) | 慢(IPC 开销大) |
| 可靠性 | 一个驱动崩溃可能拖垮内核 | 服务隔离,崩溃可重启 |
| 扩展性 | 编译进内核/模块 | 服务独立加载 |
宏内核功能全进内核态换性能;微内核推到用户态换可靠性,代价是频繁 IPC。Linux = 宏内核 + LKM,Windows = 混合内核,都向中间靠拢。