多语言展示
当前在线:1877今日阅读:86今日分享:14

死锁处理的策略---避免死锁

1、银行家算法2、安全性算法
银行家算法的核心思想
1

银行家算法是荷兰学者 Dijkstra 为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。后来该算法被用在操作系统中,用于避免死锁。

银行家算法的实现
1

假设系统中有n各进程,m种资源。每个进程在运行前先声明对各种资源的最大需求数,则可用一个 n * m 的矩阵(可用二维数组实现)表示所有进程对各种资源的最大需求数。不妨称为最大需求矩阵Max,Max[ i , j ] = k 表示进程Pi最多需要k个资源 Rj。同理,系统可以用一个 n * m 的分配矩阵 Allocation 表示对所有进程的资源分配情况。 Max - Allocation = Need 矩阵,表示各进程最多还需要多少各类资源。另外还要用一个长度为 m 的一维数组Available 表示当前系统中还有多少可用资源。某进程Pi向系统申请资源,可用一个长度为 m 的一维数组 Requuest,表示本次申请的各种资源量。

2

可用银行家算法预判本次分配是否会导致系统进入不安全的状态:1、如果Request[i][j] <= Need[i,j]便转向第2步,否则认为出错(因为它所需的资源数已经超过它所宣布的最大值)。2、如果Request[i][j] <= Acvailable[j]便转向第3步,否则表示尚无足够的资源,Pi必须等待。3、系统试着把资源分配给进程Pi,并修改相应的数据(并非真的分配,修改数值只是为了做预判):Available = Available - Request;Allocation[i,j] = Allocation[i,j] + Request[i][j];Need[i,j] = Need[i,j] - Request[i][j];4、操作系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式分配,否则,恢复相应数据,让进程阻塞等待。

安全性算法
1

检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。

2

不断重复上述过程,看最终是否能将所有进程都加入安全序列。

推荐信息