主题
面试题蒸馏卡:操作系统
高频题按「问题 → 追问链 → 标准答要点 → 常见误解」编排,覆盖 Fcant 三篇 + 叶一套源稿。
1. 进程和线程的区别?
- 追问链:谁是资源单位谁是调度单位?→ 切换开销谁大?→ 一个崩了会怎样?→ 通信方式差异?
- 标准答:进程 = 资源分配最小单位(独立地址空间、切换开销大、更健壮);线程 = 调度执行最小单位(共享地址空间、开销小、一个崩全死)。根本区别在地址空间是否独立。
- 常见误解:只背「进程资源、线程调度」不给原因;忽略线程共享内存需同步。
2. 进程有哪几种状态?
- 追问链:三态是什么?→ 五态加了什么?→ 七态呢?→ 阻塞和就绪区别?
- 标准答:三态(就绪/执行/阻塞),五态(+创建/终止),七态(+挂起就绪/挂起阻塞)。阻塞是等事件(CPU 空闲也不能跑),就绪是等 CPU。
- 常见误解:把「就绪」当「执行」;不知道挂起态(对换到辅存)。
3. 进程间通信方式有哪些?
- 追问链:哪种最快?→ 管道和有名管道区别?→ 消息队列优势?→ 套接字特殊性?
- 标准答:管道/有名管道/信号/消息队列/信号量/共享内存/套接字。共享内存最快(需配信号量);有名管道可跨无亲缘进程;消息队列可按类型读;套接字可跨主机。
- 常见误解:漏掉共享内存;说「管道双向」;不知道套接字也属于 IPC。
4. 线程同步的方式?
- 追问链:互斥量和信号量区别?→ 事件机制是什么?
- 标准答:互斥量(排他)、信号量(控并发上限)、事件(Wait/Notify)。Java 的 synchronized/Lock 就是互斥量机制。
- 常见误解:认为信号量只能互斥(它还能控并发数)。
5. 进程调度算法有哪些?
- 追问链:哪种最公平?→ 哪种照顾短作业?→ 哪种综合最好?
- 标准答:FCFS(先来先服务)、SJF(短作业优先)、RR(时间片轮转,最公平常用)、多级反馈队列(公认较好,UNIX 采用)、优先级调度。
- 常见误解:以为「短作业优先就是最优」,忽略长作业饿死。
6. 什么是死锁?产生原因?怎么预防?
- 追问链:四个必要条件?→ 哪个条件破坏不了?→ 预防 vs 避免?
- 标准答:多进程循环等待对方资源而永久阻塞。四条件:互斥 + 请求保持 + 不可剥夺 + 循环等待。破坏任一即预防;互斥无法破坏。避免用银行家算法。
- 常见误解:以为「互斥条件可破坏」;混淆预防(静态破坏)与避免(动态判断)。
7. 什么是虚拟内存?为什么需要?
- 追问链:物理地址直接暴露有什么问题?→ 虚拟地址空间三大优势?→ 依赖什么原理?
- 标准答:定义连续虚拟地址空间 + 内存外存两级存储。优势:①连续虚拟地址映射不连续物理内存 ②可访问超物理内存的缓冲 ③进程地址隔离。基于局部性原理。
- 常见误解:只说「硬盘扩展内存」;忽略进程隔离这一关键优势。
8. 分页和分段的区别?
- 追问链:页大小固定吗?→ 段有逻辑意义吗?→ 共同点?
- 标准答:页大小固定(OS 定)、无逻辑意义;段大小不固定、是逻辑信息单位。共同点:离散分配、提高利用率、减少碎片。
- 常见误解:以为「分页比分段高级」,实际各有适用场景。
9. 页面置换算法有哪些?
- 追问链:哪个是理想基准?→ 哪个最常用?→ 缺页中断是什么?
- 标准答:OPT(最佳,无法实现)/FIFO/LRU(最常用)/LFU。缺页中断 = 访问的页不在内存,OS 调入后再访问。
- 常见误解:以为 OPT 能实现;把 LRU 和 LFU 混为一谈(最近 vs 次数最少)。
10. 用户态和内核态?什么是系统调用?
- 追问链:为什么要分两级?→ 系统调用干什么?
- 标准答:用户态只能读用户程序数据,内核态可访问任意资源。用户程序访问内核级资源(文件/进程/内存管理)必须通过系统调用由 OS 代为完成。
- 常见误解:以为用户程序能直接访问硬件。
关联
- 总览:操作系统技术栈总览
- 进程线程:概念卡片:进程与线程 / 概念卡片:进程间通信与线程同步
- 死锁/内存:概念卡片:死锁 / 概念卡片:内存管理与虚拟内存