操作系统——死锁

操作系统系列3——死锁

操作系统学习总结系列,主要是对操作系统概念和重点主干知识的总结与归纳。参考:《现代操作系统》第4版

其他系列链接:

操作系统系列1——进程与线程链接

操作系统系列2——内存管理

操作系统系列3——死锁

操作系统系列4——文件系统

一、资源
1、可抢占资源

​ 可以从拥有它的进程中抢占而不会产生任何副作用,存储器就是一类可抢占资源

2、不可抢占资源

​ 是指在不引起相关计算失败的情况下,无法把它从占有它的进程处抢占过来

二、定义

​ 如果一个进程集合中的每一个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁

三、必要条件
1、互斥

​ 每个资源要么已经分配给一个进程,要么就是可用的

2、可占和等待

​ 已经得到了某个资源的进程可以再请求新的资源

3、不可抢占

​ 已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放

4、环路等待

​ 死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源。

四、处理方法
1、鸵鸟算法

​ 把头埋在沙子里,假装根本没发生问题。

​ 因为解决死锁问题的代价很高,因此鸵鸟算法这种不采取任务措施的方案会获得更高的性能。

​ 当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟算法。

2、死锁检测与死锁恢复
  • 每种类型一个资源的死锁检测

    检测算法:通过检测有向图中是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁发生

  • 每种类型多个资源的死锁检测

    死锁检测算法如下:

    每个进程最开始时都不被标记,执行过程有可能被标记。当算法结束时,任何没有被标记的进程都是死锁进程。

    1、寻找一个没有标记的进程Pi,它所请求的资源小于或等于A
    2、如果真找到这样一个进程,那么将C矩阵的第i行向量加到A中,标记该进程,并转回第1步
    3、如果没有这样的进程,那么算法终止

  • 从死锁中恢复
    • 1利用抢占恢复

      将进程挂起,强行取走资源给另一个进程使用,用完再放回

    • 2利用回滚恢复

      复位到更早的状态,那时它还没有取得所需的资源

    • 3通过杀死进程恢复

      杀掉环中的一个进程或多个,牺牲掉一个环外进程

3、死锁预防
  • 破坏互斥条件

    例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。

  • 破坏占有个等待条件

    1、规定所有进程在开始执行前请求所需要的全部资源。
    2、要求当一个进程请求资源时,先暂时释放其当前占用的所有资源,然后在尝试一次获得所需的全部资源。

  • 破坏不可抢占条件

    1、保证每一个进程在任何时刻只能占用一个资源,如果请求另一个资源必须先释放第一个资源

    2、将所有的资源统一编号,进程可以在任何时刻提出资源请求,但是所有请求必须按照资源编号的顺序(升序)提出

  • 破坏环路等待
4、避免死锁
  • 1、安全状态

定义: 如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。

  • 2、单个资源的银行家算法

​ 一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。

  • 3、单个资源的银行家算法

检查一个状态是否安全的算法如下:
​ 1、查找右边的矩阵是否存在一行小于等于向量 A。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。

​ 2、假若找到这样一行,将该进程标记为终止,并将其已分配资源加到 A 中。

​ 3、重复以上两步,直到所有进程都标记为终止,则状态时安全的。

​ 如果一个状态不是安全的,需要拒绝进入这个状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值