Cha6死锁和饿死
Cha6 死锁和饿死
要求掌握 发生死锁的条件 死锁预防的方法 死锁避免的方法 °死锁检测的方法
要求掌握 • 发生死锁的条件 • 死锁预防的方法 • 死锁避免的方法 • 死锁检测的方法
死锁的例子 2PQ都要A 释放A 释放B 测PQ都要B 获得A 3 4 获得B 56 获得A获得B释放A释放B
死锁的例子 获得A 获得B 释放A 释放B 获得B 获得A 释放B 释放A 1 2 3 4 5 6 PQ都要A PQ都要B
进程的一般形式 可能死锁 不会死锁 Process P Process Q Process p Get A Get B Get A Get B Get A release a release A release B Get B release B release release B
进程的一般形式 Process P … Get A … Get B … release A … release B Process Q … Get B … Get A … release B … release A Process P … Get A … release A … Get B … release B 可能死锁 不会死锁
无死锁的例子 2PQ都要A 释放A ■ 3 释放B PQ都要B 获得A 获得B 5 6 获得A释放A获得B释放B
无死锁的例子 获得A 释放A 获得B 释放B 获得B 获得A 释放B 释放A 1 2 3 4 5 6 PQ都要A PQ都要B
可重用资源的分配 进程P 进程Q pp 0 request dq0 request T 1 lock D q1 lock T p2 request T q2 request D p3 lock T q3 lock D p4执行 q4执行 p5 unlock D g5 unlock p6 unlock T g6 unlock D p0p1q0q1p2q2→死锁
可重用资源的分配 p0 p1 q0 q1 p2 q2→死锁 p0 request D p1 lock D p2 request T p3 lock T p4 执行 p5 unlock D p6 unlock T q0 request T q1 lock T q2 request D q3 lock D q4 执行 q5 unlock T q6 unlock D 进程P 进程Q
可重用资源的分配-200k内存 进程P1 进程P2 request 80 kb request 70 kb request 60 bequest 80 kb
可重用资源的分配-200k内存 … request 80 kb … request 60 kb 进程P1 进程P2 … request 70 kb … request 80 kb
可消费资源的分配 进程P1 进程P2 receive(p2 receive(p1); send(p2, m1);send(p1, m2)
可消费资源的分配 … receive (p2); … send (p2,m1); 进程P1 进程P2 … receive (p1); … send (p1,m2);
检测、预防、避免方法小结 原则不同方案优点 缺点 预防 次请求无需剥夺 低效 所有资源适合连续使用要知道将来资源请求 延迟进程初始化 (保守)剥夺 状态容易保存和经常剥夺 恢复 循环重启 资源排序系统设计时解决剥夺无效 编译时检测 禁止增加资源请求
检测、预防、避免方法小结 原则 不同方案 优点 缺点 预防 (保守) 一次请求 所有资源 无需剥夺 适合连续使用 低效 要知道将来资源请求 延迟进程初始化 剥夺 状态容易保存和 恢复 经常剥夺 循环重启 资源排序 系统设计时解决 编译时检测 剥夺无效 禁止增加资源请求
检测、预防、避免方法小结 原则不同方案优点 缺点 避免发现安全无需剥夺 要知道将来资源请求 路径 不能长时间阻塞 检测周期性测不会延迟初始化丟失剥夺 易于在线处理
检测、预防、避免方法小结 原则 不同方案 优点 缺点 避免 发现安全 路径 无需剥夺 要知道将来资源请求 不能长时间阻塞 检测 周期性测 试 不会延迟初始化 易于在线处理 丢失剥夺