操作系统之死锁篇

参考链接:
https://github.com/CyC2018/CS-Notes
https://blog.csdn.net/u013348164/article/details/73737217

概念

所谓死锁,是指多个进程在运行过程中因争夺资源而照成的一种僵局。当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。

目录

必要条件(四个)

  • 互斥条件:在一段时间内某资源只由一个进程占用
  • 保持与等待条件:当某进程拥有某个资源时,还可以请求新的资源,同时不释放原有资源
  • 不可剥夺条件:指进程已获得资源,在使用完之前,不能被剥夺,只能在使用完时由自己释放。
  • 环路等待条件:指在发生死锁时,必然存在一个进程—资源的环形链,即进程集合(P0,P1,P2,…,Pn)中的P0正在等待一个P1占用的资源;P1正在等待一个P2占用的资源,……,Pn正在等待已被P0占用的资源。

处理方法(四个)

  • 鸵鸟策略:忽视死锁,解决死锁问题的代价很高。大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法仅仅是忽略它。

  • 死锁检测和恢复:不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复
    1. 死锁检测
    (1) 每种类型单资源
    用款图表示资源分配与请求情况,若存在有向图的环路,则说明死锁:从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。

    方框表示资源,圆框表示进程。a->b,说明存在死锁。
    (2)每种类型多资源
    用矩阵来表示分配情况

    上图中,有三个进程四个资源,每个数据代表的含义如下:
    E 向量:资源总量
    A 向量:资源剩余量
    C 矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量
    R 矩阵:每个进程请求的资源数量
    分析:进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执行,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。P2 可以执行,执行后释放 P2 拥有的资源,A = (4 2 2 1) 。P1 也可以执行。所有进程都可以顺利执行,没有死锁。
    2. 死锁恢复
    (1)抢占资源
    (2)进程回滚
    (3)杀死进程

  • 预防死锁:只需破坏死锁产生的四个必要条件之一即可。但是开销非常之大,目前没有一个操作系统可以实现。目前使用的方法是避免死锁,而不是防止死锁。
    https://blog.csdn.net/jgm20475/article/details/81297819

  1. 破坏互斥条件:使资源可以同时支持多个进程。缺点是有些资源根本不能同时访问。
  2. 破坏请求与等待条件:釆用预先静态分配方法,即进程在运行前一次申请完它所需要的全部资源,否则无法执行。缺点是系统资源被严重浪费,以及有进程饥饿现象
  3. 破坏不可剥夺条件:请求新的资源而得不到满足时,释放已经保持的所有资源,待以后需要时再重新申请。缺点是反复地申请和释放资源会增加系统开销,降低系统吞吐量,这种方法常用于状态易于保存和恢复的资源,如CPU的寄存器及内存资源,一般不能用于打印机之类的资源。
  4. 破坏环路等待条件:釆用顺序资源分配法。首先给系统中的资源编号,规定每个进程,必须按编号递增的顺序请求资源,同类资源一次申请完。也就是说,只要进程提出申请分配资源Ri,则该进程在以后的资源申请中,只能申请编号大于Ri的资源。缺点是编号必须相对稳定,这就限制了新类型设备的增加;尽管在为资源编号时已考虑到大多数作业实际使用这些资源的顺序,但也经常会发生作业使用资源的顺序与系统规定顺序不同的情况,造成资源的浪费;此外,这种按规定次序申请资源的方法,也必然会给用户的编程带来麻烦。
  • 避免死锁
  1. 安全状态检测:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。
    在进行系统资源分配之前,先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程; 否则,让进程等待。

    Has表示已拥有资源数,Max表示总共需要的资源数。(a)->(e)表示不会发生死锁,全部正常执行,所以是安全状态
  2. 银行家算法
    (1)单资源的银行家算法(与安全状态检测类似)
    一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。

    (2)多资源的银行家算法(常考)
    这个我以后看下课本!!!!
posted on 2020-09-09 10:12  pipony  阅读(237)  评论(0)    收藏  举报