解决进程死锁——银行家算法透析
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
避免死锁算法中最有代表性的算法是Dijkstra E.W 于1968年提出的
银行家算法:
下面我们将从例题中一点一点的分析:
解题:
第一步:求出初始剩余资源数
图中有四种资源,分别是 A、B、C、D。题中只是给出了每个资源的总数量,没有给出剩余资源数(一般题中会给出),那么我们将它求出,每个资源总数减去每个资源已被分配资源数就得到各自资源的剩余资源数。
这里得出的是:
A 资源已被分配2,
B资源已被分配6,
C资源已被分配12,
D资源已被分配12。
那么总数量减去已被分配的得出:
A资源 3-2=1
B资源 12-6=6
C资源 14-12=2
D资源 14-12=2
最后得到初始剩余资源数(1,6,2,2)
第二步:求出各个进程的需求资源数量
第三步:比较
我们先检查A选项
P1 P4 P5 P2 P3
第一个是 进程P1
我们可以在第二步看出
进程P1需求的资源数量为 (0,0,1,2)
那么初始初始剩余资源数 (1,6,2,2) 每个值大于 (0,0,1,2),那么P1是安全序列。
第二个是 进程P4
我们将上一个进程的剩余资源数 (1,6,2,2) 加上上一个进程的已分配资源数量 (0,0,3,2) 得出剩余资源量 (1,6,5,4)
将剩余资源量 (1,6,5,4)与P4需求资源量 (0,6,5,2) 相比较,每个值都大于。那么P4是安全序列
第三个是 进程P5
我们将上一个进程的 剩余资源量 (1,6,5,4)加上上一个进程的已分配资源数量 (0,3,3,2)得出剩余资源数
(1,9,8,6)
将剩余资源数 (1,9,8,6) 与P5需求资源量 (0,6,5,6)相比较,每个值都大于。那么P5是安全序列
第四个是进程P2
我们将上一个进程的 剩余资源量 (1,9,8,6)加上上一个进程的已分配资源数量 (0,0,1,4)得出剩余资源数
(1,9,9,10)
将剩余资源数 (1,9,9,10)与P2需求资源量 (1,7,5,0) 相比较,每个值都大于。那么P2是安全序列
最后一个是进程P3
我们将上一个进程的 剩余资源量 (1,9,9,10)加上上一个进程的已分配资源数量 (1,0,0,0)得出剩余资源数
(2,9,9,10)
将剩余资源数 (2,9,9,10)与P3需求资源量 (2,3,5,6) 相比较,每个值都大于。那么P3是安全序列
那么A选项正确
按照这个思路,B选项也正确,B选项只是将进程P5跟P2调换了位置。
其余不正确。
总结:
剩余的资源数大于或者等于进程需求的资源数才是安全序列。
剩余的资源数: 剩余资源数量=资源的数量-已分配资源数量
需求资源数: 最大资源需求量-已分配资源数量
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十