栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

os 死锁的预防

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

os 死锁的预防

预防死锁的方法是通过破坏产生死锁的四个必要条件中的一个或几个,以避免发生死锁。由于互斥条件是非共享设备所必须的,不仅不能改变,还应加以保证,因此主要是破坏产生死锁的后三个条件。
我们先来回顾下是哪三个条件:

请求和保持条件
进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程被阻塞,但对自己己获得的资源保持不放。不可抢占条件
进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完时由自己释放。循环等待条件
在发生死锁时,必然存在一个进程-资源的循环链,即进程集合{P0,P1,P2,…Pn}中的 P0正在等待一个P1占用的资源,P1正在等待 P2占用的资源,……, Pn正在等待已被P0占用的资源。


破坏“请求和保持”条件

为了能破坏“请求和保持”条件,系统必须保证做到:当一个进程在请求资源时,它不能持有不可抢占资源。该保证可通过如下两个不同的协议实现:

1.第一种协议

该协议规定,所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源。此时若系统有足够的资源分配给某进程,便可把其需要的所有资源分配给它。这样,该进程在整个运行期间,便不会再提出资源要求,从而破坏了“请求”条件。系统在分配资源时,只要有一种资源不能满足进程的要求,即使其它所需的各资源都空闲也不分配给该进程,而让该进程等待。由于该进程在等待期间未占有任何资源,于是破坏了“保持”条件,从而可以预防死锁的发生。
第一种协议的优点是简单、易行且安全。
但缺点也极其明显:

(1)资源被严重浪费,严重地恶化了资源的利用率。

进程在开始运行时就一次性地占用了整个运行过程所需的全部资源,其中有些资源可能仅在运行初期或运行快结束时才使用,甚至根本不使用。

(2)使进程经常会发生饥饿现象。

因为仅当进程在获得了其所需的全部资源后才能开始运行,这样就可能由于个别资源长期被其它进程占用,而致使等待该资源的进程迟迟不能开始运行,而个别资源有可能仅在进程运行到最后才需要,如打印机往往就是如此。

2.第二种协议

该协议是对第一种协议的改进,它允许一个进程只获得运行初期所需的资源后,便开始运行。进程运行过程中再逐步释放已分配给自己的、且已用毕的全部资源,然后再请求新的所需资源。我们可以通过一个具体例子来说明,第二种协议比第一种协议要好。例如有一个进程,它所要完成的任务是,先将数据从磁带上复制到磁盘文件上,然后对磁盘文件进行排序,最后把结果打印出来。在采用第一种协议时,进程必须在开始时就请求磁带机、磁盘文件和打印机。然而打印机仅在最后才会用到,既影响到其利用率,还会影响到其它进程的运行。此外,又如磁带机和磁盘文件虽然空闲,但因打印机已分配给其它进程,因而进程还需要等待。
在采用第二种协议时,进程在开始时只需请求磁带机、磁盘文件,然后就可运行。等到全部磁带上的数据已复制到磁盘文件中并已排序好后,便可将磁带机和磁盘文件释放掉,再去请求磁盘文件和打印机。这不仅能使进程更快地完成任务,提高设备的利用率,还可减少进程发生饥饿的机率。


破坏“不可抢占”条件

为了能够破坏“不可抢占”条件,协议中规定,当一个已经保持了某些不可抢占资源的进程,提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着进程已占有的资源会被暂时地释放,或者说是被抢占了,从而破坏了“不可抢占”条件。
该方法实现起来比较复杂,且需付出很大的代价。因为一个不可抢占的资源如打印机、 CD 刻录机等在使用一段时间后被抢占,可能会造成进程前一阶段工作的失效,即使是采取了某些防范措施,也还会使进程前后两次运行的信息不连续。这种策略还可能因为反复地申请和释放资源致使进程的执行被无限地推迟,这不仅延长了进程的周转时间,而且也增加了系统开销,降低了系统吞吐量。


破坏“循环等待”条件

一个能保证“循环等待”条件不成立的方法是,对系统所有资源类型进行线性排序,并赋予不同的序号。设 R =( R1,R2,R3,…,Rm)为资源类型的集合,为每个资源类型赋予唯一的序号。如果系统中有磁带驱动器、硬盘驱动器、打印机,则函数 F 可按如下形式来定义:
F ( tape drive )=1;
F ( disk drive )=5;
F ( printer )=12;
在对系统所有资源类型进行线性排序后,便可采用这样的预防协议:规定每个进程必须按序号递增的顺序请求资源。一个进程在开始时,可以请求某类资源 Ri的单元。以后,当且仅当 F (Rj)> F (Ri)时,进程才可以请求资源Rj的单元。如果需要多个同类资源单元,则必须一起请求。例如,当某进程需要同时使用打印机和磁带机时,由于磁带机序号低,而打印机序号高,故必须先请求磁带机,再请求打印机。假如某进程已请求到一些序号较高的资源,后来它又想请求一个序号低的资源时,它必须先释放所有具有相同和更高序号的资源后,才能申请序号低的资源。在采用这种策略后所形成的资源分配图中,不可能再出现环路,因而破坏了“循环等待”条件。事实上,总有一个进程占据了较高序号的资源,此后它继续申请的资源必然是空闲的,因而进程可以一直向前推进。
在采用这种策略时,应如何来规定每种资源的序号是十分重要的。通常应根据大多数进程需要资源的先后顺序来确定。一般情况下,进程总是先输入程序和数据,继而进行运算,最后将计算结果输出。故可以为输入设备规定较低的序号,如前面是将磁带机定为1,为输出设备规定较高的序号,如把打印机定为12。
这种预防死锁的策略与前两种策略比较,其资源利用率和系统吞吐量都有较明显的改善。但也存在下述问题:首先,为系统中各类资源所规定的序号必须相对稳定,这就限制了新类型设备的增加;其次,尽管在为资源的类型分配序号时,已经考虑到大多数作业在实际使用这些资源时的顺序,但也经常会发生这种情况:作业使用各类资源的顺序与系统规定的顺序不同,造成对资源的浪费。第三,为方便用户,系统对用户在编程时所施加的限制条件应尽量少,然而这种按规定次序申请资源的方法必然会限制用户简单、自主地编程。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/713291.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号