操作系统——死锁


一、死锁的概念

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
什么是死锁?
在这里插入图片描述
在这里插入图片描述
死锁、饥饿、死循环的区别:
在这里插入图片描述
死锁发生的必要条件:
在这里插入图片描述
什么时候会发生死锁?
在这里插入图片描述
死锁的处理策略:
在这里插入图片描述
总结:
在这里插入图片描述

二、死锁的处理策略—预防死锁

在这里插入图片描述
在这里插入图片描述
破坏互斥条件:
在这里插入图片描述
采用SPOOLing技术之后,各个进程对打印机发出的请求会首先被输出进程接收,同样的进程2也想输出的话也会被输出进程直接接收,当他们的请求被接收并且响应之后,这些进程就可以顺利的往下执行别的事情,之后输出进程会根据各个进程的请求把它依次放到打印机上打印输出,所以采用了SPOOLing技术之后,虽然打印机是一种必须互斥使用的独占设备,但是进程1和进程2即便是同时想要使用打印机的话,他们的请求也可以被及时的接收,输出进程暂时的保管,之后再慢慢的输出,所以从逻辑上看,对于这些进程来说,在他们看来他们使用的并不是一个独占设备,而是一个共享设备。
在这里插入图片描述
破坏不剥夺条件:
在这里插入图片描述
破坏请求和保持条件:

可能导致饥饿问题:
A类进程需要资源1,B类进程需要资源2,而C类进程需要资源1和资源2,假如有A类、B类进程源源不断到达的话,那么资源1就被立即被分配给下一个A类进程,资源2就被立即被分配给下一个B类进程,而除非资源1和资源2都没有进程使用的时候,他们才有可能同时被分配给一个C类进程,此时C类进程才有可能投入运行,所以很显然这种方式有可能导致C类进程饥饿的。
在这里插入图片描述
破坏循环等待条件:
进程实际使用资源的顺序可能和编号递增顺序不一致,会导致资源的浪费。
比如说P3进程需要使用五号资源打印机和七号资源扫描仪,但是实际的使用过程中,P3进程需要先使用扫描仪,再使用打印机,但是由于编号递增的这种要求,P3进程又必须申请先占有他暂时用不到的资源——打印机,之后打印机会空闲很长一段时间,一直到扫描仪使用完成后,回头再使用打印机这种资源,所以这就导致了打印机的长时间空闲,因此就导致了系统资源的浪费。
在这里插入图片描述
总结:
在这里插入图片描述

三、死锁的处理策略—避免死锁

在这里插入图片描述
什么是安全序列?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安全序列、不安全状态、死锁的联系:
在这里插入图片描述
银行家算法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
手算可以更快一点:
在这里插入图片描述
找不到安全序列的例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结:
在这里插入图片描述
在这里插入图片描述

四、死锁的处理策略—检测和解除

在这里插入图片描述
死锁的检测:
在这里插入图片描述
在这里插入图片描述
现在P1只需要一个R2资源,而R2资源刚好剩余1个,所以可以满足P1的需求,待P1执行完成后,所有的资源进行释放,此时可以满足P2的需求。
在这里插入图片描述
P1执行完释放了所有资源,此时P2只需要一个资源,而R1还剩两个资源也可以满足。待P2执行完成后,也会归还所有的资源。
在这里插入图片描述
所以分析,这两个进程都可以顺利的执行结束。
在这里插入图片描述
不能消除所有边的情况:
在这里插入图片描述
蓝色边为请求,而绿色边为已经分配出去的资源。
可以看出P1资源被阻塞,而P2资源也被阻塞,此时只有P3进程可以执行,执行完成后,归还所有资源。
在这里插入图片描述
R2资源有一个空闲的,但是P1进程需要2个R2资源,所以此时R2资源的数量依然不够满足P1的要求,所以P1依然会被阻塞,P2进程也一样,此时没有空闲的R1,所以P2资源也会一直被阻塞。到这一步为止,就不能继续化简下去了,所以这种情况就是不能消除所有边的情况,这种情况下系统就发生了死锁。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
既不阻塞也不孤点:P2进程申请的R1资源没有可以分配的空间,所以P2阻塞;P1不阻塞,R2可以分配给P1一个资源;不是孤点,指的是与这个进程至少有一个边相连,P1和P2显然都不是孤点,所以在这个状态下满足下满足既不阻塞,又不孤点的进程只有P1,接下来消除所有的请求边和分配边,使其称为孤立的点。
在这里插入图片描述
此时P2进程也成为了既不孤立也不阻塞的情况,也可以把它所连接的边去掉。
在这里插入图片描述
在这里插入图片描述
死锁的解除:

进程已经使用了多少资源:如果一个进程拥有的资源的多,可以把这个进程先干掉,把资源放出来供其他使用。

进程交互式还是批处理式,交互式的就意味着这些进程是在和用户交互的,如果把交互的进程干掉的话,用户是不满意的;而对于批处理式的进程来说,无非是做一些计算,用户对于这种进程的及时反馈并不是太在意,所以可以优先牺牲批处理式的进程。
在这里插入图片描述
总结:
在这里插入图片描述
在这里插入图片描述

总结

本节学习关于死锁的概念、死锁的处理策略,包括预防死锁、避免死锁、死锁的检测和解除。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
银行家算法=-- - 1. 安全状态: 在某时刻系统中所有进程可以排列一个安全序列:{P1,P2,`````Pn},刚称此时,系统是安全的. 所谓安全序列{P1,P2,`````Pn}是指对于P2,都有它所需要剩余资源数量不大于系统掌握的剩余的空间资源与所有Pi(j<i)所占的资源之和. 2.不安全状态可能产生. 目前状态 最大需求 尚需 P1 3 9 6 P2 5 10 5 P3 2 4 2 在每一次进程中申请的资源,判定一下,若实际分配的话,之后系统是否安全. 3.银行家算法的思路: 1),进程一开始向系统提出最大需求量. 2),进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量. 3),若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的 剩余资源量,若不超出,则分配,否则等待. 4.银行家算法的数据结构. 1),系统剩余资源量A[n],其中A[n]表示第I类资源剩余量. 2),各进程最大需求量,B[m][n],其中B[j][i]表示进程j对i 类资源最大需求. 3),已分配资源量C[m][n],其中C[j][i]表示系统j程已得到的第i资源的数量. 4),剩余需求量.D[m][n],其中D[j][i]对第i资源尚需的数目. 5.银行家算法流程:当某时刻,某进程时,提出新的资源申请,系统作以下操作: 1),判定E[n]是否大于D[j][n],若大于,表示出错. 2),判定E[n]是否大于系统剩余量A[n],若大于,则该进程等待. 3),若以上两步没有问题,尝试分配,即各变量作调整. 4),按照安全性推测算法,判断,分配过后,系统是否安全,若安全,则实际分配,否则,撤消分配,让进程等待. 6."安全性检测"算法 1),先定义两个变量,用来表示推算过程的数据. F[n]=A[n],表示推算过程中,系统中剩余资源量的变化. J[n]=False表示推算过程中各进程是否假设"已完成" 2),流程: 在"剩余"的进程中(在推算)过程中,一些进程假设已完成,查找D[j][n]<=F[n]的进程,找到后令J[j]=True (假设该进程完成),F[n]+D[j][n](该进程所占资源释放),如此循环执行. 若最后,所有的F[n]=True(在推算过程中,所有进程均可以完成),则表示(分配过后)系统是安全的,否则系统是不安全的.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值