预防死锁

#策略特点


  • 不允许死锁发生
  • 静态策略:预防死锁
  • 破坏死锁产生的四个必要条件
  • 破坏互斥条件
  • 破坏不剥夺条件
  • 破坏请求和保持条件
  • 破坏循环等待条件
  • #破坏互斥条件

  • 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁
  • 破坏互斥条件
  • 如果将只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态
  • 如:SPOOLing技术
  • 就是操作系统使用该技术把独占设备在逻辑上改造为共享设备
  • Pasted image 20260707145809.png
  • 缺点:并非所有资源都能改造成可共享使用的资源,且大多时候需要保护这种互斥性,故很多时候都无法破坏互斥条件
  • #破坏不剥夺条件

  • 不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放
  • 破坏不剥夺条件
  • 方案一:
  • 当某个进程请求新的资源得不到满足时,让他立刻释放保持的所有资源,待以后需要时再重新申请
  • 方案二:
  • 当某个进程需要的资源被其他进程所占有的时候,可以由操作系统协助,将想要的资源强行剥夺。(比如调度算法里的优先级调度算法
  • 缺点
  • 1.实现起来复杂
  • 2.释放已获得资源可能会导致前一阶段的工作失效。故只适用于易保存和恢复状态的资源,如CPU
  • 3.反复申请和释放资源会增加系统开销,降低系统吞吐量
  • 4.采用方案一,一位置只要暂时得不到某个资源,之前获得的那些资源都需要放弃,之后在重新申请。一直发生这样的情况会导致进程饥饿
  • #破坏请求和保持条件

  • 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的请求,而该资源有被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放
  • 破坏请求和保持条件
  • 采用静态分配方法
  • 在进程运行前一次申请完它需要的全部资源,在资源未能满足前不让他投入运行
  • Pasted image 20260707151007.png
  • 实现起来简单,但缺点也很明显
  • 缺点
  • 有些资源可能只需要用很短的时间,因此如果进程的整个运行期间都一直保持着所有资源,就会造成严重的资源浪费。资源利用率极低
  • 且可能导致进程饥饿
  • 如上图中,如果A类进程和B类进程源源不断申请,资源1,2一直被占用,C类进程就始终难以得到满足,就会饥饿
  • #破坏循环等待条件

  • 循环等待条件:存在一种资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。
  • 破坏循环等待条件
  • 采用顺序资源分配法
  • 首先给系统中的资源编号,规定每个进程必须按编号地政的顺序请求资源,同类资源(即编号相同的资源)一次申请完
  • 原理分析:一个进程只有已占有小编号资源时,才有资格申请更大的编号资源。按照此规则,已持有的大编号资源的进程不可能逆向地回来申请小编号的资源,从而就不会产生循环等待的现象。
  • Pasted image 20260707151710.png