5-2009-死锁 操作系统高级 教学课件

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/9/17
死锁预防
破坏“请求和保持”条件 要求每个进程在运行前必须一次性申请 它所要求的所有资源,且仅当该进程 所要资源均可满足时才给予一次性分 配
问题:资源利用率低;”饥饿”现象
2020/9/17
死锁预防
破坏“循环等待”条件 采用资源有序分配法: 把系统中所有资源编号,进程在申请资 源时必须严格按资源编号的递增次序进 行,否则操作系统不予分配
Need: ARRAY[1..n,1..m] of integer;
Request: ARRAY[1..n,1..m] of integer;
2020/9/17
银行家算法
简记符号: Available Max[i] Allocation[i] Need[i] Request[i]
2020/9/17
银行家算法
当进程pi提出资源申请时,系统执行下列步 骤:
(1)若Request[i]≤Need[i],转(2); 否则错误返回
(2)若Request[i]≤Available, 转(3);否则进程等待
2020/9/17
(3)假设系统分配了资源,则有: Available:=Available-Request[i]; Allocation[i]:=
2020/9/17
死锁预防
破坏“不可剥夺”条件
实施方案1:在允许进程动态申请资源前提下规 定,一个进程在申请新的资源不能立即得到满 足而变为等待状态之前,必须释放已占有的全 部资源,若需要再重新申请
实施方案2:当一个进程申请的资源被其他进程 占用时,可以通过操作系统抢占这一资源 (适用于状态易于保存和恢复的资源)
➢ 请求和保持(部分分配,占有申请) 一个进程在申请新的资源的同时保持对原有资源的占有
➢ 循环等待 存在一个进程等待队列
{P1 , P2 , … , Pn}, 其中P1等待P2占有的资源,P2等待P3占有的资源,…,
Pn等待P1占有的资源,形成一个进程等待环路
2020/9/17
4.产生死锁的例子
1.申请不同类型资源产生死锁
永久性资源:可以被多个进程多次使用( 可再用资源)
* 可抢占资源与不可抢占资源
临时性资源:只可使用一次的资源;如信 号量,中断信号,同步信号等(可消耗性 资源)
2020/9/17
3. 产生死锁的四个必要条件
➢ 互斥使用(资源独占) 一个资源每次只能给一个进程使用
➢ 不可强占(不可剥夺) 资源申请者不能强行的从资源占有者手中夺取资源,资 源只能由占有者自愿释放
问题:?
(解决哲学家就餐问题)
2020/9/17
2.死锁避免
M
用户乙
O1 B
Y2
O2 Y Y1
O
X1 X
X2
2020/9/17
O3
A
M
用户甲
死锁避免A为用户甲总资源需求量
M
用户乙
Y = M –A
O1 B
一旦乙占用超过Y的资源, 甲将得不到足够的资源执行
乙的B和对应的X
O2 与甲的A和对应的Y
Leabharlann Baidu
Y
意义和关系相似
操作系统高级
Operating Systems Advanced Class
北京大学软件与微电子学院 2009春季
2020/9/17
第五讲 死锁
死锁的基本概念 死锁的解决方案
(预防,避免,检测及解除) 资源分配图
2020/9/17
死锁的现象
2020/9/17
2. 资源
“申请--分配--使用--释放”模式
不安全状态
2020/9/17
安全序列
一个进程序列{P1,…,Pn}是安全的,如 果对于每一个进程Pi(1≤i≤n),它以后 尚需要的资源量不超过系统当前剩余资 源量与所有进程Pj ( j < i )当前占有资源 量之和,系统处于安全状态 (安全状态一定是没有死锁发生的)
2020/9/17
安全状态与不安全状态
2020/9/17
m=2,n=3
二、死锁的解决方案
• 不考虑此问题(鸵鸟政策) • 不让死锁发生
✓静态策略:设计合适的资源分配算法 ,不让死锁发生
✓动态策略:
• 让死锁发生
2020/9/17
1.死锁预防
定义: 在系统设计时确定资源分配算法,保证 不发生死锁
具体的做法是破坏产生死锁的四个必要 条件之一
不安全状态:不存在一个安全序列 不安全状态一定导致死锁
2020/9/17
银行家算法
n:系统中进程的总数 m:资源类总数 Available:
ARRAY[1..m] of integer; Max:
ARRAY[1..n,1..m] of integer;
2020/9/17
银行家算法
Allocation: ARRAY[1..n,1..m] of integer;
O
X
2020/9/17
A
M
用户甲
M
用户乙
X1为当前分配给用户甲的资源数量
O1 Y1为当前分配给用户乙的资源数量
B
无论用户甲还是用户乙
剩余资源总数
O2 都能满足用户对资源的
Y
需求
Y1
O
2020/9/17
X1 X
A
M
用户甲
M
用户乙
X2为当前分配给用户甲的资源数量 Y1为当前分配给用户乙的资源数量
剩余资源不能满足乙的需求
P1:
… 申请打印机 申请扫描仪
使用 释放打印机 释放扫描仪

P2:
… 申请扫描仪 申请打印机
使用 释放打印机 释放扫描仪

2020/9/17
产生死锁的例子
2.申请同类资源产生死锁(如内存)
设有资源R,R有m个分配单位,由n个进程 P1,P2,…,Pn(n > m)共享。假设每个进程对R 的申请和释放符合下列原则: * 一次只能申请一个单位 * 满足总申请后才能使用 * 使用完后一次性释放
O1
但是剩余资源足够甲的需求
B
甲得到执行后,释放资源,
从而使得乙也有足够资源满 O2 足自己需求
Y
Y1
O
2020/9/17
X
X2
A
M
用户甲
M
用户乙
X2为当前分配给用户甲的资源数量 Y2为当前分配给用户乙的资源数量
剩余资源既不能满足甲的需求
O1
B
也不足以满足乙的需求
Y2
此时甲和乙都无法获得足
够的资源使其得到执行
O2
Y
O
2020/9/17
X X2
A
M
用户甲
死锁避免(续)
O5
Z
O4
2020/9/17
死锁避免定义
定义: 在系统运行过程中,对进程发出的每一个系统能
够满足的资源申请进行动态检查,并根据检查 结果决定是否分配资源,若分配后系统可能发 生死锁,则不予分配,否则予以分配
安全状态: 如果存在一个由系统中所有进程构成的安全序 列P1,…,Pn,则系统处于安全状态
相关文档
最新文档