README · operating-systems

操作系统

操作系统研究的是:如何把有限、复杂、危险的硬件资源,包装成多个程序都能安全使用的抽象。

对 CS 学生来说,任何程序只要运行在真实机器上,就绕不开 OS:进程、线程、内存、文件、Socket、设备、CPU 调度、IO 阻塞、上下文切换,都由 OS 参与管理。

操作系统系列封面

OS 资源生命周期

本模块适合写成的博客问题

问题对应章节
为什么程序没有崩溃,却像停住了一样?01 进程、线程与 CPU 调度
用户程序为什么不能直接操作所有硬件?02 系统调用
为什么内存看起来够,程序仍然会抖动或被终止?03 内存管理
为什么并发 bug 只在某些时序下出现?04 并发与同步
为什么 write 成功不等于数据已经安全落盘?05 文件系统
为什么同样是 IO,阻塞、非阻塞、多路复用体验差很多?06 IO 模型

学习路线

顺序章节核心问题
00从 0 开始理解操作系统OS 为什么存在
01进程、线程与 CPU 调度程序如何并发运行
02系统调用用户程序如何请求内核服务
03内存管理虚拟内存、页表、堆栈、缺页
04并发与同步锁、信号量、条件变量、死锁
05文件系统文件、目录、inode、页缓存、崩溃一致性
06IO 模型阻塞、非阻塞、多路复用、异步
07设备、驱动与中断硬件事件如何通知 CPU,驱动如何管理设备
08Socket 与内核网络栈连接、端口、缓冲区、协议栈在 OS 里如何工作
09进程间通信与信号进程如何交换数据和事件
10虚拟化、容器与资源隔离OS 如何把机器切成多个隔离环境
11性能与排障CPU、内存、IO、上下文切换怎么查

本模块固定观察点

  1. OS 提供了什么抽象。
  2. 这个抽象隐藏了哪些硬件细节。
  3. 内核态和用户态如何切换。
  4. 编程语言运行时和应用程序如何建立在这些抽象上。

本模块读法

操作系统要一直按“资源 -> 抽象 -> 代价 -> 故障现象”来读:

CPU 资源 -> 进程/线程/调度 -> 上下文切换/饥饿 -> CPU 高或任务卡住
内存资源 -> 虚拟内存/页表 -> 缺页/swap/OOM -> 延迟抖动或进程被杀
存储资源 -> 文件系统/页缓存 -> 刷盘/一致性 -> 文件慢或数据丢失
设备资源 -> 中断/DMA/驱动 -> 中断风暴/队列 -> IO 慢或 CPU 忙
网络资源 -> Socket/缓冲区 -> 阻塞/排队/超时 -> 连接慢或吞吐低

不要只背概念名。每章都要能回答:OS 管了什么资源,提供了什么抽象,隐藏了什么硬件细节,什么时候抽象会泄漏成性能或可靠性问题。

延伸阅读