死锁问题(DEADLOCK.ppt_第1页
死锁问题(DEADLOCK.ppt_第2页
死锁问题(DEADLOCK.ppt_第3页
死锁问题(DEADLOCK.ppt_第4页
死锁问题(DEADLOCK.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.9 死锁问题(DEADLOCK),4.6.1 概述 4.6.2 死锁的预防 4.6.3 死锁的检测 4.6.4 死锁的避免 4.6.5 解决死锁问题的综合方法,返回,3.9.1 概述,可重用资源(reusable resource):每个时刻只有一个进程使用,但不会耗尽,在宏观上各个进程轮流使用。如CPU、主存和辅存、I/O通道、外设、数据结构如文件、数据库和信号量。有可能剥夺资源:由高优进程剥夺低优进程,或OS核心剥夺进程。,死锁是指系统中多个进程无限制地等待.,1. 死锁发生原因,对互斥资源的共享,并发执行的顺序不当,可重用资源死锁,死锁发生:双方都拥有部分资源,同时在请求对方已占有的资源。如次序:P1 P2 P1 P2,2. 死锁发生条件,只有4个条件都满足时,才会出现死锁。 互斥:任一时刻只允许一个进程使用资源 请求和保持:进程在请求其余资源时,不主动释放已经占用的资源 非剥夺:进程已经占用的资源,不会被强制剥夺 环路等待:环路中的每一条边是进程在请求另一进程已经占有的资源。,3.9.2 死锁的预防,预防死锁的两种策略: 预先静态分配法:(针对死锁的第2个条件)预先分配所需全部资源,保证不等待资源; 降低了对资源的利用率,降低进程的并发程度; 有可能无法预先知道所需资源; 有序资源使用法:(针对死锁的第4个条件)把资源分类按顺序排列,保证不形成环路; 限制进程对资源的请求; 资源的排序占用系统开销;,预防是采用某种策略,限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的必要条件。,3.9.3 死锁的检测,有向图G的顶点为资源或进程,从资源R到进程P的边表示R已分配给P,从进程P到资源R的边表示P正因请求R而处于等待状态。有向图的循环表示死锁的存在。 资源分配图的简化: 删除不处于等待状态的进程(即没有从该进程出发的边)。 依次删除当前的叶顶点。 不可简化(简化后还存在边)的资源分配图存在死锁,其中的有边进程为死锁进程。,保存资源的请求和分配信息,利用某种算法对这些信息加以检查,以判断是否存在死锁。死锁检测算法主要是检查是否有循环等待。,1. 资源分配图(resource allocation graph)算法,2. 死锁检测的缺点,通过撤消代价最小的进程,以解除死锁。 挂起某些死锁进程,并抢占它的资源,以解除死锁。,在解除死锁时,常常造成进程终止或重新起动(重新申请资源),3. 死锁的恢复,撤消进程的原则: 进程优先级; 系统会计过程给出的运行代价;,3.9.4 死锁的避免,在分配资源时判断是否会出现死锁, 如不会死锁,则分配资源。,1. 银行家算法(Dijkstra, 1965)问题,一个银行家把他的固定资金(capital)贷给若干顾客。只要不出现一个顾客借走所有资金后还不够,银行家的资金应是安全的。银行家需一个算法保证借出去的资金在有限时间内可收回。,2. 银行家算法,假定顾客分成若干次进行;并在第一次借款时,能说明他的最大借款额。 具体算法: 顾客的借款操作依次顺序进行,直到全部操作完成; 银行家对当前顾客的借款操作进行判断,以确定其安全性(能否支持顾客借款,直到全部归还); 安全时,贷款;否则,暂不贷款。,3. 银行家算法的特点,允许互斥、部分分配和不可抢占,可提高资源利用率; 要求事先说明最大资源要求,在现实中很困难;,4.6.5 解决死锁问题的综合方法,资源归类:将各种资源归入若干个不同的资源类(resource group)中,如:外存交换区空间,进程资源(可分配的设备,如磁带机,文件),主存空间,内部资源(如I/O通道) 资源排序:在不同资源类之间规定次序,对不同资源类中的资源采用线性按序申请的方法 针对性优化:对同一资源类中的资源,采用适当的方法。如: 进程资源避免, 外存交换区空间,主存,内部资源预防,进程其他方面的举例,4.7.1 UNIX 4.7.2 Windows NT,返回,UNIX,系统加载:加载自举程序(磁盘中的引导块)加载UNIX核心映象(几百KB到几MB的文件)核心初始化(初始化设备驱动程序,建立OS核心的数据结构) Solaris 2.3中核心为/kernel/unix(通过/ufsboot载入);RedHat Linux 2.0.18中为/boot/vmlinuz 建立0、1号进程:建立0号进程(始终运行于核心态,完成内外存交换)建立1号进程init(普通进程,系统中其余进程都是它的直接或间接后代) 运行起动脚本(通常是一些shell程序,用于创建或终止特定的进程)为每个终端创建监控进程 Solaris 2.3的起动脚本在/etc/rc*文件和目录,以及/etc/init.d目录;RedHat Linux 2.0.18中为/etc/rc*文件和目录 用户可以对起动脚本进行修改,1. 系统引导,2. 终端登录序列,init(1号进程)通过fork和exec运行终端监控程序getty getty在Solaris 2.3中为ttymon getty检测到终端开启,对终端进行初始化并读取终端参数,提示输入用户名 输入用户名之后,getty通过exec运行login程序 login在/etc/passwd文件中查找用户名,提示输入口令 输入口令之后,login设置用户的当前工作目录,改变进程的gid和 uid(此前的init, getty和login均具有超级用户的uid和gid,改变时须最后改uid) 通过exec执行用户的shell程序并运行用户的登录shell脚本 init总是等待子进程(即getty, login和shell)终止,在用户退出而其shell终止后,init重新fork和exec运行终端监控程序getty,3. 孤儿进程(orphan),父进程先终止,则正在运行的子进程变为孤儿进程。系统自动将孤儿进程的父进程指向1号进程。此后,由1号进程通过wiat等待孤儿进程终止,并回收其PCB表项。 若子进程先终止,而父进程不通过wait()系统调用回收其PCB,则子进程变为“僵化进程“(ps命令列出),直到父进程终止时该子进程的PCB才被释放。,4. 守护进程(daemon),在后台执行,与控制终端脱离,不需通过用户登录。通常是:等待某个事件发生(如接受网络连接请求),或周期性地执行特定任务(如cron进程定期执行指定的操作),Windows NT系统引导序列,预引导: 加电自检 加载硬盘主引导区 加载分区中的引导扇区 加载ntldr文件(NT loader) NT系统引导: 起动最小文件系统Minifile 读入boot.ini文件并据此显示起动选择项 加载用户选定的操作系统(如选择MS DOS则加载bootsect.dos) 运行 加载ntoskrnl.exe,接收收集的硬件配置信息并初始化Windows NT,NT系统建立: 加载HAL和kernel(依据Registry加载适当的设备驱动程序) 初始化kernel和驱动程序;保存CurrentControlSet,创建但不保存CloneControlSet;利用收集的信息建立注册硬件表(蓝屏blue screen) 起动任务管理程序smss.exe,加载服务子系统(默认只需要Win32) 加载起动模式为“自动“的后台服务services 系统准备(出现Welcome窗口) 用户注册成功,则将当前设置复制到Last Known Good配置(可以在下次系统引导时按space键来选用此配置),小结,顺序执行和并发执行 进程的定义(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论