死锁问题(DEADLOCK

死锁问题(DEADLOCK

ID:46816444

大小:285.00 KB

页数:19页

时间:2019-11-28

死锁问题(DEADLOCK_第1页
死锁问题(DEADLOCK_第2页
死锁问题(DEADLOCK_第3页
死锁问题(DEADLOCK_第4页
死锁问题(DEADLOCK_第5页
资源描述:

《死锁问题(DEADLOCK》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、3.9死锁问题(DEADLOCK)4.6.1概述4.6.2死锁的预防4.6.3死锁的检测4.6.4死锁的避免4.6.5解决死锁问题的综合方法返回3.9.1概述可重用资源(reusableresource):每个时刻只有一个进程使用,但不会耗尽,在宏观上各个进程轮流使用。如CPU、主存和辅存、I/O通道、外设、数据结构如文件、数据库和信号量。有可能剥夺资源:由高优进程剥夺低优进程,或OS核心剥夺进程。死锁是指系统中多个进程无限制地等待.1.死锁发生原因对互斥资源的共享,并发执行的顺序不当可重用资源死锁死锁发生:双方都拥有部分资源,同时在请求对方已

2、占有的资源。如次序:P1P2P1P22.死锁发生条件只有4个条件都满足时,才会出现死锁。互斥:任一时刻只允许一个进程使用资源请求和保持:进程在请求其余资源时,不主动释放已经占用的资源非剥夺:进程已经占用的资源,不会被强制剥夺环路等待:环路中的每一条边是进程在请求另一进程已经占有的资源。3.9.2死锁的预防预防死锁的两种策略:预先静态分配法:(针对死锁的第2个条件)预先分配所需全部资源,保证不等待资源;降低了对资源的利用率,降低进程的并发程度;有可能无法预先知道所需资源;有序资源使用法:(针对死锁的第4个条件)把资源分类按

3、顺序排列,保证不形成环路;限制进程对资源的请求;资源的排序占用系统开销;预防是采用某种策略,限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的必要条件。3.9.3死锁的检测有向图G的顶点为资源或进程,从资源R到进程P的边表示R已分配给P,从进程P到资源R的边表示P正因请求R而处于等待状态。有向图的循环表示死锁的存在。资源分配图的简化:删除不处于等待状态的进程(即没有从该进程出发的边)。依次删除当前的叶顶点。不可简化(简化后还存在边)的资源分配图存在死锁,其中的有边进程为死锁进程。保存资源的请求和分配信息,利用某种算法对这些信息加以检查,以

4、判断是否存在死锁。死锁检测算法主要是检查是否有循环等待。1.资源分配图(resourceallocationgraph)算法2.死锁检测的缺点通过撤消代价最小的进程,以解除死锁。挂起某些死锁进程,并抢占它的资源,以解除死锁。在解除死锁时,常常造成进程终止或重新起动(重新申请资源)3.死锁的恢复撤消进程的原则:进程优先级;系统会计过程给出的运行代价;3.9.4死锁的避免在分配资源时判断是否会出现死锁,如不会死锁,则分配资源。1.银行家算法(Dijkstra,1965)问题一个银行家把他的固定资金(capital)贷给若干顾客。只要不出现一个顾客借

5、走所有资金后还不够,银行家的资金应是安全的。银行家需一个算法保证借出去的资金在有限时间内可收回。2.银行家算法假定顾客分成若干次进行;并在第一次借款时,能说明他的最大借款额。具体算法:顾客的借款操作依次顺序进行,直到全部操作完成;银行家对当前顾客的借款操作进行判断,以确定其安全性(能否支持顾客借款,直到全部归还);安全时,贷款;否则,暂不贷款。3.银行家算法的特点允许互斥、部分分配和不可抢占,可提高资源利用率;要求事先说明最大资源要求,在现实中很困难;4.6.5解决死锁问题的综合方法资源归类:将各种资源归入若干个不同的资源类(resourceg

6、roup)中,如:外存交换区空间,进程资源(可分配的设备,如磁带机,文件),主存空间,内部资源(如I/O通道)资源排序:在不同资源类之间规定次序,对不同资源类中的资源采用线性按序申请的方法针对性优化:对同一资源类中的资源,采用适当的方法。如:进程资源--避免,外存交换区空间,主存,内部资源--预防进程其他方面的举例4.7.1UNIX4.7.2WindowsNT返回UNIX系统加载:加载自举程序(磁盘中的引导块)--加载UNIX核心映象(几百KB到几MB的文件)--核心初始化(初始化设备驱动程序,建立OS核心的数据结构)Solaris2.3中核心

7、为/kernel/unix(通过/ufsboot载入);RedHatLinux2.0.18中为/boot/vmlinuz建立0、1号进程:建立0号进程(始终运行于核心态,完成内外存交换)--建立1号进程init(普通进程,系统中其余进程都是它的直接或间接后代)运行起动脚本(通常是一些shell程序,用于创建或终止特定的进程)--为每个终端创建监控进程Solaris2.3的起动脚本在/etc/rc*文件和目录,以及/etc/init.d目录;RedHatLinux2.0.18中为/etc/rc*文件和目录用户可以对起动脚本进行修改1.系统引导2.

8、终端登录序列init(1号进程)通过fork和exec运行终端监控程序gettygetty在Solaris2.3中为ttymongetty检测到终端开

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。