操作系统2.4.4 死锁的检测和解除

一、死锁检测

为了能系统是否已经发生死锁进行检测,必须

1、用一种数据结构来保存资源的请求和分配信息

操作系统2.4.4 死锁的检测和解除

2、用一种算法,利用上述信息来检测系统是否进入死锁状态

如果系统中剩余的可用资源足够满足进程的需求,那么这个进程暂时不会被堵塞,可以顺利执行下去。

如果这个进程执行结束了把资源归还给系统,就可能使得某些正在等待的进程被**,并且顺利的执行下去。

相应地,这些被**的进程执行完之后又会归还一些资源,这样可能**另外一些阻塞的进程...

如果按上述过程,最终能消除所有的边,就称这个图是可以完全简化的。此时一定没有发生死锁(相当于可找到一个安全序列)。

反之,最终不能消除所有的边,那么此时就是发生了死锁,最终还连着边的那些进程就是处于死锁状态的进程

死锁定理:如果某时刻系统的资源分配图不可完全简化,那么此时系统死锁(用于检测是否为死锁状态)

 

二、死锁解除

补充:并不是系统中所有的进程都是 死锁状态,用死锁检测算法化简资源分配图后,还连着边的那些进程就是死锁进程

1、资源剥夺法:挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给 其他死锁进程。但是应防止被挂起的进程长时间得不到进程而导致饥饿

2、撤销进程法(终止进程法):强制撤销部分,甚至是全部死锁进程,并且剥夺这些进程的全部资源,这种方式的优点是实现简单,但是付出的代价可能会很大。因为有些进程可能已经运行很长时间,已经接近结束,一旦被终止可谓是功亏一篑

3、进程回退法让一个或者多个进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史消息,设置还原点(也不太容易实现)

 

如何决定对哪些进程下手?

1)进程的的优先级低的先下手

2)已经执行的时间长度短的

3)还要很久进程才能结束

4)进程使用的资源数多的

5)优先牺牲批处理式进程,不是交互式的

操作系统2.4.4 死锁的检测和解除

分类:

技术点:

相关文章: