开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
操作系统
避免死锁
在系统运行过程中,对进程发出的每一个能够满足的系统资源申请进行动态检查(防止系统进入不安全状态),并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。
安全状态:
系统按某种进程推进顺序(P1,P2·…,Pn),为每个进程P,分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都能顺序完成。(P1,P2··,Pn)是安全序列。
不安全状态:
系统不存在一个安全序列。
注意:系统处于安全状态,则不会死锁,而系统处于不安全状态,则有可能会导致死锁。
银行家算法
1965年由Dijkstra提出的一种避免死锁的调度算法,它模拟了一个银行家在发放信用贷款时的处理方式。 如何判断系统的当前状态是否安全
程序 = 算法+数据结构
银行家算法中的数据结构
n:系统中进程的总数
m:资源类总数
一维数组
Available:(各类可利用的资源数目)
Available[j]=k 表示系统现有 Rj类资源k个二维数组
Max:(各进程对各类资源的最大需求)
Allocation:(系统对各进程已分配各类资源的数目)
Need: (各进程对各类资源的需求数目)
二维数组
Max:(各进程对各类资源的最大需求)
Allocation:(系统对各进程已分配各类资源的数目)
Need: (各进程对各类资源的需求数目)
银行家算法
当进程P,提出资源申请时,系统执行下列步骤:
(1)若RequestLj]<=Need[ij]转(2).否则返回错误;
(2)若Requestlil<=Availableil,转(3);否则进程等待;
(3)系统试探着分配了资源,则有:
Available[j]=Available[i]-Request[il;
Allocation[i,j]=Allocation[i,j]+Request[i,j];
Need[i,j]=Need[i,j]-Request[i,j];
(4)若系统新状态是安全的,则分配完成;若系统新状态是不安全的,则恢复原状态,进程等待**