计算机操作系统——死锁

前言:死锁:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。如果死锁发生,会浪费大量的系统资源,甚至会导致系统崩溃。

关于死锁的结论:

  1. 参与死锁的进程最少是两个
  2. 参与死锁的所有进程都在等待资源
  3. 参与死锁的进程是当前系统中所有进程的子集

一、死锁产生的必要条件


1. 互斥条件
进程对所分配到的资源进行排它性使用,即在一段时间内,某资源只能被一个进程所占用。如果此时还有其他进程请求该资源,则请求进程只能等待,直至占有该资源的进程用完并释放资源。

2. 请求和保持条件
进程已经保持了至少一个资源,但又提出新的资源请求,而该进程已经被其他进程占有,此时进行请求的进程将被阻塞,进入阻塞队列,但是对自己已经获得的资源保持不放。

3. 不可抢占条件
进程已获得的资源在未使用之前不能被抢占,只能在进程使用完时由自己释放。

4. 循环等待条件
在发生死锁时,必然存在一个进程–资源的循环链,即进程集合{P0,P1,…,Pn}中的P0正在等待一个P1占用的资源,P1正在等待P2占用的资源,…,Pn正在等待已被P0占用的资源。


二、处理死锁的方法

1. 预防死锁

(1)破坏“请求和保持”条件
(2)破坏“不可抢占”条件
可剥夺资源:即当某进程新的资源未满足,释放已占有的资源
(3)破坏“循环等待”条件
资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反。


2. 避免死锁

利用银行家算法避免死锁。Dijkstra的银行家算法,原本是为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。
为实现银行家算法,每一个新进程在进系统时,它必须申明在运行过程中,可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。如果有,再进一步运算将资源分配给该进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给该进程。

银行家算法中的数据结构:
(1)可利用资源向量Available
代表可利用的资源数目。
(2)最大需求矩阵Max
代表各进程对各类资源的最大需求。
(3)分配矩阵Allocation
代表各进程当前已分配的各类资源数目。
(4)需求矩阵Need 代表各进程尚需要的各类资源数目。最大需求矩阵减去分配矩阵(Need[i,j] = Max[i,j] - Allocation[i,j])

银行家算法的过程:

银行家算法例题:


3. 检测死锁

为了能对系统中是否发生了死锁进行检测,在系统中必须:保存有关资源的请求和分配信息;提供一种算法,它利用这些信息来检测系统是否已经进入死锁状态。

安全性算法:
设置两个向量
a.工作向量Work:提供给进程继续运行所需的各类资源数目。它含有m个元素,在安全算法开始时Work = Available
b.Finash:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时,先令Finish[i] = false;当有足够资源分配给进程时,再令Finish[i] = true;


4. 解除死锁

当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常用的方法:
(1)剥夺(抢占)资源法:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态。
(2)撤销(终止)进程法:可以直接撤销死锁进程或撤销代价最小的进程,直至有足够的资源可用,死锁状态消除为止;所谓的代价是指优先级、运行代价、进程的重要性和价值等。
(3)进程回退法:需要设置还原点,让一个或多个死锁进程回退到足够避免死锁的地步。

计算机操作系统——死锁(产生的必要条件与处理死锁的四个关卡)相关推荐

  1. 计算机操作系统(第3版) (2018年清华大学出版社出版的图书)

    参见:https://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%EF%B ...

  2. 计算机操作系统-磁盘存储器

    学习总结目录: 计算机操作系统-学习总结(操作系统引论) 计算机操作系统-学习总结(进程的描述与控制) 计算机操作系统-学习总结(处理机调度与死锁) 计算机操作系统-学习总结(存储器管理) 计算机操作 ...

  3. 计算机操作系统-文件管理

    学习总结目录: 计算机操作系统-学习总结(操作系统引论) 计算机操作系统-学习总结(进程的描述与控制) 计算机操作系统-学习总结(处理机调度与死锁) 计算机操作系统-学习总结(存储器管理) 计算机操作 ...

  4. 【转载】计算机操作系统出现死锁的原因

    目录 1. 死锁的概念以及产生死锁的原因 1.1 死锁的定义 1.2 死锁产生的原因 1) 系统资源的竞争 2) 进程推进顺序非法 3) 死锁产生的必要条件 2. 死锁的处理策略 预防死锁 避免死锁 ...

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

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

  6. 计算机操作系统——死锁

    文章目录 一.相关知识 1.可重用性资源和消耗性资源 2.可抢占性资源和不可抢占性资源 3.死锁定义 二.死锁产生的原因和必要条件 1.死锁产生的原因 2.死锁产生的必要条件 三.预防死锁的方法 1. ...

  7. 计算机操作系统 死锁问题

    概念 条件是基础,在一定的原因下,产生结果 死锁三胞胎 死锁 僵持,消耗时间,双方都占用了部分资源,不释放 活锁 双方互相谦让,都不占用资源 饥饿 谦让的一方一直等待,无法占有资源,导致饥饿问题 死锁 ...

  8. 计算机操作系统学习笔记_6_进程管理 --死锁

    一.死锁的概念 1.死锁的概念 系统中两个或两个以上的进程无限期地相互等待永远不会发生的条件,系统处于一种停滞状态,这种情况称为死锁. 2.死锁产生的原因 (1)进程推进顺序不当 (2)对互斥资源的分 ...

  9. 国防科大计算机考研大纲,2022年国防科技大学F1003计算机操作系统考研大纲及参考书目...

    2022年研究生入学考试自命题科目考试大纲 科目代码:F1003 科目名称:计算机操作系统 一.参考书目 1.<操作系统教程>(第5版),费祥林,高等教育出版社,2014年. 2.< ...

最新文章

  1. IP SOC与Camera ISP
  2. c语言试题 改错题,精选二级C++试题 – 改错题
  3. Android网络连接异常处理方案
  4. C++ assert 断言使用
  5. 两个单链表生成相加链表
  6. copy vs. uninitialized_copy
  7. java正则表达式 ppt_Java正则表达式演示
  8. Flutter实战一Flutter聊天应用(十八)
  9. ffplay for mfc 代码备忘
  10. C语言课程学习的总结
  11. Jquery常用操作select篇
  12. Logstash的logstash-input-jdbc插件mysql数据同步ElasticSearch及词库
  13. Java程序设计之扑克牌
  14. python共享单车数据分析_利用python分析共享单车项目
  15. 内存颗粒的逻辑bank理解
  16. 毕加索传记的艺术和历史
  17. 斯坦福用算法降低:令欧洲头大的难民犯罪率
  18. ios 微信分享重新编码链接_iOS微信分享及从Safari跳转到App
  19. 图的遍历 --- 广度优先搜索【借助队列实现】 + 深度优先搜索【借助递归栈】
  20. ibatis中iterate的用法(conjunction=or ,) .

热门文章

  1. 程序员面试金典 - 面试题 16.10. 生存人数(自定义优先队列)
  2. 支持向量机(Support Vector Machines,SVM)
  3. LeetCode 17. 电话号码的字母组合(回溯)
  4. POJ 2255 Tree Recovery(已知前序中序,求后序)
  5. 在微型计算机中8m,第一部分 计算机基础知识部分习题(答案)
  6. el表达式 循环_EL表达式和JSTL标签库(百战程序员047天)
  7. 爬虫——多线程糗事百科案例
  8. XPath和lxml类库
  9. 手机内部零件名称图解_旧手机回收后都干嘛了?
  10. 别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!