操作系统概述
什么是操作系统
操作系统(Operating System,OS)是管理计算机硬件和软件资源的系统软件。它是应用程序和硬件之间的中间层,负责让多个程序共享 CPU、内存、磁盘和网络资源。
为什么要学操作系统
理解你写的程序到底干什么。 你调用一个 printf,背后涉及系统调用、用户态和内核态的切换、缓冲区管理、设备驱动。不理解操作系统,你写的程序就是个黑盒子。
写出更高效的程序。 理解进程调度、内存分页、缓存机制,你就能写出对系统更友好的代码。
面试中的硬通货。 操作系统是计算机考研和大厂面试的核心科目。进程与线程的区别、死锁的条件、虚拟内存的原理——这些问题出现的频率极高。
为后续学习打基础。 计算机网络、数据库、分布式系统,这些高阶课程都建立在操作系统概念之上。
核心知识模块
进程与线程
- 进程是程序的一次执行实例,拥有独立的地址空间
- 线程是进程内的执行单元,同一进程的线程共享地址空间
- 进程间通信(IPC):管道、消息队列、共享内存、信号量
- 线程同步:互斥锁、条件变量、读写锁
内存管理
- 虚拟内存:每个进程有自己的虚拟地址空间,操作系统负责映射到物理内存
- 分页与分段:内存管理的两种基本方式
- 页面置换算法:LRU、FIFO、Clock 等
- 内存分配:堆和栈的区别,malloc 的底层实现
文件系统
- 文件的组织方式:目录树结构
- 磁盘调度算法:SCAN、C-SCAN、SSTF
- 文件系统的实现:inode、日志文件系统
I/O 与设备管理
- I/O 模型:阻塞、非阻塞、多路复用(select/poll/epoll)
- 设备驱动的角色
- 中断处理机制
并发与同步
- 临界区问题
- 经典同步问题:生产者-消费者、读者-写者、哲学家就餐
- 死锁的四个必要条件和预防策略
怎么学
先建立整体框架。 先理解操作系统的核心职责(管理 CPU、内存、磁盘、设备),然后逐个击破。
边学边做实验。 操作系统是实践性很强的课程。推荐做 xv6 实验——MIT 的教学操作系统,代码量小,结构清晰。
画图辅助理解。 进程状态转换、内存地址映射、磁盘调度——画出来就清楚了。
不要跳过 Linux 命令。 ps、top、strace、lsof 这些工具能让你看到操作系统的实际行为。
本模块资源
| 资源 | 类型 | 说明 |
|---|---|---|
| MIT 6.S081 | 课程 | MIT 操作系统课程,基于 xv6,有完整实验 |
| OSTEP | 教材 | Operating Systems: Three Easy Pieces,免费在线教材 |
| Berkeley CS162 | 课程 | Berkeley 操作系统课程,有视频和作业 |
| xv6 | 实践 | MIT 教学操作系统,代码量约 1 万行 |