【清华大学陈渝】 第十一章_死锁
20221029
- 死锁
- 死锁问题
- 系统模型
- 死锁特征
- 死锁的处理
- 死锁预防
- 死锁避免
- 死锁检测
- 死锁恢复
1. 死锁问题
死锁:一组阻塞的进程(两个或多个),持有一种资源,等待获取另一个进程所占有的资源,而导致谁都无法执行。
一组阻塞的进程持有一种资源等待获取另一个进程所占有的一个资源。
例子:系统有2个磁带驱动器,P1和P2各有一个,都需要另外一个。
由于进程的并发执行引起了死锁。
2. 系统模型
资源类型
每个资源类型Ri有Wi实例。
每个进程使用资源如下:
request/get
<--free resource
use/hold
<--requested/use resource
release
<--free resource
2.1 可重复使用的资源:
- 在一个时间只能一个进程使用,且不能被删除。OS避免杀死拥有资源的进程。
- 进程使用资源后要释放,让其他进程重用
- 有物理资源(cpu, I/O通道,主和副存储器),也有抽象的资源(设备和数据结构,如文件,数据库和信号量)
- 如果每个进程拥有一个资源并请求其他资源,可能导致死锁
2.2 怎么使用资源?
- 创建,销毁—内存管理单元;
- 在I/O缓冲区的中断,信号,消息,信息;
- 如果接受信息阻塞可能会发生死锁;
- 可能少见的组合事件可能会引起死锁;
如何表述资源的分配?
资源分配图,利用顶点V和边E的集合表示资源
- V有两种类型:
P={P1, P2…Pn }
,集合包括系统中的所有进程。R={R1, R2… Rm}
集合包括系统中的所有资源类型。
Requesting/claiming edge
–directed edge
P-->Rj
Assignment/holding edge
–directed edge Rj-->Pi
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ghcC4nu2-1667028793873)(assets/image-20221029124212297.png)](https://img-blog.csdnimg.cn/127acd9f99d94ee1ba4bfaf1217412b5.png)
左图没有死锁,右图死锁,死锁会有闭环出现。但有闭环出现不一定会死锁,因为资源是循环的。
- 如果不包含闭环—>没有死锁
- 如果包括闭环,
- 如果每个资源类只有一个实例一定死锁 ;
- 如果每个资源类有几个实例,可能会死锁(不是一定死锁)。
3. 死锁特征
死锁的特征 : 四个的必要条件(有四个条件不一定会死锁)
互斥
在一个时间只能有一个进程使用的资源;
持续并等待
进程保持至少一个资源正在等待获取其他进程持有的额外资源;
无抢占
一个资源只能倍进程自愿释放,进程已经完成了它的任务之后;
循环等待
存在等待进程集合
{P0,P1,...,PN}
,P0
正在等待P1
所占用的资源,P1
正在等P2
占用的资源,…,PN-1
在等待PN
所占用资源,PN
正在等待P0
所占用的资源。
4.死锁处理方法
死锁处理方法:
死锁预防
dead-lock prevention
死锁避免
deadlock avoidance
死锁检测
deadlock Detection
死锁恢复
Recovery from Deadlock
死锁处理办法:
- 确保系统永远不会进入死锁状态。
- 运行系统进入死锁状态,然后恢复。
- 忽略这个问题,假设系统中从来没有发生死锁;用于大多数操作系统,包括UNIX。
5. 死锁预防和死锁避免
5.1 限制申请方式:
- 互斥– 共享资源不是必须的,必须占用非共享资源。
- 占用并等待 --必须保证当一个进程请求的资源,它不持有任何其他资源。
- 需要进程请求并分配所有资源,它开始执行之前或允许进程请求资源仅当进程没有资源。
- 资源利用率低;可能发生饥饿。
- 无抢占
- 如果进程占有某些资源,并请求其他不能被立即分配的资源,则释放当前正占有的资源;
- 被抢占资源添加到资源列表中;
- 只有当它能够获得旧得资源以及它请求新的资源,进程可以得到执行。
- 循环等待:
- 对所有资源类型进行排序,并要求每个进程按照资源的顺序进行申请;
5.2 需要系统具有一些额外的先验信息提供
- 最简单和最有效的模式是要求每个进程声明它可能需要的每个类型资源的最大数目;
- 资源的分配状态是通过限定提供与分配的资源数量,和进程的最大需求。
- 死锁避免算法动态检测的资源分配方法,以确保永远不会有一个环形等待状态。
5.3 银行家算法
死锁预防dead-lock prevention ,只要打破死锁出现的条件,想到死锁的四个必要条件。
1.互斥—占用非共享资源 会增加不确定性 不推荐
2.占用并等待—保证当一个进程请求资源时,不持有任何其他的资源,all or nothing 需要进程请求并分配其所有资源,资源利用率低,可能饥饿
3.无抢占—允许抢占占有某些资源的进程 , 如果进程占有某些资源,并请求其它不能被立即分配的资源,则释放当前正占有的资源,被抢占资源添加到资源列表中,只有当它能够获得旧的资源以及它请求新的资源,进程可以得到执行
4.循环等待—对所有资源类型进行排序,并要求每个进程按照资源的顺序进行申请,会出现资源利用不够
5.4 死锁检测和死锁恢复
检测算法使用
- 何时、使用怎么样的频率来检测依赖于:
- 死锁多久可能会发生?
- 多少进程需要被回滚。
- 如果检测算法多次被使用,有可能是资源图有多个循环,所以我们无法分辨出多个可能死锁进程中哪些造成的死锁。
- 终止所有的死锁进程。
- 在一个时间内终止一个进程直到死锁结束。
- 终止进程的顺序应该是:
- 进程的优先级
- 进程运行了多久以及需要多少时间才能完成
- 进程占用资源
- 进程完成需要的资源
- 多少进程需要被终止
- 进程时交互还是批量处理
- 何时、使用怎么样的频率来检测依赖于:
允许系统进入死锁状态
死锁检测算法
恢复机制
5.5 IPC概述
5.1.1 概述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gNIoRBBE-1667028793886)(assets/image-20221029152005240.png
- 通讯模型
- 直接以及间接通讯
- 间接通讯
- 操作
- 创建一个新的消息队列
- 通过消息队列发送和接收消息
- 销毁消息队列
- 原语的定义如下
send(A,msg)
发送消息到队列Areceive(A,msg)
从队列A 接收消息
- 消息传递可以阻塞或非阻塞
- 阻断被认为是同步的
- 阻断被认为是异步的
- 操作
阻塞与非阻塞
通讯链路缓存
队列的消息被附加到链路的3种方式:
- 0容量—0 messages 发送方必须等待接收方
- 有限容量—n messages 的有限长度,发送方在队列满的时候要等待
- 无限容量—无限长度,理想状况,不用等
5.1.2 信号
信号:
硬件中断interrupt,信号是软件中断,通知有事件要处理
应用程序会catch,默认,停下来处理信号,特殊处理函数。
5.1.3 管道
管道:用于数据交换,与信号不同。理解为内存中的一个buffer
5.1.4 消息队列
消息队列:
管道必须有父进程,数据是字节流,没有数据结构。消息队列可以多个不相干的进程来传递数据,而且message作为一个字节序列存储,message quenues是消息数组。是一个有意义的结构化。
5.1.5 共享内存
直接的方式。不用系统调用send&receive,数据量最大,最快。
开始要创建共享区域。方便,高效,没有多余的拷贝。
每个进程都有私有地址空间,其中明确地设置了共享内存段。同一块物理内存映射到不同的地址空间中去。页表。。。
但必须同步数据访问。写的时候要上锁。同步互斥。
Linux Unix中常见
Socket机制。
参考
- 清华大学陈渝 操作系统原理
感谢
清华大学 陈渝老师 操作系统原理(2014版)
【清华大学陈渝】 第十一章_死锁相关推荐
- 清华大学陈渝老师受聘车用操作系统与泛在操作系统联合实验室操作系统首席科学家
汽车智能化已成为新一轮产业竞争的战略制高点.车用操作系统是智能网联汽车的灵魂,也是车路云一体化的基础.车用操作系统与芯片的协同变革将从根本上解决"缺芯少魂"问题,是实现国家战略的必 ...
- 操作系统笔记 清华大学陈渝
课程概要 基本概念及原理 操作系统介绍 中断及系统调用 内存管理 进程及线程 调度 同步 文件系统 I/O子系统 1. 基本概念 操作系统是控制软件,管理应用程序,为应用程序提供服务,杀死应用程序,分 ...
- 读书笔记_代码大全2第十一章_选择好的变量名
选择好的变量名的注意事项 名字要准确的描述出该变量所代表的事物(eg:好的变量名:currentDate,todayDate坏的变量名:cd,date) 以问题为导向 平均长度在10-16和8-20个 ...
- 【操作系统】第十一章死锁与进程通信
以下是操作系统的各部分知识点的目录: 第一章:操作系统的概述 https://blog.csdn.net/weixin_44751294/article/details/104172847 第二章:启 ...
- java程序设计基础_陈国君版第五版_第十一章例题
java程序设计基础_陈国君版第五版_第十一章习题 class MyThread extends Thread { private String who;public MyThread(String ...
- java程序设计基础_陈国君版第五版_第十一章习题
java程序设计基础_陈国君版第五版_第十一章习题 /*** 题目:假设某家银行可接受顾客的汇款,每进行一次汇款,便可计算出汇款的总额.现有两名顾客,每人分三次,每次一百元将钱汇入.试编程来模拟顾客的 ...
- java语言仅支持单重继承_java语言程序设计基础篇习题_复习题_第十一章
java语言程序设计基础篇习题_复习题_第十一章 11.1 下面说法是真是假?一个子类是父类的子集. 11.2 使用什么关键字来定义一个子类 11.3 什么是单一继承?什么是多重继承?java支持多重 ...
- 清华大学操作系统公开课笔记(向勇、陈渝)
转载:https://zhuanlan.zhihu.com/p/150510828 第一章:概述 内核功能:物理内存管理 | 虚拟内存管理 | 文件系统管理 | 中断处理和IO设备驱动 (底层硬件) ...
- 【清华大学】操作系统 陈渝——Part6 全局页面置换算法
[清华大学]操作系统 陈渝--Part6 局部页面置换算法 6.8 局部页面替换算法的问题,工作集模型 局部页面替换算法的问题 工作集模型 6.9 全局页面置换算法 1. 工作集页置换算法 2. 可变 ...
- 【清华大学】操作系统 陈渝 Part3 ——物理内存管理 之 连续内存分配
[清华大学]操作系统 陈渝 Part3 --物理内存管理 之 连续内存分配 3.1计算机体系结构及内存分层 计算机体系机构 内存体系层次 管理内存方法 3.2地址空间 & 地址生成 地址空间定 ...
最新文章
- navbar build by Bootstrap3.x + RubyOnRails +Haml
- 软件项目开发无成熟框架套路之成本代价
- java多层catch语句_Java异常之catch语句块
- 通过DBA_SOURCE定位SQL语句属于哪个存储过程
- VTK:随机探针用法实战
- 【Redis学习】Redis数据类型及存储结构
- Android之ADB常用命令
- HttpHandler与HttpModule的用处与区别
- UI版式设计模板,这样做才高级!
- 13个免费创建和托管网站的在线工具[图]
- 编程漫谈及计算机硬件简介
- 初涉node.js做微信测试公众号一路填坑顺便发现个有趣的其他漏洞
- php集成环境xampp完整安装过程
- oracle和mssql价格,Oracle与MSSql比对
- iis设置开启GZIP网页压缩功能
- python学习-day9内置函数(高阶)
- C语言实现日历时间转换为秒(mktime)
- 2017年你不应该错过的编程语言、框架和工具
- 电子招投标系统EBD
- 清除win+r的记录