信息技术大学
进程通信与调度
计算机基础面试八股 · 第 2 章 操作系统
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
信息技术大学
进程通信与调度
计算机基础面试八股 · 第 2 章 操作系统
进程间通信方式(管道/消
六条进程间通道:要快走共享内存,要稳走消息队列,跨机走 Socket。
管道
亲缘进程的单向字节流,shell 的竖线
消息队列
内核信箱,消息带类型,收发解耦
共享内存
同一块物理内存映射双方,最快但要自己加锁
信号量/信号
信号量管计数同步;信号是异步事件通知
Socket
唯一可跨主机的通道,本机进程同样可用
死锁四条件与避免策略
死锁是四个条件同时成立:互斥、持有等待、不可剥夺、循环等待——破一个就活。
四条件
互斥、持有并等待、不可剥夺、循环等待
破坏循环
资源全局编号排序,大家按同一顺序申请
破坏持有等待
一次性申请全部资源,拿不齐就全部放手
工程手段
锁超时、tryLock、数据库死锁检测与回滚
死锁预防自测
点击作答
下列哪条措施破坏了「循环等待」条件?
经典调度算法(FCFS/SJF/
调度就是排队策略:先来先到公平但笨,多级反馈队列是实践的集大成者。
FCFS
先来先服务,简单公平,短任务被长任务堵
SJF
短作业优先,平均等待最优,但饿死长任务
时间片轮转
轮流跑一个时间片,交互响应有保障
多级反馈队列
多队列加优先级加动态降级,兼顾响应与吞吐
优先级反转
低优先级持锁不放,高优先级干等,中优先级反而抢跑——反转打破实时性。
场景
高者等低者的锁,低者又被中者抢占
火星教训
探路者号因优先级反转反复复位,成为经典案例
解法
优先级继承:持锁者临时借用高优先级运行
本节要点
- ✓通信要快用共享内存,要稳用消息队列
- ✓死锁四条件,破坏任一即化解
- ✓多级反馈队列:响应与吞吐兼顾
- ✓优先级反转靠继承解,火星船验证过
延伸主题:写一遍生产者消费者复述一遍死锁四条件
课后思考
先自己回答,再展开参考答案——能讲出来才算真懂。
1管道、消息队列、共享内存,分别适合什么场景?
参考答案管道适合亲缘进程的简单单向流;消息队列适合带类型、需解耦与缓冲的消息传递;共享内存适合大块高频数据,配上信号量使用。速度与便利性的取舍决定选型。
2为什么说「锁排序」能彻底预防死锁?
参考答案所有线程按同一全局顺序申请资源,等待关系构成单向链而不可能成环;循环等待条件不成立,死锁在数学上就不可能发生,属于事前预防。
3优先级反转里,中优先级任务为什么能「插队」?
参考答案调度只看优先级:低者持锁进入阻塞后仍属可运行态时,中者比它高就先跑;高者却因等锁阻塞着。优先级继承把持锁者临时抬到等锁者的高度,压缩反转窗口。