3.7避免死锁
避免死锁的方法则是只施加较弱限制条件,从而获得令人满意的系统性能
安全状态:系统能按某种进程顺序为每个进程分配所需资源,直至满足每个进程对资源的最大需求,并能顺利完成。
不安全状态:系统无法找到一种使多个进程能够顺利分配资源执行完的安全序列
只要使系统始终处于安全状态,便可避免发生死锁
不是所有的不安全状态都是死锁状态
并非所有不安全状态都必然会转为死锁状态
银行家算法:
随时对系统中的所有资源信息进行统计,包括每种资源的数量、已分配给各进程的数量;每当进程提出某种资源请求时判断该请求分配后是否安全,如果安全才分配。对每个资源请求的处理都要保证系统始终从一个安全状态到另一个安全状态
3.8死锁的检测和预防
检测死锁的时机,怎么发现,发现会怎样处理
1.检测时机:
(1)当进程等待时检测死锁
(2)定时检测
(3)系统资源利用率下降时检测死锁
S状态为死锁状态的充分条件是当且仅当S状态的资源分配图是不可完全简化的。<死锁定理>
2.死锁的解除:
当发现进程死锁时,便应立即把它们从死锁状态中解脱出来。
(1)由操作员来以人工方法处理死锁
(2)死锁解除算法:
常采用的方法是:
①剥夺资源。从其他进程剥夺足够数量的资源给死锁进程以解除死锁状态。
②撤销进程。a、最简单的是让全部进程都死掉;b、温和一点的是按照某种顺序逐个撤销进程,直至有足够的资源可用,使死锁状态消除为止。
死锁的预防、避免和检测的比较:
练习题:
1.一个单处理机系统,一共由N个进程,发生死锁时都会阻塞
2.资源数为11个,每个进程最多需要3个资源,问最大的并发进程数是多少(不会发生死锁)?
保留一个空闲,让所有的进程都得到Max-1个资源,则N*2+1=11得N=5;
3.进程数为3个,每个进程最多需要4个资源,问至少需要多少资源才能让系统不会发生死锁(永远都不会)?
保留一个空闲,让所有的进程都得到Max-1个资源,即3*(4-1)+1=10个,即至少需要10个资源