1 死锁的概念
指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象
,若无外力作用,它们都将无法推进下去
2 死锁产生的原因
2.1 产生死锁的四个必要条件
1、互斥使用
,即当资源被一个线程使用(占有)时,别的线程不能使用
2、不可抢占
,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。
3、请求和保持
,即当资源请求者在请求其他的资源的同时,保持对原有资源的占有。
4、循环等待
,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。
2.2 死锁产生原因
竞争资源引起进程死锁
系统资源不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。
竞争不可剥夺资源
系统中的资源可以分为两类:
可剥夺资源
,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺。例如,优先权高的进程可以剥夺优先权低的进程的处理机。
又如,内存区可由存储器管理程序,把一个进程从一个存储区移到另一个存储区,此即剥夺了该进程原来占有的存储区,甚至可将一进程从内存调到外存上,可见,CPU和主存均属于可剥夺性资源。不可剥夺资源
,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。
系统中所配置的不可剥夺资源,由于它们的数量不能满足诸进程运行的需要
,会使进程在运行过程中,因争夺这些资源而陷于僵局。
系统中只有一台打印机R1和一台磁带机R2,可供进程P1和P2共享。
假定PI已占用了打印机R1,
P2已占用了磁带机R2,
若P2继续要求打印机R1,P2将阻塞;
P1若又要求磁带机,P1也将阻塞。
于是,在P1和P2之间就形成了僵局,两个进程都在等待对方释放自己所需要的资源,但是它们又都因不能继续获得自己所需要的资源而不能继续推进,从而也不能释放自己所占有的资源,以致进入死锁状态。
竞争临时资源
临时资源:指由一个进程产生,被另一个进程使用,短时间后便无用的资源,故也称为消耗性资源,如硬件中断、信号、消息、缓冲区内的消息等,它也可能引起死锁。
3 避免(预防)和解决死锁
3.1 死锁预防方法
破坏死锁产生的4个必要条件来 预防死锁,由于资源互斥是资源使用的固有特性是无法改变的。
破坏“不可剥夺”条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源。
破坏”请求与保持条件“:采用资源预先分配策略,即进程运行前申请全部资源,满足则运行,不然就等待,这样就不会占有且申请。
破坏“循环等待”条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源
3.2 解决死锁的方法
1、预防死锁
:通过设置一些限制条件,去破坏产生死锁的必要条件
2、避免死锁
:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁
3、检测死锁
:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉
4、解除死锁
:该方法与检测死锁配合使用