电子科枚大学 软件技术基础 2.7死锁及解除 主讲教师:刘民岷 ■ 航空航天学院 软件技术基础课程组
软件技术基础 2.7 死锁及解除 主讲教师:刘民岷 航空航天学院 软件技术基础课程组
死锁及产生原因 死锁一多个进程因竞争资源而造成的一种僵局(Deadly Embrace)), 若无外力作用,这些进程将永远不能再向前推进。 产生死锁的原因 >争夺资源 >进程推进顺序不当 电子科技大学刘民岷 死锁及解除 2
电子科技大学 刘民岷 2 1、死锁及产生原因 死锁及解除 • 死锁——多个进程因竞争资源而造成的一种僵局(Deadly Embrace), 若无外力作用,这些进程将永远不能再向前推进。 • 产生死锁的原因 争夺资源 进程推进顺序不当
2、争夺资源引起的死锁 R 己分配 打印机 申请 P2 申请 磁带机 己分配 R2 共享1/O设备产生的死锁 电子科技大学刘民岷 死锁及解除 3
电子科技大学 刘民岷 3 2、争夺资源引起的死锁 死锁及解除 打印机 磁带机 P1 P2 R1 R2 已分配 申请 申请 已分配 共享I/O设备产生的死锁
3、进程推进顺序不当引起的死锁 进程执行时操作顺序不当,也可能造成死锁。如生产者一消费 者问题中,若颠倒两个P操作的顺序就可能造成死锁。 生产者进程: 消费者进程: P(mutex);申请使用缓冲区 P(mutex):申请使用缓冲区; P(empty);检查是否有空缓冲区; P(fu);检查缓冲区是否有信息; 生产者进程: 消费者进程: P(empty)检查是否有空缓冲区; P(fulD;检查缓冲区是否有信息; P(mutex);申请使用缓冲区 P(mutex);申请使用缓冲区; 电子科技大学刘民岷 死锁及解除 4
电子科技大学 刘民岷 4 3、进程推进顺序不当引起的死锁 死锁及解除 • 进程执行时操作顺序不当,也可能造成死锁。如生产者-消费 者问题中,若颠倒两个P操作的顺序就可能造成死锁。 生产者进程: … P (mutex);申请使用缓冲区 P (empty);检查是否有空缓冲区; 消费者进程: … P (mutex);申请使用缓冲区; … P (full);检查缓冲区是否有信息; … 生产者进程: … P (mutex);申请使用缓冲区 P (empty);检查是否有空缓冲区; 消费者进程: … P (mutex);申请使用缓冲区; … P (full);检查缓冲区是否有信息; …
4、死锁产生的必要条件 (1)互斥条件 进程互斥使用资源,任一时刻一个资源只为一个进程独占,其他进 程若请求一个已被占用的资源,只能等占用者释放后才能使用。 (2)不剥夺条件 进程所获得的资源在未使用完毕前,不能被其他进程强行剥夺,只 能由获得该资源的进程自己释放。 (3)部分分配条件 进程每次申请它所需要的一部分新资源的同时,继续占用它已分配 到的资源。 (4)环路条件 存在一个循环等待链,链中每一个进程都在等待它的前一个进程所 持有的资源。 电子科技大学刘民岷 死锁及解除 5
电子科技大学 刘民岷 5 4、死锁产生的必要条件 死锁及解除 (1)互斥条件 进程互斥使用资源,任一时刻一个资源只为一个进程独占,其他进 程若请求一个已被占用的资源,只能等占用者释放后才能使用。 (2)不剥夺条件 进程所获得的资源在未使用完毕前,不能被其他进程强行剥夺,只 能由获得该资源的进程自己释放。 (3)部分分配条件 进程每次申请它所需要的一部分新资源的同时,继续占用它已分配 到的资源。 (4)环路条件 存在一个循环等待链,链中每一个进程都在等待它的前一个进程所 持有的资源
5、 死锁的预防 (1)采用资源的静态预分配策略,破坏“部分分配”条件。 要求进程必须预先申请其所需的全部资源,仅当全部资源满足时,系 统才一次分配,进程运行过程不再申请资源。 (2)允许进程剥夺使用其他进程占有的资源,从而破坏“不可剥 夺条件”。 进程请求新资源不能满足时,必须释放已占有的全部资源。 (3)采用资源顺序使用法,破坏“环路”条件。 将系统资源按照类型线性排队,并按递增规则赋予每类资源唯一编 号,进程申请资源时严格按资源编号递增顺序分配。这样,总有一个 进程占据了较高序号的资源,它继续请求的资源必然是空闲的,该进 程可以一直向前推进。 电子科技大学刘民岷 死锁及解除 6
电子科技大学 刘民岷 6 5、死锁的预防 死锁及解除 (1)采用资源的静态预分配策略,破坏“部分分配”条件。 要求进程必须预先申请其所需的全部资源,仅当全部资源满足时,系 统才一次分配,进程运行过程不再申请资源。 (2)允许进程剥夺使用其他进程占有的资源,从而破坏“不可剥 夺条件”。 进程请求新资源不能满足时,必须释放已占有的全部资源。 (3)采用资源顺序使用法,破坏“环路”条件。 将系统资源按照类型线性排队,并按递增规则赋予每类资源唯一编 号,进程申请资源时严格按资源编号递增顺序分配。这样,总有一个 进程占据了较高序号的资源,它继续请求的资源必然是空闲的,该进 程可以一直向前推进
死锁的避免 预防死锁是设法破坏产生死锁的必要条件之一。而避免死锁不 严格限制产生死锁的必要条件的存在,而是在系统运行过程中, 尽量避免系统进入不安全状态。 基本方法 系统对每种资源的分配提供一种算法,当进程申请资源时,采用 相应算法计算,以确定这一申请是否会造成死锁,若计算结果表 明有可能产生死锁,就不予分配资源。 电子科技大学刘民岷 死锁及解除 7
电子科技大学 刘民岷 7 6、死锁的避免 死锁及解除 • 预防死锁是设法破坏产生死锁的必要条件之一。而避免死锁不 严格限制产生死锁的必要条件的存在,而是在系统运行过程中, 尽量避免系统进入不安全状态。 • 基本方法 – 系统对每种资源的分配提供一种算法,当进程申请资源时,采用 相应算法计算,以确定这一申请是否会造成死锁,若计算结果表 明有可能产生死锁,就不予分配资源
7、死锁的检测及排除 (1)撤销进程法 逐个撤消死锁进程:撤消一检测-撤消… (2)资源剥夺法 逐个撤消死锁等待链上的进程并剥夺它的全部资源,分配给死锁进 程,直到死锁解除。 电子科技大学刘民岷 死锁及解除 8
电子科技大学 刘民岷 8 7、死锁的检测及排除 死锁及解除 (1)撤销进程法 逐个撤消死锁进程:撤消-检测-撤消… (2)资源剥夺法 逐个撤消死锁等待链上的进程并剥夺它的全部资源,分配给死锁进 程,直到死锁解除