死锁:死锁是指两个或两个以上的进程进在执行过程中,由于资源竞争或由于相互通信而造成的一种阻塞式现象,如果没有外力影响。那么它们将永远的持续下去, 此事称系统产生死锁现象,这种永远互相在等待的进程成为死锁。
死锁的四个产生必要条件:
1、互斥条件:进程对所分配到的资源具有排他性使用,一段时间内某资源只由一个进程所占有。若此时还有其他请求资源,则请求者只能等待,直到占有资源的进程使用完毕释放。
2、请求和保持条件:进程已经保持至少一个资源,但是又提出新的资源请求,而该资源已经被其他进程所占有,此时请求进程阻塞,但又对自己已经获得的其他资源保持不变。
3、不可剥夺条件:进程获得的资源,在未使用完之前,不能被剥夺,只能在使用完时有自己释放。
4、环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。
死锁的产生原因:
1、竞争资源引起进程死锁:当系统中供多个进程共享的资源例打印机、公用队列等,其数目不足以满足进程的需要时,会引起诸进程对资源的竞争而产生死锁。
2、可剥夺与不可剥夺资源
3、竞争不可剥夺资源:当系统所配置的不可剥夺资源,由于数量不能满足诸进程运行的需要时,会使进程在运行过程中,因争夺这些资源而陷入僵局。
4、竞争临时资源:打印机等为可顺序重复使用性资源,称为永久资源。还有一种临时资源,就是由一个进程产生,被另外一个进程使用,短时间内后便没有用的资源,也称为消耗性资源。
解决思索问题的算法:
有序资源分配法
按照某种规则系统中的所有资源统一编号(例如打印机为1,磁带机为2 、磁盘为3等)申请时必须以上升的次序。
系统要求申请进程:1、对它所必须使用的而且属于同一类的所有资源,必须一次申请完;
2、在申请不同类资源时,必须按照各类设备的编号一次申请。
采用有序资源分配法:R1的编号为1,R2的编号为2;
PA:申请次序应该是:R1,R2
PB:申请次序应该是:R2,R1
银行家算法:
避免死锁算法最有代表的就是Dijkstra.E.W于1968年提出的银行家算法,是避免死锁的一种重要方法,防止死锁的机构只要确保上述资格条件之一不出现,则系统就不会出现死锁问题。在操作系统中研究资源分配策略时也有类似的问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程的使用。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。
把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态、完成态。当进程处于等待状态时,表示系统不能完全满足该进程当时的资源申请。银行家算法进行资源分配可以避免死锁问题。