Linux 进程管理 --------------死锁
死锁在多道程序系统中,多个进程序并发执行,共享系统资源,从而提高了资源利用率和系统吞吐量,但可能发生一种危险----死锁。所谓死锁,是指多个进程因竞争资源而形成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。(1)产生死锁的原因和必要条件A、产生死锁的原因产生死涣的主要原因可归结为以下两点(1)竞争资源(2)进程推进顺序不当。B、产生死锁的必要条件(1)互斥条件一个资源在一段时间内只
死锁
在多道程序系统中,多个进程序并发执行,共享系统资源,从而提高了资源利用率和系统吞吐量,但可能发生一种危险----死锁。所谓死锁,是指多个进程因竞争资源而形成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。
(1)产生死锁的原因和必要条件
A、产生死锁的原因
产生死涣的主要原因可归结为以下两点
(1)竞争资源
(2)进程推进顺序不当。
B、产生死锁的必要条件
(1)互斥条件
一个资源在一段时间内只能被一个进程所使用,具有排它性。
(2)请求和保持条件
一个进程在请求新资源而阻塞时,对已获得资源又保持不放。
(3)不剥夺条件
进程已获得的资源,在未使用完之前不能被剥夺,只能在使用完时由自己释放。
(4)环路等待条件
在发生死锁时,必然存在一个进程--------资源的环形链.即进程集合{P1,p2,....,Pn}中的P1正在等待P2占用的资源,P2正在等待P3占用的资源,....,Pn正在等待P1占用的资源.
只要同时具备上述4个必要条件,系统就会发生死锁,只要上述条件之不一满足,系统就不会发生死锁.
C、处理死锁的方法
由于死锁状态的出现会给整个系统带来严重的后果,所以如何解决死锁问题引起了人们的普遍关注。目前常用的方法有以下三种:
(1)预防死锁
为了使系统中不发生死锁现象,在系统设计初期即选取择一些限制条件,来破坏产生死锁的四个必要条件之一或其中几个。这样,系统中就不会出现死锁现象。这种方法对预防死锁的发生非常有效,但有可能降低系统资源的利用率。
(2)避免死锁
由于一方面预防死锁的方法会降低系统资源利用率,另一方面死锁的必要条件是存在示必就一定会使系统发生死锁,因此为提高系统资源的利用率,可采用避免死锁。避免死锁并不严格限制死锁必要条件的存在,而是在资源的动态分配过程中,使用某种方法去防止系统进入不安全状态,从而避免死锁的紧终出现。
(3)检测和解除死锁
由于死锁产生的概率总是比较小的,所以在一些相对简单的系统中,为节省预防或避免死锁中所增加的系统开销,系统中允许出现死锁状态。在这种系统中,专门设置了一个检测机构,可以随时检测出死锁的发生,并能确定与死锁有关的进程和资源,然后采用适当的方法解除系统中的死锁状态。
常用的解除死锁的方法有两种:一是强制性地撤销一些死锁进程,并剥夺它们的资源给其他的时程;另一种是使用一个有效的挂起和解除挂起机构来挂起一些进程,以便从被挂起进程中剥夺一些资源,用来解除死锁。
预防死锁
(1)打破“请求和保持”条件
打破“请求和保持”条件,即把进程运行中所要求的所有资源在进程开始动行之前,一次性地分配给进程,只要有一种资源不能满足,该进程就必须等待。这样,进程在运行过程中就不再需要新的资源,这种方法又称为预先静态分配法。
(2)打破“不剥夺”条件
打破“不剥夺”条件,即强迫那些请求新资源而没有立即得到满足的进程释放它已保持的其他资源。这意味着一个进程在运行过程可以暂时释放已占有的资源,即允许其他进程剥夺使用该资源,从而破坏了“不剥夺”条件的出现。
(3)打破“环路等待”条件
死锁产生时,一定存在一种进程和资源的循环链。打破“环路等待”条件就是在资源的分配过程中,对资源的请求做出某种限制,使环路不可能出现。
更多推荐
所有评论(0)