第一章:【王道考研 操作系统】【第一章】操作系统的概述、特征、发展、体系结构 中断与系统调用
第二章 1~5:【王道考研 操作系统】【第二章】进程概念 进程控制 进程通信 线程概念和多线程模型
第二章 6~8:【王道考研 操作系统】【第二章】处理机调度 进程调度算法
第二章 9~11:【王道考研 操作系统】【第二章】进程同步、进程互斥的实现方法 软件&硬件 优点&缺点 信号量机制
第二章 12:【王道考研 操作系统】【第二章】管程 用管程解决进程互斥和同步问题
13. 死锁
13.1 概念
-
定义
在并发环境下,各进程因 竞争资源 而造成的一种 互相等待对方手里的资源,导致各进程都阻塞,无法向前推进 的现象。
-
死锁、饥饿、死循环的区别
-
死锁产生的必要条件
产生死锁必须同时满足以下四个条件,任一条件不产生,死锁就不会发生。
什么时候会发生死锁?对 不可剥夺资源 的 不合理分配。
13.2 处理策略
13.2.1 静态策略:预防死锁
想办法破坏导致死锁的四个必要条件之一。
-
破坏互斥条件 —— SPOOLing技术
操作系统采用SPOOLing技术把 独占设备 在逻辑上改造成 共享设备。
-
破坏不剥夺条件
-
破坏请求和保持条件
-
破坏循环等待条件
-
总结
13.2.2 动态策略:避免死锁
安全序列:指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是 安全状态。
如果分配了资源之后,系统中找不出任何一个安全系列,系统就进入了 不安全状态。
如果系统处于 安全状态,就 一定不会发生死锁;如果系统进入 不安全状态,就 可能发生死锁。
-
银行家算法
在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。该算法用于避免死锁。
数据结构:
算法步骤:
13.2.3 死锁的检测和解除
-
死锁检测算法
用于检测系统状态,以确定系统中是否发生了死锁。
依次消除与不阻塞进程(申请的资源还有)相连的边,直到无边可消。死锁定理:若资源分配图最终不能消除所有边,那么此时就是发生了死锁。最终还连着边的那些进程就是 死锁进程。
若最终能消除所有边,就成这个图是 可完全简化的,此时一定没有死锁(相当于找到安全序列); -
死锁解除算法
当认定系统中已经发生了死锁,利用该算法可立即将系统从死锁状态中解脱出来。