资源问题
介绍死锁之前需对计算机系统中的各类资源有一个大体的了解
可重用性资源
一种可供用户重复使用多次的资源,它具有以下特性:
- 每一个可重用性资源中的单元只能分配给一个进程使用,不允许多个进程共享
- 使用顺序:请求资源、使用资源、释放资源
- 系统中每一类可重用性资源中的单元数目是相对固定的,进程在运行期间既不能创建也不能删除它
计算机系统中大多数资源都属于可重用性资源
可消耗性资源
又称临时性资源,是在进程运行期间由进程动态的创建和消耗的
它具有以下特性:
- 每一类可消耗性资源的单元数目在进程运行期间是可以不断变化的
- 进程在运行过程中,可以不断地创造可消耗性资源的单元
- 进程在运行过程中,可以请求若干个可消耗性资源单元,用于进程自己消耗,不再将它们返回该资源类中
可消耗性资源通常是由生产者进程创建,由消费者进程消耗
最典型的可消耗性资源就是用于进程间通信的消息
可抢占性资源
某进程在获得这类资源后,该资源可被其他进程或系统抢占
CPU和主存都属于可抢占性资源
这类资源是不会引起死锁的
不可抢占性资源
一旦系统把某资源分配给某进程后,就不能将它强行收回,只能在进程用完后自行释放
磁带机、打印机等都属于不可抢占性资源
死锁
导致死锁的几种原因
- 竞争不可抢占性资源引起死锁
- 竞争可消耗资源引起死锁
- 进程推进顺序不当引起死锁
死锁的定义
如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的(Deadlock)
产生死锁的必要条件
- 互斥条件
- 请求和保持条件
- 不可抢占条件
- 循环等待条件
处理死锁的方法
-
预防死锁
-
避免死锁
银行家算法
-
检测死锁
-
解除死锁
从1到4对死锁的防范程度逐渐减弱,但对应的是资源利用率的提高,以及进程因资源因素而阻塞的频度下降,即并发程度提高