操作系统重点第三章 进程管理整理总结

第三章 进程管理
1.1进程的概念
1.1.1为什么要引入进程
程序并发执行具有如下特征
间断性
失去封闭性
不可再现性
程序的并发可以总结为:一组在逻辑上相互独立的程序或程序段在执行过程中,其执行时间在客观上相互重叠,即是一个程序段的执行尚未结束,领一个程序段的执行已经开始的这种执行方式。
由于程序并发执行,可能会造成结果的不可再现性,所以用“程序”这一概念无法描述程序的并发执行,所以必须引入新的概念——进程来描述程序的并发执行并要对进程进行必要的管理,以保证进程在并发执行时结果可再现。
1.1.2进程的概念
(1)进程是程序的一次执行
(2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动
(3)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
1.1.3进程与程序的区别于联系
(1)进程是一个动态的概念,而程序是一个静态概念。程序是指令的有序集合,没有任何执行的含义。而进程则强调执行过程中,它动态地被创建,并被调度执行后消亡
(2)进程具有并发特征,而程序没有
(3)进程是竞争计算机资源的基本单位,从而其并发行受到系统自己的制约
(4)不同的进程可以包含同一程序,只要该进程所对应的数据集不同
1.2.终止态进程的特征
1、动态性
是进程最基本特征,表现在“它是程序的执行过程,有一定的生命周期,由创建而产生,由调度而执行,因得不到资源而暂停,由撤销而死亡”
动态地产生、变化、消亡
2、并发性
同一时间段内可以同时运行,目的是提高系统资源利用率
3、独立性
独立行是指进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位,凡未建立PCB的程序都不能作为一个独立的单位参与运行,而程序不作为独立单位参加运行。
4、异步性
进程按照各自独立的不可预知的速度向前推进
5、结构特征
PCB、程序段、相关数据段这三部分构成了进程实体
1.3进程状态及其转换
1、就绪态
进程分配到除CPU之外的所有必要资源,只要得到CPU便可立即执行。
2、运行态
进程已经获得CPU,其程序正在执行

3、阻塞态(等待状态)
正在执行的进程由于发生某时间而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即进程的执行收到阻塞
4、创建态
进程正在被创建,尚未转移到就绪态。
首先为一个进程新创建PCB,并填写必要的管理信息,其次,把该进程转入就绪状态并插入就绪队列中。
5、终止态
进程从系统中消失。
首先,等操作系统进行善后处理,将其PCB清零,并将其PCB空间返还系统。
Ex、挂起状态

基本状态间相互转换
就绪态到运行态
处理机空闲,进程调度程序将处理及分配给一个处于就绪状态的进程
运行态到阻塞态
处于运行态的进程在运行过程中需要等到某一事件(I/O请求)发生后才能继续运行,该进程放弃处理机
阻塞态到就绪态
等待的事件已经发生
运行态到就绪态
处于运行状态的进程在其运行过程中,因给他的处理及时间片用完,被迫让出处理机
1.4进程组织
1.4.1进程控制块
1、进程控制块
为描述和控制进程的运行,系统为每个进程定义了一个数据结构——进程控制块PCB,它是进程实体的一部分,是操作系统中最重要的记录型数据结构。PCB中记录了操作系统中所需的、用于描述进程的当前情况及控制进程运行的全部信息。
2、进程控制块作用
是使一个再多到程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
PCB是进程存在的唯一标志。
3、进程控制块中的信息
1、进程标识符信息
(1)内部标识符
(2)外部标识符
2、处理机状态信息(现场信息)
(1)通用寄存器
(2)指令计数器PC
(3)程序状态字PSW
(4)用户栈指针
3、进程调度信息
(1)进程状态
(2)程序优先级
(3)进程调度所需的其他信息
(4)阻塞原因
4、进程控制信息
(1)程序和数据地址
(2)进程同步和通讯机制
(3)资源清单
(4)链接指针
4、进程控制块的组织方式
1、链式
2、索引
1.4.2程序段
指在进程中能被进程调度程序在CPU上执行的程序代码段
1.4.3数据段
一个进程的数据段可以是进程对应的程序加工处理原始数据,也可以是程序执行后产生的中间或最终数据。
将数据和代码分开的三个好处:
可以赋予不同属性,数据可写,代码不可写,保证代码只读性
为了提高CPU内部缓存的命中两次
节省内存
1.5进程控制
1.5.1进程创建
可以借助创建原语来创建新进程,创建者为父进程,该进程是他的子进程,子进程可以继承父进程的所有资源。传建一个进程主要是为新进程创建一个PCB
创建原语的执行过程如下:
1)为新进程分配唯一的进程标识符,并从PCB表项中申请一个空白的PCB。若PCB申请失败,则无法创建进程·
2)为新建立的进程分配资源,为新进程的程序、数据及用户栈分配内存空间。
3)初始化PCB,填写PCB相关表项(如外部名、正文段、数据段的首址、大小、所需资源、优先绞等),将进程的状态设为“就绪”状态。
4)将新进程插入就绪队列。
1.5.2进程终止
撤销原语(Destroy)或终止原语(Termination)用于在一个进程运行终止时,撇销这个进程并释放进程占用的资源。对于树型层次结构的进程,系统撤消原语采用的策略是由父进程发出的。
消原语的执行过程如下:
1)找到被终止进程的PCB,读出进程的状态。
2)将它们从所有的队列中移去。如撤消的进程正在运行,则要调用进程调度程序将处
理分给其它进程。
3)若该进程有子进程,则撤销它的了进程及子进程所有的子孙进程·
4)释放被撤销进程的所有资源(主存、I/O资源、PCB表目)归还操作系统或日还给
其父进程。
1.5.3进程阻塞
当前进程因请求某事件而不能执行时(例如请求I/O而等待I/O完成时、请求系统资源
失败时等),该进程将调用阻塞原语(Block)阻塞自己,使自己由运行态变为阻塞态,暂时
放弃处理机。进程阻塞是进程自身的主动行为。
阻塞原语的执行过程如下:
l)找到将要被阻塞进程的PCB
2)立即停止原来程序的执行,把PCB中的现行状态由运行态改为活动阻塞态,
3)将PCB插入到等待某事件的阻塞队列中,
4)调用进程调度程序进行处理机的重新分配。
1.5.4进程唤醒
当被阻塞的进程所期待的事件发生时(例如I/0完成时),则有关进程和过程(例如I/0
设各处理程序或释放资源的进程等)调用唤醒原语(Wakeup),将阻塞的进程唤醒·
唤醒原语的执行过程如下:
1)在该事件的等待队列中找到相应进程的PCB。
2)将等待该事件的送程从阻塞队列移出,插入到就绪队列中,并改变该进程的状态,
如是活动阻寒态改为活动就绪态,如是静止阻塞态改为静止就绪态。
3)将其PCB插入就绪队列中。
1.5.5进程挂起
调用挂起原语(Suspend)的进程只能挂起它自己或它的子孙,而不能挂起别的族系的
进程。
挂起原语的执行过程如下:
1)找到需要挂起进程的PCB。
2)检查要挂起进程PCB的现行状态,若正处于活动就绪态,便将它改为静止就绪态:如是活动阻塞态则改为静止阻塞态。如是运行态,则将它改为静止就绪态,并调用进程调度
程序重新分配处理机。
1.5.6进程激活
用户进程或父进程通过调用激活原语(Active)将被挂起的进程激活。
激活原语执行过程如下:
1)找到被激活进程的PCB。
2)将进程由外存调入内存。
3)检查被挂起进程PCB中的现行状态,若处于静止就绪态,则将它改为活动就绪态,
若处于静止阻塞态,则将它改为活动阻塞态。
1.5.7进程切换
进程切换是指一个正在运行的进程被中断,操作系统指定另一个进程为运行态,并把控
制权交给这个进程。进程切换可以在操作系统从当前正在运行的进程中获得控制权的任何时
刻发生,由于进程之间不同状态的切换,需要重新分配各种资源,操作系统需要做更多的工进程切换的执行过程如下:
1)决定是否作上下文切换以及是否允许作上下文切换。包括对进程调度原因的检查分
析,以及当前执行进程的资格和CPU执行方式的检查等。
2)保存当前执行进程的上下文,包括程序计数器PC和寄存器PSW等其他寄存器。
3)将进程的PCB移入相应的队列。
4)使用进程调度算法,选择一个处于就绪状态的进程,更新其PCB。
5)更新内存管理的数据结构。
6)恢复或装配所选进程的上下文,将CPU控制权交到新进程手中。
1.6进程通信
为什么进程间要进行通信
1)数据传输:一个进程需要将它的数据发送给另一个进程·
2)资源共享:多个进程间共享同样的资源。
3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发送了某事件。
4)进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制
进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。
1.6.1共享内存系统
在通信进程之间有一块可以直接访问的进程空间,通过对这片共享空间进行读写操作时间进程间的信息交流,对该共享区域进行读写操作时,需要同步互斥工具。(如P操作、V操作)
(相当于钱,不能直接物物交换)
1.6.2消息传递系统
分为直接通信和间接通信
直接通信:消息发送给进程,将其挂在接受进程的消息缓冲队列,接受进程从消息缓冲队列中取得消息。
间接通信:将消息发送给某个中间实体(信箱),接收进程从中间实体取得消息,此方式也叫信箱通信方式
1.6.3管道通信系统
1.6.4客户服务器系统

1.7线程
1.7.1线程基本概念
“轻量级进程”,是一个基本的CPU执行单元,也是程序执行的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程属于进程,是进程的一个实体,是被系统独立和分配的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源。
快速线程切换,通信易于实现,并行程度提高。
1.7.2进程与线程的比较

							进程	        					      线程

引入目的 能并发执行,提高资源利用率、系统吞吐量 提高并发执行程度,进一步提高资源利用率和系统吞吐量
并发性 较低 较高
基本属性 资源拥有基本单位——进程
独立调度基本单位——进程

						资源拥有基本单位——进程
						独立调度基本单位——线程

基本状态 就绪、等待、执行 就绪、等待、执行
拥有资源 资源拥有基本单位——进程 资源拥有基本单位——进程
系统开销 创建、撤销、切换时空间开销较大 创建、撤销、切换时空间开销较小
操作系统 创建、撤销、切换 创建、撤销、切换
存在标志 进程控制块PCB PCB、线程控制块TCB
关系 单进程单线程,单进程多线程,多进程单线程多进程多线程
1.7.3线程的属性
1、轻型实体
2、独立调度和分派的基本单位
3、可并发执行
4、共享进程资源
1.7.线程的实现方式
1、用户级线程(N对1模型)
2、内核级线程(1对1模型)
3、混合型线程(M对N模型)
用户线程与内核级线程的区别
1)内核支持线程是内核可感知的,而用户级线程是内核不可感知的。
2)用户级线程的创建、撤销和调度不需要内核的支持,是在语言(如C++、Java)
这一级处理的;而内核支持线程的创建、撤消和调度都需要内核提供支持,且与进程的创
建、消和调度大体是相同的。
3)用户级线程执行系统调用指令时将导致其所属进程被中断,而内核支持线程执行
系统调用指令时,只导致该线程被中断。
4)在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程
中的多个线程,由用户程序控制线程的轮换运行:在有内核支持线程的系统内,CPU调度
则以线程为单位,由OS的线程调度程序负责线程的调度。
5)用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则
是可以运行在任何状态下的程序。
1.8进程调度
1.8.1进程调度的基本概念
在多道程序设计系统中,内存中有多道程序运行,他们相互争夺处理机这一重要的资源·
处理机调度就是从就绪队列中,按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。
1.8.2进程调度的时机
当需要切换进程时,进程调度程序就会被调用。引发进程调度的时机有下面几种:
(1)当前进程将转入睡眠态或僵死态。
(2)一个更高优先级的进程加入到可执行队列中。
(3)当前进程的时间片用完。
(4)进程从核心态返回到用户态·
从本质上看,这些情况可以归结为两类时机:
一是进程本身自动放弃CPU而引发的调度,这是上述第1种情况·这时的进程是主动
退出CPU,转入睡眠或僵死态。
二是进程由核心态转入用户态时发生调度,包括上述后3种情况.这类调度发生最为频繁·当进程执行系统调用或中断处理后返回,都是由核心态转入用户态.时间片用完是由系统的时钟中断引起的中断处理过程,而新进程加入可执行队列也是由内核模块处理的,因此也都会在处理完后从内核态返回到用户态。
1.8.3进程的调度层次
一个作业从开始到完成,一般要经历以下三级调度:
(1)高级调度
高级调度也称为作业调度。作业是比程序更广泛的概念,作业不仅包含了程序与数据,还包含了对程序的控制说明:作业是用户向计算机提交任务的任务实体,一个作业可由多个透程组成,而进程只是执行任务的实体。为了管理和调度作业,系统为每个作业设置了一个作业控制块,它是作业的标志,保存了系统对作业进行管理和调度的所有信息。在运行期间,系统按JCB(作业控制块)对作业进行控制。“作业调度就是根据作业控制块中的信息,审查系统是否能满是用户作业要求,如果满是,则调入内存:作业调度中作业都是先在外存的后备队列上,然后再装入内存。但是在分时系统和实时系统中,为了做到及时响应,系统是不需要进行作业调度。
(2)中级调度
中级调度也称为内存调度,本质是将让暂时不能运行的进程挂起,释放内存资源,并把
它们调到外存上去等待。当具备运行条件且内存空闲时,再由中级调度来决定把外存上的就绪进程重新调入内存,并修改其状态为就绪态,挂在就绪队列上等待。
引入中级调度的目的是提高内存利用率和系统吞吐量·
(3)低级调度
低级调度也称进程调度,本质就是根据某种算法,把处理机分配给就绪进程队列中的某进程,进程调度是操作系统中最基本的调度·
进程调度首先会保存处理机现场。将程序计数器等指定寄存器中的内容保存到PCB中·然后将按照某和算法从就绪队列中选取进程,把处理机分配给进程。最后,把指定进程的PCB中的处理机现场信息恢复到处理机中,处理机分配给进程执行。
1.8.4进程调度方式
(1)可抢占式调度
可抢占式调度又称可夺式调度,是指就绪队列中一旦有某进程的优先级高于当前正在
执行的进程的优先级时,操作系统便立即进行进程调度,完成进程切换·
(2)不可抢占式调度
不可抢占式调度又称不可剥夺式调度,是指当一个进程正在处理机上执行时,即使在就绪队列中存在有某进程优先级高于当前正在执行的进程的优先级时,当前进程仍将占用处理机执行,到该进程自己进入阻塞状态,或时间片用完,或在执行完系统调用后准备返回用户进程前的时刻,才重新发生调度让出处理机·
显然,可抢占式调度可有效减少等待时间和响应时间,但会带来较大的其他管理开销,使得吞叶量等的性能指标比不可抢占式调度要低·所以一般在桌面计算机中都支持可抢占式调度,使得用户可以得到更好的人机交互体验,而在服务器领域不必非要使用可抢占式调度,通常会采用不可抢占式调度,从而提高系统的整体吞吐量·
1.8.5进程调度准则
1、CPU利用率
CPU利用率=CPU有效工作时间/(CPU有效工作时间+CPU空闲等待时间)
2、系统吞吐量
吞吐量就是CPU在运行时每单位时间所完成的作业数目
3、周转时间
周转时间=作业完成时间-作业提交时间
平均周转时间=(∑_1^n▒作业 i的周转时间)/n
带权周转时间=作业周转时间/作业实际运行时间
平均带权周转时间=(∑_1^n▒作业 i的带权周转时间)/n
4、等待时间
是指进程处于阻塞状态的花时间之和
5、响应时间
是指从作业提交到系统做出响应所经过的时间
1.9进程调度算法
1.9.1先来先服务算法FCFS
优点:算法简单,对于长作业/进程有利,有利于CPU繁忙型作业/进程
缺点:效率低,对于短作业/进程不利,不利于I/O繁忙型作业/进程
1.9.2最短作业(进程)优先算法SJF/SPF
优点:平均等待时间和平均周转时间较少
缺点:对于长作业或长进程不利,不能保证紧迫性作业或进程会被及时处理;由于作业或进程的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间导致该算法不一定真正能够做到短作业优先调度。
1.9.3最短剩余时间优先算法SRTF
过程的执行可以在一段时间之后停止。在每个进程到来时,短期调度程序在可用进程列表和正在运行的进程中以最少的剩余突发时间安排进程。
1.9.4最高响应比优先算法HRRF
是对先来先服务算法和最短作业优先算法的一种综合平衡,同时考虑每个作业的等待时间和估计运行时间。
优点:等待时间相同的作业要求服务的时间越短其优先权越高对短作业有利;要求服务的时间相同的作业则等待时间越长其优先权越高,此时等同于先来先服务调度算法;对于长作业,优先权随等待时间的增加而提高,其等待时间足够长时,其优先权便可听到很高,从而也可以获得处理机,此时对长作业有利,克服了饥饿状态。
缺点:要进行响应比计算增加了系统开销适用于批处理系统
1.9.5优先级调度算法HPF
当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法每次从后备队列/就绪队列当中选择一个优先级最高的作业或进程将资源分配给它。
可将该调度算法分为非抢占式调度和抢占式调度
根据进程创建后其优先级能否改变,可将优先级分为静态优先级和动态优先级。
1.9.6轮转调度算法RR
又称时间片轮转调度算法,将所有的就绪进程按到达先后次序排成一个队列,每次调度时把处理机分配给队首进程并令其执行一个时间片,当执行时间片用完时有一个计时器发出时钟中断请求,调度程序便停止该进程的进行,将其放到就绪队列队尾,然后在把处理机分配给就绪队列中的新的队首。

1.9.7多级反馈队列调度算法MLFQ

1.10进程同步的概念
1.10.1为什么要引入进程同步
为了协调进程之间的相互制约关系,引入了进程同步。
1.10.2临界资源
把一次只能被一个进程所使用的资源称为临界资源,如打印机
1.10.3临界区
临界区时共享的资源进行访问的一段程序代码。对临界资源的访问必须互斥地进行
临界资源的访问分为以下四个过程:
进入区
临界区
退出区
剩余区
1.10.4两种形式制约关系
进程之间存在同步与互斥的制约关系·
(1)同步
同步亦称直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系·直接相互制约关系是由于进程间的相互合作而引起的·
(2)互斥
互斥亦称间接相互制约关系,是指一组并发进程中的一个或多个程序段,因共享某一共有资源而导致必须以一个不允许交叉执行的单位执行·也就是说互斥是要保证临界资源在某一时刻只被一个进程访问,禁止两个或两个以上进程同时进入访问同一临界资源的临界区。为防止两个进程同时进入临界区,同步机制应遵循以下协调准则:
1)空闲让进。当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效利用临界资源。
2)忙则等特·当己有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程都必须等待,以保证对临界资源的互斥访问。
3)有限等特。对要求访问的临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。
4)让权等特·当进程不能进入自己的临界区时,应立即释放处理机,以免陷进程入忙等待状态。
1.11进程同步的方法
1.11.1临界区互斥
可以由软件方法和硬件方法两种方法来实现
1.11.2信号量
信号量按联系进程的关系分成二类:
1)公用信号量(互斥信号量):它为一组需互斥共享临乔资源的并发进程而设置,它代表永久性的共享的临界资源,每个进程均可对它施加P、V操作,即都可申请和释放该临界资源,其初始值置为
2)专用信号量(同步信号量):它为一组需同步协作完成任务的并发进程而设置,它代表消耗性的专用资源,只有拥有该资源的进程才能对它施加P操作(即申请资源),而由其合作进程对它施加V操作(即释放资源)。
利用信号量实现进程同步
为使多个进程能同步地访问某临界资源,只需为该资源设置一个同步的公共信号量s,并设其初值为0,并规定每个进程在进入临界区前必须申请信号量资源,若无信号量资源,则该进程阻塞等待,进入等待队列。若有信号量资源,则对信号量s进行P()操作,再获取临界资源。当临界资源+1时,对应的信号量资源则执行V()操作,然后唤醒在等待队列中等待获取临界资源的进程。
Semaphore S=0;//初始化信号量S=0
P1()
{

x;//语句x
v(s);//告诉进程P2,语句x己经完成
}
P2(){

P(s);//检查语句x是否运行完成
Y;//检查无误,运行y语句

}
利用信号量实现进程互斥
为使多个进程能互斥地访问某临界资源,只需为该资源设置一个一元互斥信号量mutex,并设其初值为1,并规定每个进程在进入临界区前必须申请信号量资源,当无信号量资源时,则该进程阻塞等待,进入等待队列·当有信号量资源时,对互斥信号量mutex施加p操作,然后获取该临界资源。当该进程使用完临界资源退出临界区后必须释放资源,对互斥信号量mutex施加V操作,然后唤醒等待队列中的进程·将各进程的临界区置于P(mutex)和V(mutex)操作之间·
Semaphore mutex=1;//初化信号量mutex=1
P1(){
P(mutex); //开始访问临界资源
PI的临界区
V(mutex); //访问结束
}
P2(){
P(mutex); //准备开始访问临界资源
P2的临界区
V(mutex); //访问结束
}
1.11.3管程
1.11.4经典同步问题
1、生产者-消费者问题
1、一个生产者一个消费者共用一个缓冲区
2、一个生产者一个消费者共用n个环形缓冲区
3、一组生产者一组消费者共用n个环形缓冲区
2、读者-写者问题
3、哲学家就餐问题

1.12死锁的概念
1.12.1死锁的定义
指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,那么该进程是死锁的。
独木桥问题是经典的死锁问题

1.12.2资源问题
1、可重用性资源和可消耗资源

(1)可重用性资源,有如下性质
A、单一进程使用,不可共享
B、按照如下顺序使用
1、请求资源
2、使用资源
3、释放资源
C、可重用资源中单元数目相对固定,进程运行期间不能创建也不能删除它
(2)可消耗性资源(临时性资源),有如下性质
A、每一类可消耗性资源在进程运行期间都是不断变化的,有时可以很多有时为0
B、进程运行期间可以不断创建可消耗性资源的单元,将他们放入该资源类的缓冲区中,以增加该类资源的单元数目
C、进程在运行过程中,可以请求若干个可消耗性资源单元,用于进程自己的消耗,。不再将它们返回给该资源类中。可消耗性资源通常是由生产者进程创建,由消费者进程消耗,最典型的可消耗性资源就是用于进程间通信的消息等。
2、可抢占资源和不可抢占资源

1.12.3产生死锁的原因
(1)系统资源的竞争引起死锁
(2)进程间推进顺序非法而引起死锁

1.12.4产生死锁的必要条件
如果在一个系统中以下四个条件同时成立,那么就能引起死锁:
1)互斥条件:至少有一个资源必须处于非共享模式,即一次只有一个进程可使用·如果另一进程申请该资源,那么申请进程应等到该资源释放为止。
2)请求并保持条件:一个进程应占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有。
3)不可剥夺条件:资源不能被抢占,即资源只能被进程在完成任务后自愿释放。
4)循环等待条件:有一组等待进程{P0,P1,···,Pn},P0等待的资源为PI占有,P1等待的资源被P2占有…,Pn-1等待的资源为Pn占有,Pn等待的资源为P0占有。
所有四个条件必须同时成立才会出现死锁。循环等待条件意味着占有并等待条件,这样四个条件并不完全独立。

1.13死锁的处理
1.13.1死锁预防
1、破坏互斥条件
2、破坏不可剥夺条件
3、破坏请求与保持条件
4、破坏循环等待条件

1.13.2死锁避免
1、系统安全状态

在这里插入图片描述

2、银行家算法

在这里插入图片描述

1.13.3银行家算法举例

在这里插入图片描述

1.13.4检测死锁

死锁检测时机考虑因素:
死锁发生频度;
死锁影响进程。

  1. 等待时检测:
    发现早,恢复代价小,开销大(overhead)。

  2. 定时检测:

  3. 资源(eg. CPU)利用率下降时检测

    死锁的恢复

  4. 重新启动
    简单,代价大,涉及未参与死锁的进程。

  5. 终止进程(process termination)
    环路上占有资源的进程。
    (1) 一次性全部终止;(2) 逐步终止(优先级,代价函数)

  6. 剥夺资源(resource preemption)+进程回退(rollback)
    (1) select a victim;(2) rollback.
    问题: (1) 保存snapshot代价大;(2) 消除影响困难;
    (3) starvation.

如果资源分配图中没有环路,则系统没有死锁;如果资源分配图上出现了环路,则系统可能有死锁。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值