死锁:
死锁是指两个或两个以上的进程进在执行过程中,由于资源竞争或由于相互通信而造成的一种阻塞式现象,如果没有外力影响。那么它们将永远的持续下去, 此事称系统产生死锁现象,这种永远互相在等待的进程成为死锁。
死锁的四个产生必要条件:
1、互斥条件:进程对所分配到的资源具有排他性使用,一段时间内某资源只由一个进程所占有。若此时还有其他请求资源,则请求者只能等待,知道占有资源的进程使用完毕释放。
2、请求和保持条件:进程已经保持至少一个资源,但是又提出心得资源请求,而该资源已经被其他进程所占有,此时请求进程阻塞,但又对自己已经获得的其他资源保持不变。
3、不可剥夺条件:进程获得的资源,在未使用完之前,不能被剥夺,只能在使用完时有自己释放。
4、环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。
死锁的产生原因:
1、竞争资源引起进程死锁:当系统中供多个进程共享的资源例打印机、公用队列等,其数目不足以满足进程的需要时,会引起诸进程对资源的竞争而产生死锁。
2、可剥夺与不可剥夺资源
3、竞争不可剥夺资源:当系统所配置的不可剥夺资源,由于数量不能满足诸进程运行的需要时,会使进程在运行过程中,因争夺这些资源而陷入僵局。
4、竞争临时资源:打印机等为可顺序重复使用性资源,称为永久资源。还有一种临时资源,就是由一个进程产生,被另外一个进程使用,短时间内后便没有用的资源,也称为消耗性资源。
处理死锁的基本方法:
1.死锁预防:通过设置某些限制条件,去破坏死锁的四个条件中的一个或几个条件,来预防发生死锁。但由于所施加的限制条件往往太严格,因而导致系统资源利用率和系统吞吐量降低。
2.死锁避免:允许前三个必要条件,但通过明智的选择,确保永远不会到达死锁点,因此死锁避免比死锁预防允许更多的并发。
3.死锁检测:不须实现采取任何限制性措施,而是允许系统在运行过程发生死锁,但可通过系统设置的检测机构及时检测出死锁的发生,并精确地确定于死锁相关的进程和资源,然后采取适当的措施,从系统中将已发生的死锁清除掉。
4.死锁解除:与死锁检测相配套的一种措施。当检测到系统中已发生死锁,需将进程从死锁状态中解脱出来。常用方法:撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程。死锁检测盒解除有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
死锁预防:破坏死锁的四个条件中的一个或几个。
(1)互斥:它是设备的固有属性所决定的,不仅不能改变,还应该加以保证。
(2)占有且等待:
为预防占有且等待条件,可以要求进程一次性的请求所有需要的资源,并且阻塞这个进程直到所有请求都同时满足。这个方法比较低效。
(3)不可抢占:
预防这个条件的方法:
*如果占有某些资源的一个进程进行进一步资源请求时被拒绝,则该进程必须释放它最初占有的资源。
*如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另外一个进程,要求它释放资源。
(4)循环等待:通过定义资源类型的线性顺序来预防。
*如果一个进程已经分配了R类资源,那么接下来请求的资源只能是那些排在R类型之后的资源类型。该方法比较低效。
网友评论