0.定义
死锁的规范定义:集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,那么该组进程是死锁的。
直观理解:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
通俗解释:在大多数情况下,每个进程所等待的事件是释放该进程集合中,塔塔进程所占用的资源。换言之,这个死锁进程中的每一个进程都在等待另外一个死锁的进程已经占用的资源。进程的数量以及占用或者请求的资源数量和种类都是无关紧要的,而且无论资源是何种类型的(软件或者硬件)都会发生这样的结果。这种死锁称为资源死锁。这是常见的类型,但不是唯一的类型。
1.资源
由于大部分死锁都和资源有关,所以在学习死锁之前,我们需要先了解什么是资源:
资源可以是硬件设备,如打印机;也可以是一组信息,如数据库中一个加锁的记录;一些资源或有若干个实例,只要任意一个都可以满足对资源的需求,比如多台打印机,使用任意一台都可以。
简单来说,资源就是随着时间的推移,必须能够获得、使用和释放的东西。
资源分为两类:可抢占资源和不可抢占资源
可抢占资源:可以从拥有他的进程中抢占,而不会产生任何副作用的资源,比如存储器。
不可抢占资源:在不引起相关的计算失败的情况下,无法从占有该资源的进程中抢占过来的资源,比如光盘刻录,如果终止了刻盘进程,那么就会导致刻盘失败,从而损坏光盘。
使用资源的顺序:
- 请求资源
- 使用资源
- 释放资源
2.资源死锁的四个必要条件
- 互斥条件。一个资源,要么已经分配给一个进程,要么就是可用的。
- 占有和等待条件。已经得到了某个资源的进程可以在请求新的资源。
- 不可抢占条件。已经分配给一个进程的资源不能强制性地被强占,它只能被占有它的进程显式地释放。
- 环路等待条件。死锁发生时,系统中一定有两个以上的进程组成一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源。
四个必要条件说明:死锁发生时,以上四条一定同时满足;任意一条不满足,死锁就不会发生。
因此,我们也可以通过破坏上述条件,以预防死锁。
3.死锁模型表示
我们一般使用有向图建立死锁模型:
圆形:表示进程
方形:表示资源
从资源节点指向进程节点的有向边,代表该资源已被请求、授权并被进程占用;
从进程节点指向资源节点的有向边,代表当前进程正在请求该资源,并且该进程已被阻塞,处于等待该资源的状态。
下面我们举一个死锁形成的例子:
- A请求R
- B请求S
- C请求T
- A请求S
- B请求T
- C请求R
死锁