!
6.1 死锁原理
1. 是啥
- 一组相互竞争的系统资源或进行通信的进程间永久的阻塞
- 互相竞争
- 死锁是永久的
- 若无外力作用,都无法再向前推进
2. 可重用资源 Reusable Resources
特点:指一次仅提供一个进程安全使用且不因使用而耗尽not depleted 的资源
使用:进程得到资源单元并使用后,会释放这些单元供其他进程再次使用
举例:
处理器
IO通道
内存和存
设备
文件
数据库信号量等之类的数据结构
死锁发生在,如果每个进程占用着一个资源并且要求另一个
3. 可消耗资源Consumable Resources
特点:可被创建 ,可被销毁 的资源
举例:
中断interrupts
信号 signals
消息messages
I/O缓冲区的消息 inforamation
很少的时间组合也可能导致死锁
4. 资源分配图 resource allocation graph
有向图 :说明了系统资源和进程状态
5. 死锁的条件🎃
- 互斥 mutual exclusion
一次只有一个进程占有一个资源,其他进程不能访问已分配给其他进程的资源
- 占有且等待 hold and wait
当一个进程等待其他进程时,继续占有已分配的资源
- 不可抢占 No preemption
不能强行抢占进程已占有的资源
- 循环等待 ——充分条件
存在一个闭合的进程链,每个进程至少占由此链中下一个进程所需的一个资源。
互斥、不可抢占、占有且等待
此三个为死锁的必要条件,也是产生循环的前置条件
6.2 死锁预防deadlock prevention
死锁预防策略是试图设计一种系统来排除发生死锁的可能性。
分为两类:
- 间接死锁预防(防止三个必要条件的任何一个)
- 直接死锁预防(防止 循环等待)
- 互斥
操作系统必须支持
- 占有且等待
要求进程一次性地请求所有需要的资源
- 不可抢占
该进程必须释放最初占有的资源,必要时可以再次申请这些资源和其他资源
- 循环等待
定义资源 类型的线性顺序
6.3 死锁避免 deadlock avoidance
两种方法:
- 若一个进程 的请求会导致死锁,则不启动该进程
- 若一个进程增加的资源请求会导致死锁,则不允许这一资源分配
资源分配拒绝 resource allocation denial
资源分配拒绝策略,又称为 银行家算法banker algorithm
安全状态:至少有一个资源分配不会导致死锁,所有进程都能运行直到结束
不安全状态:指非安全的一个状态
——银行家算法🎃
资源进程 | 可提供的work | 需要的Need | 分配allocation | 把分配的释放收回work+allocation | finish |
---|---|---|---|---|---|
- 写出框架
- 把avaiable 写到work里
- 在Need里找小于等于work的,把满足要求的进程写到第一列
- 对应写上allocation,计算work+allocation finish为true
- 得到的W+A写到work,重复2-4
题型1
能否得到一个进程的序列,能找到,那就是安全的
题型2
看request ()问系统能否将资源分配给它
- 看request是否小于等于need,若不小于则失败
- 看request是否小于等于与avaiable,若不小于 则等待
- 以上满足后,尝试分配,并将available allocation need 修改,判断是否安全
available= available-request
allocation = allocation+request
need=need-request
再上例题
6.4 哲学家就餐问题
循环等待,死锁
名词解释
死锁
两个 或以上 的进程相互 等待其他进程 做完某些事情 而都不能执行
活锁
两个 或以上的进程为了 响应其他进程的变化而不断改变自己的状态,但不做有用的工作
饥饿
一个进程长时间得不到调度 不能执行
简答
死锁的充分条件
互斥
占有且等待
非抢占
死锁的充要条件
互斥
占有且等待
非抢占
循环等待
死锁预防
占有且等待:一次性请求所有资源
非抢占:当一个进程请求资源被抢占时,释放所有资源
循环等待:定义资源的先行访问顺序
死锁避免
进程启动拒绝
资源分配拒绝——银行家算法
死锁检测和恢复
所检测算法
死锁和饥饿的关系
死锁是一种特殊的饥饿