790 likes | 1.01k Vues
Chapter 6 并发:死锁和饥饿. Operating Systems: Internals and Design Principles. Operating Systems: Internals and Design Principles. 当两列火车在路口相遇时,二者都应该完全停下来,除非对方已离开,否则不可以开动。 — A TREASURY OF RAILROAD FOLKLORE, B. A. Botkin and Alvin F. Harlow. 6.1 死锁. 死锁 Deadlock.
E N D
Chapter 6并发:死锁和饥饿 Operating Systems:Internals and Design Principles Seventh Edition By William Stallings
Operating Systems:Internals and Design Principles 当两列火车在路口相遇时,二者都应该完全停下来,除非对方已离开,否则不可以开动。 —A TREASURY OF RAILROAD FOLKLORE, B. A. Botkin and Alvin F. Harlow
死锁 Deadlock • 一组相互竞争系统资源或进行通信的进程间的“永久”阻塞。 • 当一组进程中的每个进程都在等待某个事件,而只有在这组进程中的其他被阻塞的进程才能触发这个事件,这组进程发生死锁。 • 永久的 • 没有有效的解决方法
潜在的死锁 I need quad C and B I need quad B and C I need quad A and B I need quad D and A
真正的死锁 HALT until D is free HALT until C is free HALT until B is free HALT until A is free
可重用资源死锁示例2:Memory Request P1 P2 . . . . . . Request 80 Kbytes; Request 70 Kbytes; . . . . . . Request60 Kbytes; Request 80 Kbytes; 可用内存空间200Kbytes,有两个进程: 当两个进程第二次请求内存时,发生死锁
可消耗资源Deadlock 考虑一对进程,进程双方都要尝试从对方接收消息,然后向对方发送消息 如果使用阻塞接受,则发生死锁
死锁的处理 处理死锁一般有三个方法:
死锁预防策略 • 设计一种系统来排除发生死锁的可能性。两种方法: • 间接 • 防止前三个必要条件的任何一个的发生 • 直接 • 防止循环等待的发生
死锁条件预防 • 不可抢占 • 如果已占有某个资源的进程进一步申请资源时被拒绝时,进程必须释放它原先分配的资源,如有必要,可再次申请这个资源和其他的资源。 • 一个进程请求被另一个进程占有的资源时,OS可以抢占另一个进程,要求其释放资源。 • 循环等待 • 定义一个对资源类型的线性顺序
Deadlock Avoidance 动态决策,是否进行当前的资源分配取决于该分配过程会不会引起死锁 要求知道将来的进程资源请求情况
进程启动拒绝 n个进程和m个不同类资源的系统 Resource = Available = Claim = Allocation =
进程启动拒绝策略 死锁避免策略:如果一个新进程的资源需求会导致死锁,拒绝进程Pn+1,仅当
资源分配拒绝 又称为银行家算法(banker’s algorithm) State——系统的状态是当前给进程分配的资源情况,包含两个向量Resource和Available及两个矩阵Claim和Allocation Safe state——安全状态是指至少有一个资源分配序列不会导致死锁 Unsafe state
安全状态的确定 资源总量 分配后的可用资源 四个进程和三类资源的系统 资源被分给四个进程,这是安全状态吗?
P3 运行结束后 因此,这是一个安全状态
死锁避免优点Advantages 不需要死锁预防中的抢占和回滚进程 比死锁预防的限制少
死锁避免的限制Restrictions 必须实现声明每个进程请求的最大资源 所讨论的进程必须是无关的,也就是说,它们执行的顺序必须没有任何同步请求的限制 分配的资源数目必须是固定的 在占有资源时,进程不能退出
死锁检测算法 • 死锁的检查可以非常频繁地在每次资源请求时发生,也可以更少些,取决于死锁发生的可能性 • 优点: • 可尽早检测死锁 • 算法相对简单 • 缺点 • 频繁检查会消耗相对多的处理器时间
死锁检测算法 • 定义请求矩阵Q,Qij表示进程i请求j类型资源的数量。算法主要是标记没有死锁进程的过程,最初,所有进程未标记。 • 标记Allocation中一行全为0的矩阵 • 初始化临时向量W,令W等于Available向量 • 查找下标i,使进程i当前未标记且Q的第i行小于等于W,即对所有的,如果找不到这样的行,终止算法 • 如果找到,标记进程i,并把Allocation矩阵中的相应行加到W中,即对所有,返回步骤3
死锁检测算法 R1 R2 R3 R4 R5 R1 R2 R3 R4 R5 R1 R2 R3 R4 R5 P1 P2 P3 P4 P1 P2 P3 P4 Resource vector R1 R2 R3 R4 R5 Request matrix Q Allocation matrix A Available vector • 算法不保证防止死锁,是否死锁取决于将来同意请求的顺序,只能确定当前是否存在死锁
死锁恢复 取消所有死锁进程。 把每个死锁进程回滚到前面定义的某些检查点(checkpoint),并重启所有进程。 连续取消死锁进程,直到不再存在死锁。 连续抢占资源直到不再存在死锁。
Dining Philosophers Problem • No two philosophers can use the same fork at the same time (mutual exclusion) • No philosopher must starve to death (avoid deadlock and starvation)
使用Semaphores解决 Cont.
UNIX Concurrency Mechanisms UNIX 提供了一系列用来进程间通信和同步的机制: