死锁

来源:互联网 发布:mac 预览 下一张 编辑:程序博客网 时间:2024/06/02 03:29

1.死锁:

     多道程序并发执行时(多任务系统),一个/多个进程等待资源,而资源又被进程本身或其他进程占用着。(永久性等待)

2.产生死锁的四个必要条件

 (1)互斥条件。

     进程对所分配到的资源进行排它性使用,即在一段时间内,某资源只由一个进程占用。如果此时还有其他进程请求该资源,则请求者只能等待,直到占有该资源的进程用完后释放。

(2)请求和保持(占有且等待)。

     指该进程至少保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程阻塞,但又对自己已经获得的资源保持不放。

(3)不剥夺条件(不可抢占)。

     进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

(4)环路等待(循环等待)。

     若干进程间形成一种首尾相连的循环等待资源关系。(存在一个封闭的进程链,使得每个进程至少占有此链中下一个进程所需要的一个资源)

3.产生死锁的原因

     (1)竞争资源

     (2)进程间推进顺序非法(请求和释放资源顺序不当)

4.处理死锁的方法

     (1)预防死锁

                    破坏产生死锁的4个必要条件中的一个或多个

                    优点:易实现

                    缺点:所施加的限制条件过于严格,肯能导致系统资源利用率和系统吞吐量降低

     (2)避免死锁

                    在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免发生死锁

                    优点:只需事先施加较弱的限制条件,便可获得较高的资源利用率和系统吞吐量

                    缺点:实现上有一定难度

     (3)检测死锁

                    通过系统所设置的检测机构,及时的检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当地措施,从系统中将已发生的死锁清除掉。

     (4)解除死锁

                    与检测死锁配套使用。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行

                    优点:检测和接触措施有可能使系统获得较好的资源利用率和吞吐量

                    缺点:实现上难度大

5.预防死锁

          使四个必要条件中的第2、3、4的条件之一不能成立,来避免发生死锁。(至于必要条件1,它由设备的固有特性决定,不仅不能改变,还应加以保证)

(1)摒弃“请求和保持”条件

          此方法中,系统规定所有进程在运行之前,都必须一次性地申请其在整个运行过程中的全部资源

          优点:简单、易实现、安全

          缺点:恶化系统资源利用率;使进程延迟运行

(2)摒弃“不剥夺”条件

          此方法中,进程是逐个提出对资源的要求。当一个已经保持了某些资源的进程,再提出新的资源请求不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请

          优点:实现起来复杂、付出的代价大

          缺点:一个资源在使用一段时间后,它的被迫释放可能造成前段工作的失效,即使采取某些防范措施,还会使进程前后两次运行的信息不连续;因反复申请和释放资源,使进程的执行被无限的推迟,这不仅延迟了进程的周转时间,还增加了系统开销,减低系统吞吐量

(3)摒弃“环路等待”条件

          此方法中,系统将所有资源按类型线性排队,并赋予不同序号。如,令输入机序号为1,打印机序号为2,磁带序号为3,磁盘序号为4。所有进程对资源的请求必须严格按照资源序号递增的次序提出。此策略中,总有一个进程占据了较高序号的资源,此后它继续申请的资源必然是空闲的,因而进程可以一直向前推进。

          优点:资源利用率和系统吞吐量有较明显改善

          缺点:各类资源所分配的序号相对稳定,限制新型设备的增加;作业(进程)使用各类资源的顺序与系统规定的顺序不同,造成对资源的浪费;这种按规定次序申请的方法,限制了用户简单、自主地编程。

6.避免死锁

          防止系统进入不安全状态,从而避免死锁的发生(牺牲资源利用率 )

          死锁避免确保永远不会到达死锁点,此过程中,是否允许当前资源分配请求是通过判断该请求是否可能导致死锁来决定的。

          避免方法:

                         (1)如果一个进程的请求会导致死锁,则不启动该进程(进程启动拒绝)

                         (2)如果一个进程增加的资源请求会导致死锁,则不允许此分配(资源分配拒绝,即银行家算法)

          安全状态:系统按某种进程顺序,为每个进程Pi分配所需资源,直至满足每个进程对资源的最大需求,使每个进程都能顺利完成。

优点:不需要死锁预防中的抢占和回滚进程,并且比死锁预防的限制少

缺点:必须事先声明每个进程请求的最大资源;分配的资源数目必须是固定的;在占有资源时,进程不能退出;考虑的进程必须是无关的,即它们执行的顺序必须没有任何同步要求的限制

7.检测死锁

          保存有关资源的请求和分配信息

          提供一种算法,利用这些信息检测系统是否已经进入死锁状态


本文出自 “追寻内心的声音” 博客,请务必保留此出处http://ljy789.blog.51cto.com/10697684/1768297

0 0