若系统为进程分配资源时不采取任何措施,则应该是提供死锁检测和解除的手段。
1.资源分配图:
系统死锁,可利用资源分配图来描述。
如上图, 用圆圈代表一个进程,用框代表一类资源。由于一种类型的资源可能有多个,用框中的一个点代表一类资源中的一个资源。从
进程到资源的有向边叫请求边,表示该进程申请一个单位的该类资源;从资源到进程的边叫分配边,表示该类资源已经有一个资源被分配
给了该进程。
2.死锁定理:
可以通过将资源分配图简化的方法来检测系统状态 S 是否为死锁状态。简化方法如下:
(1)、在资源分配图中,找到既不阻塞又不是孤点的进程 Pi (即找出一条有向边与它相连,且该有向边对应资源的申请数量小于等于系统中
已有空闲资源数量)。消去它所有的请求边和分配边,使之成为孤立的结点。
在这里要注意一个问题,判断某种资源是否有空闲,应该用它的资源数量减去它在资源分配图中的出度。
(2)、进程 Pi 所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来的阻塞进程可以变为非阻塞进程。根据(1)中的方法进行一系列
简化后,若能消去图中所有的边,则称该图是可完全简化的。
S为死锁的条件是:当且仅当 S 状态的资源分配图是不可完全简化的,该条件为死锁定理。
3.死锁解除:
一旦检测出死锁,就应立即采取相应的措施,以解除死锁。死锁解除的主要方法有:
(1)、资源剥夺法。挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源,而处于
资源匮乏的状态。
(2)、撤销进程法。强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行。
(3)、进程回退法。让一(或多)个进程回退足以回避死锁的地步,进程回退时自愿释放资源而不是被剥夺。要求系统保持进程的历史信息,设置
还原点。