Appearance
操作系统专题
面向后端 / 基础架构 / 客户端 / 系统岗的操作系统八股 + 知识点汇总。 编排原则:以考频定详略——🔥 高频页写深(原理 + 代码 + 追问链),低频页点到为止。 内容综合自 小林 coding · 图解系统、南京大学《操作系统》jyy OS2026 讲义、CSAPP / OSTEP,并结合大厂面经整理。
一句话总览
操作系统 = 资源管理者(CPU / 内存 / 磁盘 / 设备)+ 抽象提供者(进程、地址空间、文件、socket)。 它把裸硬件封装成一组系统调用,让应用程序"看不见硬件、只面对接口";其核心难点都围绕三件事:并发(CPU 怎么分)、虚拟化(内存怎么骗)、持久化(数据怎么存)。
考频总览(决定阅读顺序)
| 页面 | 主题 | 考频 |
|---|---|---|
process-thread.md | 进程 / 线程 / 状态 / 上下文切换 / fork / 协程 | ⭐⭐⭐⭐⭐ |
memory-virtual.md | 虚拟内存 / 分页 / 缺页 / 页面置换 / TLB / 碎片 | ⭐⭐⭐⭐⭐ |
io-model.md | 五种 IO 模型 / select·poll·epoll / 零拷贝 / Reactor | ⭐⭐⭐⭐⭐ |
deadlock.md | 死锁四条件 / 预防·避免·检测 / 悲观锁·乐观锁 | ⭐⭐⭐⭐⭐ |
sync-primitives.md | 互斥 / 信号量 PV / 管程 / 生产者-消费者等经典问题 | ⭐⭐⭐⭐⭐ |
ipc.md | 管道 / 消息队列 / 共享内存 / 信号 / socket | ⭐⭐⭐⭐⭐ |
scheduling.md | 进程调度算法(FCFS / SJF / RR / 多级反馈队列) | ⭐⭐⭐⭐ |
filesystem.md | inode / 硬软链接 / 文件分配 / 空闲管理 / 磁盘调度 | ⭐⭐⭐⭐ |
intro-os.md | 体系结构 / 用户态内核态 / 系统调用 / 中断与异常 | ⭐⭐⭐⭐ |
linux-tools.md | 常用命令与性能排查工具(top / free / iostat / strace) | ⭐⭐⭐ |
jyy-deep.md | jyy 讲义精讲:UNIX 哲学 / 并发 Bug / 异步 / 虚拟化 | ⭐⭐⭐(拔高) |
准备后端 / 基础架构岗:process-thread → memory-virtual → io-model → deadlock / sync → ipc 五页吃透即可覆盖绝大多数考点。
高频自测(含答案)
1. 进程和线程的区别?
答案
进程是资源分配的基本单位(独立地址空间、页表、文件描述符表),线程是 CPU 调度的基本单位(共享进程地址空间,各自独立栈和寄存器)。创建/切换开销:进程 > 线程 > 协程。通信:进程间需 IPC,线程间直接读写共享内存(但要同步)。详见 process-thread.md。
2. 为什么需要虚拟内存?
答案
三个目的:① 隔离与安全(每个进程独立地址空间,互不干扰);② 突破物理内存限制(按需换入换出,能用比物理内存更大的地址空间);③ 简化编程与链接加载(统一的虚拟地址视图,便于内存映射、共享库)。详见 memory-virtual.md。
3. 页面置换算法有哪些?LRU 怎么实现?
答案
FIFO(简单但有 Belady 异常)、OPT(理论最优、不可实现)、LRU(最近最少使用,最常考)、Clock(LRU 近似,实际系统用)、LFU。LRU 可用「哈希表 + 双向链表」O(1) 实现,或在页表项里维护访问位并用 Clock 算法近似。详见 memory-virtual.md。
4. select / poll / epoll 的区别?
答案
三者都是 IO 多路复用。select/poll 每次调用都要把整个 fd 集合从用户态拷贝到内核态并线性遍历,O(n);select 还有 1024 fd 上限。epoll 用红黑树管理 fd(增删改 O(log n))+ 就绪链表(返回就绪的 fd,O(1)),无需重复拷贝、无需全量轮询,适合高并发。epoll 有 LT(水平触发,默认)和 ET(边缘触发,需非阻塞 + 一次读完)两种模式。详见 io-model.md。
5. 什么是零拷贝?
答案
传统 read+write 发文件要 4 次上下文切换 + 4 次数据拷贝(2 次 DMA + 2 次 CPU)。零拷贝减少 CPU 拷贝与切换:mmap+write(3 拷贝)、sendfile(DMA 收集,3 拷贝 2 切换)、sendfile + SG-DMA(真正 0 次 CPU 拷贝 / 2 次 DMA / 2 切换)、splice、MSG_ZEROCOPY。Kafka / Nginx 都吃这口红利。详见 io-model.md。
6. 死锁的四个必要条件?怎么避免?
答案
互斥、持有并等待、不可剥夺、循环等待,四者同时成立才可能死锁;破坏任一即可。常用:按固定全局顺序加锁(破坏循环等待)、std::lock 一次锁多个 / try_lock 超时(破坏持有并等待)、RAII 及时释放、银行家算法(避免)、检测后回滚(解除)。详见 deadlock.md。
7. 信号量 PV 操作?用信号量实现生产者-消费者?
答案
P(wait)申请资源、信号量减一,为负则阻塞;V(signal)释放资源、信号量加一,唤醒等待者。生产者-消费者用三个信号量:empty(空槽数)、full(满槽数)、mutex(互斥访问缓冲)。P 的顺序:先 P 资源信号量再 P mutex,否则可能死锁。详见 sync-primitives.md。
8. 进程间通信(IPC)有哪些方式?各自特点?
答案
管道(匿名,半双工,亲缘进程)、命名管道 FIFO(无关进程)、消息队列(有边界、内核维护、可随机读)、共享内存(最快,需信号量/互斥同步)、信号(异步通知,信息量小)、socket(跨主机)。选型:追求速度用共享内存,追求简单用管道。详见 ipc.md。
9. 用户态和内核态的区别?系统调用过程?
答案
内核态(Ring 0)可执行特权指令、访问全部内存;用户态(Ring 3)受限。系统调用是用户态主动请求内核服务的受控入口:用户程序执行 syscall/int 0x80 → 陷入内核 → 按系统调用号查表执行 → 返回用户态(一次上下文切换 + 权限级切换,有一定开销)。中断/异常则是被动陷入内核。详见 intro-os.md。
10. fork 之后发生了什么?写时复制是什么?
答案
fork 创建一个几乎完全相同的子进程:复制页表、文件描述符表,返回值在父进程为子 PID、子进程为 0。为省开销采用 Copy-On-Write(写时复制):父子共享物理页并标记只读,任一方写时才复制该页。fork 后常接 exec 替换镜像。详见 process-thread.md。
11. 什么是僵尸进程和孤儿进程?
答案
僵尸进程:子进程已退出但父进程没 wait 回收,PCB 残留占用资源;需父进程回收,否则可"杀死父进程"让 init 收养。孤儿进程:父进程先退出,子进程被 init(1) 收养,无害。面试常问"如何避免僵尸进程"→ 父进程 wait/waitpid、signal(SIGCHLD, ...) 或 SIG_IGN、双 fork。详见 process-thread.md。
12. 进程调度算法有哪些?多级反馈队列(MLFQ)为什么好?
答案
FCFS(先来先服务,非抢占、平均等待长)、SJF(短作业优先,平均等待最短但需预知运行时间、会饿死长作业)、RR(时间片轮转,公平、响应好)、优先级(可能饿死)、MLFQ(多级队列 + 动态调优先级:短作业快速在高层跑完,长作业逐级下沉,兼顾响应与吞吐,是通用 OS 的实际方案)。详见 scheduling.md。
子文档
| 文件 | 内容 |
|---|---|
intro-os.md | 操作系统体系结构、用户态/内核态、系统调用、中断与异常 |
process-thread.md | 进程与线程、PCB、状态机、上下文切换、fork/exec、协程 |
ipc.md | 进程间通信六种方式对比与选型 |
scheduling.md | 进程/线程调度算法与评价指标 |
memory-virtual.md | 分页/分段、虚拟内存、缺页中断、页面置换、TLB、内存碎片 |
deadlock.md | 死锁四条件、预防/避免/检测/解除、悲观锁与乐观锁 |
sync-primitives.md | 互斥锁、信号量 PV、管程、经典同步问题 |
filesystem.md | inode、目录、硬/软链接、文件分配、空闲空间、磁盘调度、Page Cache |
io-model.md | 阻塞/非阻塞/多路复用/信号驱动/异步、select·poll·epoll、零拷贝、Reactor |
linux-tools.md | Linux 常用命令与性能排查工具 |
jyy-deep.md | jyy OS2026 讲义精讲(拔高:UNIX 哲学 / 并发 Bug / 异步 / 虚拟化) |
参考资料
- 小林 coding · 图解系统:https://www.xiaolincoding.com/os/
- jyy(蒋炎岩)《操作系统》2026 春季学期:https://jyywiki.cn/OS/2026/
- 《Operating Systems: Three Easy Pieces (OSTEP)》 / 《深入理解计算机系统 (CSAPP)》
- 《现代操作系统》《UNIX 环境高级编程 (APUE)》