2.4.3 避免死锁

操作系统的状态可以分为安全状态以及不安全状态,让操作系统始终保持一个安全状态就能避免死锁。所谓安全状态,是指系统能按某种进程顺序(P1,P2,…,Pn)(称〈P1,P2,…,Pn〉序列为安全序列),来为每个进程 Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。当然安全序列可以有多个。

找到安全序列的算法一般是银行家算法,银行家算法最开始是为了合理分配银行的资金保证不会发生资金不足的问题。银行家算法的核心思想是在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。在外面介绍完一些概念之后会根据一个例子来学习一下银行家算法。

假设系统中有 n 个进程,m 种资源:

银行家算法的数据结构: (1)可利用资源向量 Available。这是一个含有 m 个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。

(2)最大需求矩阵 Max。这是一个 n×m 的矩阵,它定义了系统中 n 个进程中的每一个进程对 m 类资源的最大需求。

(3)分配矩阵 Allocation。这也是一个 n×m 的矩阵,它定义了系统中每一类资源当前分配给每一进程的资源数。

(4)需求矩阵 Need。这也是一个 n×m 的矩阵,用以表示每一个进程尚需的各类资源数。

其中Need=Max-Allocation

  银行家算法的步骤:用一个长度为m的一维数组 Requesti 表示本次申请的各种资源量。

①如果 Requesti[j]≤Need[i, j] (0≤j≤m)便转向②;否则认为出错。(因为它所需要的资源数已超过它所宣布的最大值。)
②如果 Requesti[j]≤Available[j] (0≤j≤m),便转向③ ;否则表示尚无足够资源,Pi必须等待。
③系统试探着把资源分配给进程Pi,并修改相应的数据(并非真的分配,修改数值只是为了做预判):
               Available = Available - Requesti;
               Allocation[i, j] = Allocation[i, j] + Requesti[j];
               Need[i, j] = Need[i, j] – Requesti[j]
④操作系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式分配;否则恢复相应数据,让进程阻塞待。
  安全性算法步骤:

(1) 设置两个向量:
  ① 工作向量 Work,它表示系统可提供给进程继续运行所需的各类资源数目,它含有 m个元素,在执行安全算法开始Work:=Available
  ② Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]:=false;当有足够资源分配给进程时,再令 Finish[i]:=true。
(2) 从进程集合中找到一个能满足下述条件的进程:
  ① Finish[i]=false;
  ② Need[i,j]≤Work[j];若找到,执行步骤(3),否则,执行步骤(4)。
(3) 当进程 Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
  Work[j]:= Work[j]+Allocation[i,j];
  Finish[i]:=true;
  go to step 2;
(4) 如果所有进程的 Finish[i]=true 都满足,则表示系统处于安全状态;否则,系统处于不安全状态。

举例子:(我从王道书上扒下来的)

其实不管我咋说,大家还是在自己算一遍来的清楚。

操作系统(三十)避免死锁相关推荐

  1. 操作系统三十年的兴衰史

    加入「公开课」交流群,获取更多学习资料.课程及热招岗位等信息 作者 | Jeremy Reimer 译者 | 苏本如 责编 | 屠敏 来源 | CSDN(ID:CSDNnews) 提及桌面操作系统,想 ...

  2. 嵌入式实时操作系统ucos-ii_「正点原子NANO STM32开发板资料连载」第三十六章 UCOSII 实验 1任务调度...

    1)实验平台:alientek NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三十六章 ...

  3. 嵌入式实时操作系统ucos-ii_「正点原子NANO STM32开发板资料连载」第三十八章 UCOSII 实验 3...

    1)实验平台:alientek NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三十八章 ...

  4. 操作系统真象还原实验记录之实验三十四:实现管道

    操作系统真象还原实验记录之实验三十四:实现管道 1.管道相关知识总结 先说我们操作系统的管道实现: 上述图中,管道缓冲区就是一页内存,这一页内存被我们当成了环形缓冲区结构, 当这页管道被创建出来后,全 ...

  5. 潘爱民:计算机程序的演进——我的程序人生三十年

    本文为<新程序员004>内容,与潘爱民畅谈他的程序人生.<新程序员004>即将上市,敬请期待.从MySQL之父.MariaDB创始人Michael "Monty&qu ...

  6. 最新九月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试三十题

    最新九月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试三十题 引言 自发表上一篇文章至今(事实上,上篇文章更新了近3个月之久),blog已经停了3个多月,而在那之前,自开博以来的21个月每月都不曾断过. ...

  7. Python三十年技术演变史

    作者 | 宋天龙,大数据技术专家,触脉咨询合伙人兼副总裁,前Webtrekk中国区技术和咨询负责人(Webtrekk,德国的在线数据分析服务提供商).擅长数据挖掘.建模.分析与运营,精通端到端数据价值 ...

  8. 华南理工大学计算机操作系统课程设计大作业银行家死锁避免算法模拟,2016春操作系统大作业银行家死锁避免算法模拟.doc...

    文档介绍: 2016春操作系统大作业银行家死锁避免算法模拟20160501华南理工大学"计算机操作系统"课程设计大作业计算机科学与技术专业:春2015班级:号:2015047420 ...

  9. linux课程设计死锁避免,linux操作系统课程设计—车辆死锁.doc

    linux操作系统课程设计-车辆死锁.doc 键入文字"操作系统原理"课程设计BX090709吴沛儒操作系统原理课程设计报告姓名吴沛儒班级BX0907学号9指导老师胡静二〇一一年十 ...

  10. ASP 三十二条精华代码

    整理收藏: ASP 三十二条精华代码 1. οncοntextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 <table b ...

最新文章

  1. HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good
  2. php 屏蔽mysql错误提示_PHP.ini中配置屏蔽错误信息显示和保存错误日志
  3. Codeforces 52C
  4. java xms xmx 默认值_JVM启动参数-Xmx的默认值是多少?
  5. VC2005编译优化选项之玄机
  6. 均匀试验设计表格的问题
  7. 华为路由器的静态路由之间的等价路由以及浮动路由
  8. 第6堂视频课:看到词句就会读-下
  9. Conflux人物志 | 柠檬树上柠檬果,柠檬树下他和他
  10. 程序员如何学习一门新技术?
  11. linux c语言math lm pow,C语言pow()函数实现求x的y次方的值
  12. stm8s定时器输出比较模式
  13. 电脑无故关机,出现提示:从异常关机中恢复 bluescreen.........
  14. C++STL常用算法adjacent_find
  15. 目前能利用的5个视频模块
  16. iov_iter操作
  17. 使用Pixelmator Pro修饰照片
  18. ffmpeg在低版本VS中的编译
  19. 最终幻想14 服务器维护,《FF14》服务器遭到攻击 官方补偿方案今日不收时长费...
  20. 美国音乐学院计算机音乐专业排名2015年,2019USNEWS美国音乐专业排名前100!

热门文章

  1. 洛谷 - P1111 - 修复公路 - 并查集
  2. 第七章之main函数和启动例程
  3. SQL Server 2008 允许远程链接 解决方法
  4. 七月算法--12月机器学习在线班-第七次课笔记—最大熵
  5. 使用NSURLCache 数据缓存
  6. Photoshop用户必知必会的28个快捷键
  7. RouteOS的DHCP服务器配置
  8. python如何调用c编译好可执行程序
  9. 线程的状态、进程的状态
  10. USTC English Club Note20171014(2)