例子:
如果两个进程准备分别将扫描的文档记录到CD上。进程A请求使用扫描仪,并被授权使用。但进程B首先请求CD刻录机,也被授权使用。现在,A请求使用CD刻录机,但该请求在B释放CD刻录机前会被拒绝。但是,进程B非但不放弃刻录机,而且去请求扫描仪。这是,两个进程都被阻塞,并且一直处于这样的状态。这种状况就是死锁(deadlock)。
死锁的定义:
如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。
死锁可能发生在:进程间,机器之间()
资源的分类:
- 可抢占资源(preemptable resource) : 可以从拥有它的进程中抢占而不会产生任何副作用,如存储器就是一类可抢占的资源。
- 不可抢占资源(nonpreemptable resource) :在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来。
总的来说,死锁和不可抢占的资源有关,有关可抢占的资源的潜在死锁通常可以通过在进程之间重新分配资源化解。
资源死锁的四个必要条件:
- 互斥条件。每个资源要么已经分配给一个进程,要么就是可用的。
- 占有和等待条件。已经得到了某个资源的进程可以再请求新的资源。
- 不可抢占条件。已经分配给一个进程的资源不可能强制性地被抢占,它只能被占有它的进程显示地释放。
- 环路等待条件。死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源。