预防死锁
#策略特点
不允许死锁发生
静态策略:预防死锁
破坏死锁产生的四个必要条件
破坏互斥条件
破坏不剥夺条件
破坏请求和保持条件
破坏循环等待条件
#破坏互斥条件
互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁
破坏互斥条件:
如果将只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态
如:SPOOLing技术
就是操作系统使用该技术把独占设备在逻辑上改造为共享设备
缺点:并非所有资源都能改造成可共享使用的资源,且大多时候需要保护这种互斥性,故很多时候都无法破坏互斥条件
#破坏不剥夺条件
不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放
破坏不剥夺条件:
方案一:
当某个进程请求新的资源得不到满足时,让他立刻释放保持的所有资源,待以后需要时再重新申请
方案二:
当某个进程需要的资源被其他进程所占有的时候,可以由操作系统协助,将想要的资源强行剥夺。(比如调度算法里的优先级调度算法)
缺点:
1.实现起来复杂
2.释放已获得资源可能会导致前一阶段的工作失效。故只适用于易保存和恢复状态的资源,如CPU
3.反复申请和释放资源会增加系统开销,降低系统吞吐量
4.采用方案一,一位置只要暂时得不到某个资源,之前获得的那些资源都需要放弃,之后在重新申请。一直发生这样的情况会导致进程饥饿
#破坏请求和保持条件
请求和保持条件:进程已经保持了至少一个资源,但又提出了新的请求,而该资源有被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放
破坏请求和保持条件
采用静态分配方法
在进程运行前一次申请完它需要的全部资源,在资源未能满足前不让他投入运行
实现起来简单,但缺点也很明显
缺点:
有些资源可能只需要用很短的时间,因此如果进程的整个运行期间都一直保持着所有资源,就会造成严重的资源浪费。资源利用率极低。
且可能导致进程饥饿
如上图中,如果A类进程和B类进程源源不断申请,资源1,2一直被占用,C类进程就始终难以得到满足,就会饥饿。
#破坏循环等待条件
循环等待条件:存在一种资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。
破坏循环等待条件:
采用顺序资源分配法。
首先给系统中的资源编号,规定每个进程必须按编号地政的顺序请求资源,同类资源(即编号相同的资源)一次申请完
原理分析:一个进程只有已占有小编号资源时,才有资格申请更大的编号资源。按照此规则,已持有的大编号资源的进程不可能逆向地回来申请小编号的资源,从而就不会产生循环等待的现象。