第 1 章 · 操作系统概述

OS = 硬件与应用之间的中间层:向下管资源,向上给抽象。

1.1 功能与目标

四个核心功能,各有目标:

功能管理对象目标
处理机管理CPU提高 CPU 利用率、多道并发
存储器管理内存隔离、扩充(虚拟内存)、分配回收
文件管理磁盘按名存取、安全共享
设备管理I/O 设备屏蔽硬件差异、缓冲与调度

两个根本目标:方便用户(抽象)+ 提高利用率(并发)。

1.2 系统调用:用户态 vs 内核态

CPU 至少两种特权级:用户态、内核态。

  • 用户态:只能执行非特权指令、访问自己的地址空间。
  • 内核态:可执行特权指令(关中断、改页表、直接访问 I/O)、访问任意内存。
用户态程序
    │  write(1, "hi", 3)     ← 发起系统调用
    ▼
陷入 (int 0x80 / syscall)     ← 硬件切换到内核态
    ▼
内核态:查系统调用表 → 执行内核函数 → 恢复现场
    ▼
返回用户态,继续执行下一条指令

进入内核态三方式:系统调用(主动同步)、异常(除零、缺页,被动)、中断(外设信号,异步,见第 9 章)。三者都要保存现场、切内核栈、执行内核代码、恢复返回。

write(1, "hi\n", 3);   // 一次系统调用:用户态 → 内核态 → 用户态

用户态/内核态是权限不是角色;切换贵(存现场/切栈/刷 TLB)→ 系统调用要批量(read 一次读一大块)。

1.3 内核结构:宏内核 vs 微内核

宏内核(Monolithic)微内核(Microkernel)
代表Linux、Unix、Windows(混合)Minix、QNX、Mach
内核态包含进程/内存/文件/驱动等全部仅 IPC、调度、基础内存
服务方式直接函数调用消息传递(IPC)
性能快(无消息开销)慢(IPC 开销大)
可靠性一个驱动崩溃可能拖垮内核服务隔离,崩溃可重启
扩展性编译进内核/模块服务独立加载

宏内核功能全进内核态换性能;微内核推到用户态换可靠性,代价是频繁 IPC。Linux = 宏内核 + LKM,Windows = 混合内核,都向中间靠拢。