【操作系统】死锁概述
来源:互联网 发布:无主之地2淘宝 编辑:程序博客网 时间:2024/05/22 01:37
死锁: Deadlock
各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源。从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进的状态。
死锁与饥饿
饥饿(Starvation)指一个进程一直得不到资源。
死锁和饥饿都是由于进程竞争资源而引起的。饥饿一般不占有资源,死锁进程一定占有资源。
资源的类型
可重用资源和消耗性资源
可重用资源(永久性资源)
可被多个进程多次使用,如所有硬件。
- 只能分配给一个进程使用,不允许多个进程共享。
- 进程在对可重用资源的使用时,须按照请求资源、使用资源、释放资源这样的顺序。
- 系统中每一类可重用资源中的单元数目是相对固定的,进程在运行期间,既不能创建,也不能删除。
消耗性资源(临时性资源)
是在进程运行期间,由进程动态的创建和消耗的。
- 消耗性资源在进程运行期间是可以不断变化的,有时可能为 0;
- 进程在运行过程中,可以不断地创造可消耗性资源的单元,将它们放入该资源类的缓冲区中,以增加该资源类的单元数目。
- 进程在运行过程中,可以请求若干个可消耗性资源单元,用于进程自己消耗,不再将它们返回给该资源类中。可消耗资源通常是由生产者进程创建,由消费者进程消耗。最典型的可消耗资源是用于进程间通信的消息。
可抢占资源和不可抢占资源
可抢占资源
可抢占资源指某进程在获得这类资源后,该资源可以再被其他进程或系统抢占。对于这类资源是不会引起死锁的。
CPU 和内存均属于可抢占性资源。
不可抢占资源
一旦系统把某资源分配给该进程后,就不能将它强行收回,只能在进程用完后自行释放。
打印机等属于不可抢占性资源。
计算机系统中的死锁
死锁是多个进程在运行过程中因争夺资源而造成的一种僵局(Deadly-Embrace) ) ,若无外力作用,这些进程都将无法向前推进。
死锁产生的原因
- 竞争不可抢占资源引起死锁
- 竞争可消耗资源引起死锁
- 进程间推进顺序不当引起死锁
竞争不可抢占资源引起死锁
竞争可消耗资源引起死锁(以进程间通信为例)
进程间推进顺序不当引起死锁
死锁的定义
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态,这些永远在互相等待的进程称为死锁进程。
关于死锁的一些结论:
- 参与死锁的进程数至少为两个
- 参与死锁的所有进程均等待资源
- 参与死锁的进程至少有两个已经占有资源
- 死锁进程是系统中当前进程集合的一个子集
死锁会浪费大量系统资源,甚至导致系统崩溃。
产生死锁的必要条件
- 互斥条件:进程对所分配到的资源进行排它性使用。
- 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
- 不可剥夺条件:进程已获得的资源,在未使用完之前不能被抢占,只能在进程使用完时由自己释放。
- 环路等待条件:指在发生死锁时,必然存在一个进程
-资源的循环链,即进程集合 P0,P1,P2, …,Pn 中的P0,正在等待一个 P1 占用的资源,P1 正在等待 P2 占用的资源, ……,Pn 正在等待已被 P0 占用的资源。
处理死锁的方法
- 鸵鸟方法:对死锁视而不见,即忽略死锁。
- 预防死锁:通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来防止死锁的发生。
- 避免死锁:在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。
- 检测死锁:允许系统在运行过程中发生死锁,但可设置检测机构及时检测死锁的发生,并采取适当措施加以清除。
- 解除死锁:当检测出死锁后,便采取适当措施将进程从死锁状态中解脱出来。
1 0
- 【操作系统】死锁概述
- 操作系统之死锁概述与银行家算法
- 读书笔记-现代操作系统-6死锁-6.1资源6.2 死锁概述
- 操作系统 - 死锁(Deadlock)的概述、条件、对策
- 死锁概述
- 死锁概述
- 死锁概述
- 操作系统死锁
- 操作系统死锁
- 操作系统死锁
- 操作系统死锁
- 操作系统 死锁
- 死锁---操作系统
- 操作系统------死锁
- 操作系统-死锁
- 【操作系统】死锁
- 操作系统概述
- 操作系统概述
- java中关于数组的介绍
- Javascript中的apply与call方法
- 第十四周-数组大折腾
- Android SDK 开发(第一部分)
- C#基础-面向对象编程简介
- 【操作系统】死锁概述
- java笔记
- ANDROID SUPPORT兼容包详解
- 指出下面程序的运行结果
- Laravel最佳分割路由文件(routes.php)的方式
- UVA 514 Rails
- PAT 1030完美数列
- 64. Minimum Path Sum**
- 简单的遗传算法(Genetic algorithms)-吃豆人