死锁的避免和银行家算法/死锁检恢复

单种资源的银行家算法

问题:研究一个银行家如何将其总数一定的现金,安全地借给若干个顾客,使这些顾客既能满足对资金的要求又能完成其交易,也使银行家可以收回自己的全部现金不至于破产。
操作系统在若干个并行进程间分配单位数量一定的某共享资源就是这样一个问题,既要使每个进程均能满足其对资源的要求,使之完成其运行任务,同时又要使整个系统不会产生死锁。
假如银行家能使他当前的全部顾客在有限的时间内完成他们的交易(也归还了他们的借款),那么当前的状态是安全的,反之状态就是不安全的。
死锁的避免和银行家算法/死锁检恢复插图
三种资源分配状态 (a)安全 (b)安全 (c)不安全
这里将客户比作进程,贷款比作资源,银行家比作操作系统。

多种资源的银行家算法

定义两个向量和两个矩阵:
 系统资源向量:表示系统中拥有每类资源的数量;
 系统当前可用资源向量:表示系统中尚未分给进程的每类资源的数量;
 各进程当前对资源的请求矩阵;
 当前资源分配矩阵。
死锁的避免和银行家算法/死锁检恢复插图1
E为现有资源向量;A为可用的资源向量;C为当前已分配资源矩阵;R为请求资源矩阵
有m种资源
C,R 每一行是一个进程,每一列是一种资源

即,如果将所有已被指派的资源j的数量和所有可供使用的资源数相加,结果就获得该类资源的总数。

死锁模型—有向图

死锁的避免和银行家算法/死锁检恢复插图2
(a)占用一资源:资源R被进程A占用
(b)请求一资源:进程B正等待着资源S
(c)死锁:进程C等待着资源T,资源T被进程D占用着,进程D又等待着由进程C占用着的资源U。

可通过画有向图来判断是否发生了死锁

从死锁恢复

剥夺法恢复
 将某一资源从一个进程强占过来给另一个进程使用,并在不影响原进程执行的情况下返回,这种作法取决于该资源的特性;
 用这种方法恢复通常比较困难或者说不太可能,因为选择中止某进程很大程度上取决于哪一类资源比较容易被收回;
回退法恢复
 系统设计人员以及主机操作员周期性地对进程进行检查,在检查点将进程的状态写入文件以备重启,文件中不仅包括内存图象,还包括了资源状态,既哪些资源对应哪些进程;
 一旦检测到死锁,恢复时,进程会回滚到较早的检查点,该检查点后做的所有工作都丢失了;
杀死进程来恢复
 杀掉环中的一个进程;
 将一个环外的进程作为牺牲品放入环中以释放被死锁的资源。