操作系统死锁处理--09
操作系统死锁处理--09
如果信号量这样使用
P代表消费资源,V代表产生资源
- 信号量的定义和初始化
//空闲的资源
semaphore full = 0;
//生产者还能生产的资源数
semaphore empty = BUFFER_SIZE;
semaphore mutex = 1;
如果先调用P(mutex)再调用P(empty)和P(full)会有问题吗?
- 先来看看正常的流程是怎么个执行法的
- 如果先P(mutex)会怎样呢?
显然,生产者等待mutex锁的释放,而消费者却在等待生产者生产出来资源后,将自己唤醒.
我们将这种多个进程由于互相等待对方持有的 资源而造成的谁都无法执行的情况叫死锁
死锁的成因
各自占有的资源和互相申请的资源形成了环路等待
死锁的4个必要条件
- 互斥使用(Mutual exclusion)
- 资源的固有特性,如道口
- 不可抢占(No preemption)
- 资源只能自愿放弃,如车开走以后
- 请求和保持(Hold and wait)
- 进程必须占有资源,再去申请
- 循环等待(Circular wait)
- 在资源分配图中存在一个环路
死锁处理方法概述
死锁预防的方法例子
- 在进程执行前,一次性申请所有需要的资源,不会占有资源再去申 请其它资源
缺点1: 需要预知未来,编程困难
缺点2: 许多资源分配后很长时间后才使用,资源利用率低
- 对资源类型进行排序,资源申请必须按 序进行,不会出现环路等待
缺点: 仍然造成资源浪费
死锁避免: 判断此次请求是否引起死锁?
如果系统中的所有进程存在一个可完成的执行序列P1,…Pn,则称 系统处于安全状态
安全序列: 上面的执行序列P1,…Pn。
如何找?
Allocation表示当前进程已经分配的资源,Need表示当前进程还需要多少资源,Available表示当前剩余资源。
p0—>p4是四个进程,如何安排四个进程的执行序列,能够确保四个进程都能顺利执行完毕,而不会因为互相抢占资源,导致死锁发生呢?
这里答案选A,我们来验证一下:
- P1先执行,他需要两个B,此时剩余资源满足条件,P1执行结束后,释放资源,此时剩余资源为:
A B C
5 3 2
- P3再执行,他需要一个B,此时剩余的资源数满足需求,P3执行完后,释放资源,此时剩余资源为:
A B C
7 6 3
后面同理,只要确保当前进程需要占用的资源数比剩余资源数多就行,这样当前进程拿到这些资源后,就可以顺序执行,执行完后释放掉自己占有的资源,这样剩余资源数会比一开始增加一些。然后再让需要占用更多资源数的进程去执行,以此往复即可。
找安全序列的银行家算法(Dijkstra提出)
把上面的推导过程写成算法,就是著名的银行家算法了。
核心在:
Need[i]<=Work---这里的Work就是Avaliable
如果剩余资源数多余当前需要的资源数,说明当前进程可以先执行。
我们可以利用银行家算法求出一个安全序列,但是银行家算法的复杂度比较高,因此系统代价大。
死锁避免之银行家算法实例
请求出现时: 首先假装分配,然后调用银行家算法
当有进程需要申请资源时,可以先调用银行家算法,计算是否会产生死锁,如果会的话,就阻止这次分配,
如上图所示: P0要申请(0,2,0),但是会发现分配后,剩余资源数无法满足任意一个进程的需求,因此无法求出安全序列,所以需要拒绝此次资源分配请求。
死锁检测+恢复: 发现问题再处理
- 基本原因: 每次申请都执行O(mn2),效率低。发现问题再处理
进程的回滚涉及很多方面,例如: 某个进程已经将部分数据写入磁盘了,此时你要回滚,这就很麻烦,还有很多其他的点需要考虑
死锁忽略的引出
相关文章
- 国产操作系统有实现弯道超车的可能吗?
- 操作系统介绍
- SQLServer 错误 17053 %ls:遇到操作系统错误 %ls。 故障 处理 修复 支持远程
- SQLServer 错误 17204 %ls:无法打开文件号 %d 的文件 %ls。 操作系统错误: %ls。 故障 处理 修复 支持远程
- 操作系统最受用户欢迎的Linux操作系统(用户最多的linux)
- Linux操作系统样例实践(linuxsample)
- Linux:开放式计算机操作系统的多样性(linux的分支)
- Linux操作系统:免费还是付费?(Linux操作系统免费吗)
- 清华大学开源软件镜像站推出一键使用服务,将来或支持 42 操作系统
- 基于JavaScript 的操作系统你听说过吗?
- 操作小米盒子优雅刷入Linux操作系统(小米盒子刷linux)
- 25道Linux基础笔试题,让你轻松掌握Linux操作系统基础知识!(linux基础笔试题)
- 探秘Linux操作系统中网卡源码的实现原理(linux网卡源码)
- Linux:极致处理效能的操作系统(linux 处理器)
- 探索 Linux 操作系统的所有端口与应用程序(linux所有端口)
- 深入了解Linux: 开启计算机世界新旅程(什么是linux操作系统)