计算机操作系统-死锁详解

如果你对其他操作系统的知识感兴趣,请考虑阅读我的专栏:

【操作系统】

须知

本文仅作学习笔记使用,仅在CSDN网站发布,如果在其他网站发现,均为侵权行为,请举报。作者:小王在努力。
参考资料:《计算机操作系统》 汤小凤 梁红兵 哲凤屏 汤子赢 编著


死锁

  • 须知
  • 死锁概述
    •  死锁定义
    • 产生死锁的原因
    • 产生死锁的必要条件
    • 死锁的处理方法
  • 预防死锁
  • 避免死锁
  • 死锁的检测与解除
    • 死锁检测的方法
    • 死锁定理
    • 死锁解除的方法
  • 后话

死锁概述

 死锁定义

  死锁是计算机中的一种状态。会因为一些原因,导致程序阻塞,无法继续运行。

产生死锁的原因

  产生死锁的两个主要原因:竞争资源程序推进不当

产生死锁的必要条件

  程序中产生死锁,都会同时具有以下四个条件:
  1.互斥条件
  2.请求和保持条件
  3.不可抢占条件
  4.循环等待条件

死锁的处理方法

  通常处理死锁的方式有三种:
  1.预防死锁
  2.避免死锁
  3.检测和解除死锁
  预防死锁是再程序运行之前进行的处理方法。避免死锁则是在程序运行中解决的。而检测和解除死锁则是在死锁发生后的处理。

预防死锁

  在程序运行之前,为了预防产生死锁,我们只需要破坏死锁产生的条件之一即可。
  常用的方法有:
  1.破坏“请求和保持”条件
  2.破坏“不可抢占”条件
  3.破坏“循环等待”条件

避免死锁

  在程序运行中,为了避免产生死锁,我们会判断系统的是否安全状态,通过使用银行家算法来求出安全序列来保证程序处理安全状态,从而不会出现死锁。
  银行家算法举例(注意此处表示有四类资源,每类资源的个数,而不是数字1622):

Process Allocation Need Avaliable
P0 0032 0012 1622
P1 1000 1750
P2 1354 2356
P3 0332 0652
P4 0014 0656

(1)该状态是否安全?
(2)若进程P2提出请求Requset(1,2,2,2)后,系统能否将资源分配给它?

解:
(1)系统是安全的。
根据题意可以得出:

Process Max(总共需要的资源量) Allocation(目前已有的资源量) Need (所需的资源量) Avaliable (现有的资源量)
P0 0044 0032 0012 1622
P1 2750 1000 1750
P2 36 10 10 1354 2356
P3 0984 0332 0652
P4 066 10 0014 0656

据此表可以推出安全序列为{P0,P3,P1,P2,P4}
具体推理过程如下:
1.如果先对P0进行分配则:Av = 1622 - Need=1 6 2 2 - 0 0 1 2 = 1610
遍历剩下的,1610不足以为下面的资源进行二次分配
程序P0运行完成,释放资源Av = 1610 + Max = 1654
2.从头开始遍历未执行完的程序,通过比较当前Av和Need(if(Av>Need)进行分配;else 跳过),不足以为P1进行分配,不足以为P2进行分配,足以为P3进行分配。
3.对P3进行分配:Av = 1654 - Need = 1002
遍历剩下的,1002不足以为下面的资源进行二次分配
程序P3运行完成,释放资源Av = 1002+Max = 1 9 8 6
4.从头开始遍历未执行完的程序,通过比较当前Av和Need(if(Av>Need)进行分配;
足以对P1进行分配。
5.对P1进行分配:Av = 19 8 6 - Need = 0236
遍历剩下的,0236不足以未下面的资源进行二次分配
程序P1运行完成,释放资源Av = 0236 + Max = 2986
6.从头开始遍历未执行完的程序,通过比较当前Av和Need(if(Av>Need)进行分配;
足以对P2进行分配。
7.对P2进行分配:Av = 2 9 8 6 - Need = 0630
遍历剩下的,0630不足以未下面的资源进行二次分配
程序P2运行完成,释放资源Av = 0630 + Max = 3 12 13 10
8.从头开始遍历未执行完的程序,通过比较当前Av和Need(if(Av>Need)进行分配;
足以对P4进行分配。
9.对P4进行分配:Av = 3 12 13 10 - Need = 3 6 8 4
遍历剩下的,无可分配资源
程序P4运行完成,释放资源Av = 3684 + Max = 3 12 14 14
10.运行完毕,序列为{P0,P3,P1,P2,P4}

(2)先为P2分配1,2,2,2资源之后,剩余的资源量不足以为其他资源进行分配,同时P2资程序也未能执行完毕,不能释放资源,造成死锁,所以不能分配给它。

死锁的检测与解除

死锁检测的方法

  我们可以定时或者当资源利用率低的时候进行死锁检测。可以采用的方法有:
  资源分配图(图片来自网络,侵权删除)
计算机操作系统-死锁详解_第1张图片

  其中圆圈代表程序;举行代表资源;矩形中的○代表资源的个数。

  观察P1,已有两个资源,需要r2的一个资源,并且r2有且分配给P1了,所以P1释放资源。

计算机操作系统-死锁详解_第2张图片
  P2有足够的资源,运行完毕,释放资源。
  此处的为:多资源、有环、无死锁。具体的在死锁定理里面有提及。

死锁定理

  1. 如果每类资源只有一个,那么形成环路之后,必定死锁
  2. 如果每类资源不只有一个,那么形成环路之后,不一定死锁
  3. 死锁的充分条件是:资源分配图不可完全简化。

死锁解除的方法

  1.回退进程
  2.撤销所有进程

后话

  1. 首先给大家说一下,博主经常在线,如果有什么问题或者想法,可以在下方评论,我会积极反馈的。
  2. 其次还是要请大家能够多多指出问题,我也会在评论区等候大家!
    在这里插入图片描述 .

你可能感兴趣的:(操作系统,操作系统,经验分享,程序人生,linux,后端)