2.23死锁的处理策略——死锁的检测和解除
一,死锁检测:
为了能系统是否已经发生死锁进行检测,必须
1,用一种数据结构来保存资源的请求和分配信息
2,用一种算法,利用上述信息来检测系统是否进入死锁状态
如果系统中剩余的可用资源足够满足进程的需求,那么这个进程暂时不会被堵塞,可用继续执行下去。如果这个进程执行结束了把资源归还给系统,就可能使得某些正在等待的进程被**,并且顺利的执行下去。相应的,这些被**的进程执行完之后又会归还一些资源,这样可能**另外一些阻塞的进程...
如果按上述过程,最终能消除所有的变,就称这个图是可以完全简化的。此时一定没有发生死锁
反之,最终不能消除所有的边,那么此时就是发生了死锁,最终还连着边的那些进程就是处于死锁状态的进程
二,死锁解除:
补充:并不是系统中所有的进程都是 死锁状态,用死锁检测算法化简资源分配图后,还连着边的那些进程就是死锁进程
1,资源剥夺法:挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给 其他死锁进程。但是应防止被挂起的进程长时间得不到进程而导致饥饿
2,撤销进程法(终止进程法):强制撤销部分,甚至是全部死锁进程,并且剥夺这些进程的全部资源,这种方式的优点是实现简单,但是付出的代价可能会很大。因为有些进程可能已经运行很长时间,已经接近结束,一旦被终止可谓是功亏一篑
3,进程会退法:让一个或者多个进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史消息,设置还原点
4,如何决定对哪些进程下手?
1)进程的的优先级低
2)已经执行的时间长度短的
3)还要很久进程才结束
4)进程使用的资源数多的
5)进程是批处理式,不是交互式的
考虑把它们干掉