死锁:两个或两个以上的进程/线程在运行过程中争夺资源而造成的一种僵局,导致这些进程/线程都无法向前推进,这时就形成了死锁
eg:有一个狭窄的路口,A车与B车相遇了,A在等B避让,B也在等A避让,这时候就形成了死锁。
死锁产生的原因
先看两个概念:可抢占资源和不可抢占资源
可抢占资源:指某进程在获得这类资源后,该资源可以再被其他进程或系统抢占,对于这类资源是不会引起死锁的,eg:CPU和主存
不可抢占资源:一但系统把某资源分配给该进程后,就不能将它强制收回,只能等进程s使用完后自行释放。eg:打印机
死锁产生的原因:
(1)竞争不可抢占资源; eg:共享文件时引起死锁,系统中有两个进程 P1 和 P2 , 它们都准备写两个文件 F1 和 F2,而这两个文件都属于可重用的不可抢占资源,
若进程 P1 在打开 F1的的同时,进程P2 打开了F2。当P1想打开F2的时候,由于F2被占用而阻塞;当P2想打开F1时,由于F1被占用而阻塞。此时就会无限等待下去,形成死锁。
(2)进程推进顺序不当时也会引起死锁
产生死锁的四个必要条件
(1)互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程要访问,只能等待,直至占有该资源的进程使用完成后释放该资源。
(2)请求和保持条件:进程获得一定资源后,又对其他资源发出请求,但是该资源可能被其他进程占有,此时请求阻塞,但又对自己获得的资源保持不释放。
(3)不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完成后自己释放。
(4)循环等待条件:是指进程发生死锁后,必然存在一个进程-资源之间的环形链
处理死锁的基本方法
(1)预防死锁:通过设置一些限制条件,去破坏一个或多个死锁的必要条件。
(2)避免死锁:在资源分配的过程中,使用某种发放避免系统进入不安全的状态,从而避免死锁
(3)检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,讲死锁清除掉
(4)解除死锁:当检测出死锁后,便采取适当措施将进程从死锁状态中解脱出来。