操作系统知识点多而散,这张学习地图把它收成四组主题:程序运行、内存管理、持久化与 I/O、系统实践。每组标注依赖关系和推荐顺序,每个主题配一句话说明它解决什么问题。

操作系统在学什么

操作系统夹在应用与硬件之间:向上提供进程、虚拟内存、文件、Socket 这些抽象,向下管理 CPU、内存、磁盘和设备。它的核心目标不是让资源看起来无限,而是在有限硬件上做好共享、隔离、保护与可观测。学习它的主线不是背定义,而是回答一个问题——一条请求从代码到硬件,中间经过哪些状态转换、各花什么代价。所有主题都是这条主线上的站点。

主题分组

第一组:程序如何运行

  • 进程与线程:进程是资源与隔离的边界,线程是 CPU 调度的执行流。
  • 中断、异常与系统调用:用户态进入内核态的三扇门,理解一次 read() 到底经历了什么。
  • CPU 调度与负载:调度器决定谁先跑,load average 告诉你队伍排了多长。
  • 锁与同步:临界区、互斥锁、信号量、条件变量,解决并发访问的秩序问题。
  • 死锁:循环等待的成因、四个必要条件与排查方法。
  • 进程间通信:地址空间彼此隔离之下,数据怎么过墙。

第二组:内存如何管理

  • 内存管理:分配策略、碎片、伙伴系统、页面回收与 OOM。
  • 虚拟内存:分页、页表、TLB、缺页异常,把”地址”和”内存条”解耦。

第三组:数据如何持久与进出

  • 文件系统:从路径到 inode 再到数据块,外加缓存与崩溃恢复。
  • I/O 多路复用:select/poll/epoll,一个线程看管海量连接的原理。
  • 零拷贝:mmap、sendfile、splice 分别省掉了哪几次数据搬运。

第四组:上手实践

  • Linux 基础:发行版、目录结构、权限与常用命令。
  • Shell 编程:变量、管道、重定向与脚本,把命令串成自动化流程。

依赖关系与推荐顺序

进程与线程 ──→ 系统调用/中断 ──→ CPU 调度
│
├─→ 锁与同步 ──→ 死锁 ──→ 进程间通信
│
└─→ 内存管理 ──→ 虚拟内存 ──→ 文件系统 ──→ I/O 多路复用 ──→ 零拷贝
(Linux 与 Shell 实操穿插全程)

推荐按五步推进:

  1. 进程与线程:一切概念的起点,先弄清资源归属与执行流的区别。
  2. 系统调用与中断、CPU 调度:理解内核入口,以及”谁在跑、谁在等”。
  3. 同步机制 → 死锁 → IPC:并发三件套彼此咬合,连着学最省力。
  4. 内存管理 → 虚拟内存:分页与缺页是理解文件缓存的前置知识。
  5. 文件系统 → I/O 多路复用 → 零拷贝:收束到高性能服务端最关心的主题;Linux 与 Shell 穿插全程,边学边敲。

学习建议

  • 以”一次请求”为线索串联:程序调 read,经系统调用进内核,查页缓存,缺页则读盘,I/O 完成后中断唤醒进程——把名词挂到流程上才算真正学会。
  • 配合工具验证:strace 看系统调用、top/vmstat 看 CPU 与内存、lsof 看进程打开的文件,让每个概念都能被观察。
  • 面向应用回扣:学虚拟内存联想 JVM,学 epoll 联想 Nginx/Redis,学零拷贝联想 Kafka——操作系统的价值最终体现在理解上层组件的行为上。

小结

  • 四组主题:程序运行、内存管理、持久化与 I/O、Linux/Shell 实践。
  • 依赖主线:进程线程 → 系统调用与调度 → 同步/死锁/IPC → 内存 → 文件系统与高性能 I/O。
  • 方法:沿请求路径学习,用工具观察,向上层组件回扣。