什么是死锁:
死锁的规范定义是集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,那么该组进程是死锁的;通俗一点说就是:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
此处附上进程转换状态图:
图1 进程状态图
死锁产生的条件:
死锁的发生必须具备以下四个条件:
1、互斥条件。进程所分配的资源进行排他性使用,也就是说在某一段时间内资源只能由某一进程占用,如果其他进程想要使用该资源,则只能等待,知道占用进程释放相应资源。
2、请求资源和保持现有资源。意思是说某一进程当前至少有一个资源,而又申请其他的资源,其他资源又被其他的进程占用,此时该进程等待其他进程释放资源,自己原有的资源也不释放。
3、不剥夺条件。指的是进程占用的资源在没有释放之前,其他进程请求该资源只能等待,不能剥夺,只能在使用完的时候占用进程自己释放。
4、环路等待条件。指在发生死锁的状态下,必然存在一个进程——资源的环形链,即即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
死锁产生的原因:
死锁产生的原因主要有以下三个:
1、资源竞争引起的进程死锁。
当系统中供多个进程共享的资源其数目不足以满足各个进程的需要时,则会引起多个进程对资源的竞争而引起死锁。
2、可剥夺资源和不可剥夺资源。系统中的资源可以分为两类,一类是可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺。另外一类是不可剥夺资源,请求进程只能等待相应的占用进程主动释放资源才能使用该不可剥夺资源,当系统配置的不可剥夺资源不能满足进程的需要的时候,会使进程在争夺不可剥夺资源的时候发生死锁。
3、竞争临时资源。打印机作为一种系统分配的共享资源属于可顺序重复使用型资源。除此之外还有一种临时资源,其是由一个进程产生,另外一个进程使用,短时间后便无用了的资源,故也称为消耗性资源,如:信号、消息等,他也可能引起死锁。
死锁的预防:
1、有序资源分配法。