版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章进程管理3.1进程的概念3.2进程的描述3.3进程状态及其转换3.4进程控制3.5进程互斥3.6进程同步3.7进程通信3.8死锁问题3.9线程的概念3.10线程分类与执行本章小结,习题第3章进程管理3.1进程的概念3.1进程的概念1.现代操作系统的重要特点是: 程序的并发执行; 系统所拥有的资源被共享; 用户随机地使用系统;三个特点互相联系和互相依赖。它们是互相独立的用户如何使用有限的计算机系统资源的反映。2.采用什么样的概念描述程序的执行过程和作为资源分配的基本单位,才能反映上述特点?3.1进程的概念3.1.1程序的并发执行1.程序 程序用来描述计算机所要完成的独立功能,并在时间上严格地按前后次序相继的进行计算机操作序列集合,是一个静态的概念。 它体现了编程人员要求计算机完成所要求功能时所应该采取的顺序步骤。3.1.1程序的并发执行2.程序的顺序执行一个程序只有经过执行才能得到最终结果;程序的执行分为顺序执行和并发执行。CPU是通过时序脉冲来控制顺序执行指令的。其执行过程可以描述为: RepeatIR←M[pc] pc←pc+1 〈Execute(instructioninIR)〉 UntilCPUhalt程序的顺序性与计算机硬件的顺序性是一致的。2.程序的顺序执行把一个具有独立功能的程序独占处理机直至最终结束的过程称为程序的顺序执行。具有如下特点:(1)顺序性程序执行过程可看作一系列严格按程序规定的状态转移过程。(2)封闭性程序执行得到的最终结果由给定的初始条件决定,不受外界因素的影响。(3)可再现性顺序执行的最终结果与执行速度无关.只要输入的初始条件相同,则无论何时重复执行该程序都会得到相同的结果。把一个具有独立功能的程序独占处理机直至最终结束的过程称为程序3.多道程序系统中程序执行环境的特点:(1)独立性每道程序都是逻辑上独立的,它们之间不存在逻辑上的制约关系。即若有充分的资源保证,则每道程序都可以独立执行,且执行速度与其他程序无关,执行的起止时间也是独立的。(2)随机性 程序和数据的输入与执行开始时间都是随机的。(3)资源共享导致对进程执行速度的制约。3.多道程序系统中程序执行环境的特点:4.程序的并发执行(1)什么是程序的并发执行为了增强计算机系统的处理能力和提高资源利用率所采取的一种同时操作技术.可分为两种:①多道程序系统的程序执行环境变化所引起的多道程序的并发执行(宏观上同时进行,微观上顺序执行)②在某道程序的几个程序段中,包含着一部分可以同时执行或顺序颠倒执行的代码4.程序的并发执行例如语句: read(a); read(b); c=a+b; Write(c);它们既可以同时执行,也可颠倒次序执行。对于这样的语句,同时执行不会改变顺序程序所具有的逻辑性质。可以采用并发执行来充分利用系统资源以提高计算机的处理能力。例如语句: read(a);
程序的并发执行可总结为:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。可以将并发执行过程描述为:
S0 Cobegin P1;P2;...Pn Coend SnS0,Sn:表示并发程序段P1,…,Pn开始执行前和并发执行结束后的语句。P1,P2,…,Pn也可以由同一程序段中的不同语句组成。 程序的并发执行可总结为:
程序的并发执行不同于程序的并行执行。程序的并行执行是指一组程序按独立的、异步的速度执行。并行执行不等于时间上的重叠。
程序的并发执行不同于程序的并行执行。5程序的并发执行及其特征例如有两个循环程序A和B,它们共享一个变量N程序A和B以不同的速度运行(失去封闭性,导致不可再现性)N∶=N+1在Print(N)和N∶=0之前,此时得到的N值分别为n+1,n+1,0N∶=N+1在Print(N)和N∶=0之后,此时得到的N值分别为n,0,1N∶=N+1在Print(N)和N∶=0之间,此时得到的N值分别为n,n+1,0程序A:N∶=N+1;
程序B:
Print(N);N∶=0;
5程序的并发执行及其特征例如有两个循环程序A和B,它们共享5程序的并发执行及其特征N:n程序A:N∶=N+1;
//N==n+1程序B:
Print(N);//N=n+1N∶=0;
//N==0程序切换N:n程序B:Print(N);//N=nN∶=0;
//N==0程序A:N∶=N+1;
//N==1程序切换N:n程序B:
Print(N);//N=n程序切换程序A:N∶=N+1;
//N==n+1程序切换程序B:N∶=0;
//N==0注意:A、B程序得到的共享变量结果不同,失去封闭性、不可再现性;要得到良好的控制,系统必须要进行管理——进程控制管理5程序的并发执行及其特征N:n程序A:N∶=N+1;//N5程序的并发执行及其特征并发执行的特征间断(异步)性"走走停停",一个程序可能走到中途停下来,失去原有的时序关系;失去封闭性共享资源,受其他程序的控制逻辑的影响。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征。失去可再现性失去封闭性->失去可再现性;外界环境在程序的两次执行期间发生变化,失去原有的可重复特征5程序的并发执行及其特征并发执行的特征6程序并发执行的条件(1966年由Bernstein提出)若两个程序P1和P2满足下述条件,便能并发执行且有可再现性:R(P1)∩W(P2)∪R(P2)∩W(P1)∪W(P1)∩W(P2)={}“读集”R(Pi)为程序Pi在执行期间所需参考的所有变量的集合。“写集”W(Pi)为程序Pi在执行期间所需改变的所有变量的集合。例如:S1: a:=x+y S2: b:=z+1 S3: c:=a-b S4: d:=c+16程序并发执行的条件(1966年由Bernstein提出)6程序并发执行的条件(1966年由Bernstein提出)S1: a:=x+y R(S1)={ } W(S1)={ }S2: b:=z+1 R(S2)={ } W(S2)={ }S3: c:=a-b R(S3)={ } W(S3)={ }S4: d:=c+1 R(S4)={ } W(S4)={ }语句S1、S2______并发,因为______________________。语句S1、S3______并发,因为______________________。语句S2、S3______并发,因为______________________。语句S3、S4______并发,因为______________________。语句S2、S4______并发,因为______________________。x,yazba,bccd可以R(P1)∩W(P2)∪R(P2)∩W(P1)∪W(P1)∩W(P2)={}不能R(S3)∩W(S1)={a}≠{}不能不能可以R(S3)∩W(S2)={b}≠{}R(S4)∩W(S3)={c}≠{}6程序并发执行的条件(1966年由Bernstein提出)7程序的并发执行所带来的影响好处:提高系统资源的利用率.弊端:必然导致资源共享和资源竞争,改变程序的执行速度,对程序的最终结果带来不利的影响,且可能造成程序出现错误。如果并发执行的各程序段中语句或指令:
满足Bernstein条件,则并发执行不会对执行结果的封闭性和可再现性产生影响。
不按照特定的规则和方法进行资源共享和竞争,则其执行结果将失去封闭性和可再现性。7程序的并发执行所带来的影响例1:设有堆栈S,栈指针top,栈中存放内存中相应数据块地址,如图3.1(a)。
设有两个程序段getaddr(top)和reladdr(blk)。例1:设有堆栈S,栈指针top,栈中存放内存中相应数据块地址getaddr(top):从给定的top所指栈中取出相应的内存数据块地址;reladdr(blk):将内存数据块地址blk放入堆栈S中。
proceduregetaddr(top) procedurereladdr(blk) begin begin localr top←top+1 r←(top) (top)←blk
top←top-1 end return(r) end
getaddr(top):从给定的top所指栈中取出相应的内若getaddr和reladdr程序段进行顺序执行:其执行结果具有封闭性和可再现性。如果对这两个程序段采用并发执行:则在单CPU系统中,将有可能出现下述情况:若getaddr和reladdr程序段进行顺序执行:其执1)程序段reladdr开始执行,当执行到top←top+1语句时(b),程序段getaddr也开始执行且抢占了处理机,从而程序段reladdr停在top←top+1处等待处理机。2)由于reladdr程序段的执行将指针top升高了一格且未放进适当的数据,getaddr的执行结果是失败的(C)。1)程序段reladdr开始执行,当执行到top←to结论1:程序的并发执行使得其执行结果不再具有封闭性和可再现性;分析:由于两程序段共享资源堆栈S,从而使得执行结果受执行速度影响。一般情况下,并发执行的各程序段如果共享软、硬件资源,都会造成其执行结果受执行速度影响的局面。结论2:为了使在并发执行时不出现错误结果,必须采取某些措施来制约、控制各并发程序段的执行速度。结论1:程序的并发执行使得其执行结果不再具有封闭性和可再现性为了控制和协调各程序段执行过程中的软、硬件资源的共享和竞争,必须有一个描述各程序段执行过程和共享资源的基本单位。程序:由于程序的顺序性、静态性及孤立性,用程序段作为描述其执行过程和共享资源的基本单位既增加OS设计和实现的复杂性,也无法反映OS的并发性、用户随机性,以及资源共享等特征。进程(或任务):需要有一个能描述程序的执行过程且能用来共享资源的基本单位。为了控制和协调各程序段执行过程中的软、硬件资源的共享和竞争,3.1.2进程的定义进程的概念是60年代初期,首先在MIT的Multics系统和IBM的TSS/360系统中引用的。1)进程是可以并行执行的计算部分(S.E.Madnick,J.T.Donovan)2)进程是一个独立的可以调度的活动E.Cohen,D.Jofferson3)进程是一抽象实体,当它执行某个任务时,将要分配和释放各种资源 (P.Denning);4)行为的规则叫程序,程序在处理机上执行时的活动称为进程 (E.W.Dijkstra);5)一个进程是一系列逐一执行的操作,而操作的确切含义则有赖于以何种详尽程度来描述进程;(BrinchHansen)3.1.2进程的定义 以上进程的定义,尽管各有侧重,但在本质上是相同的。即主要注重进程是一个动态的执行过程这一概念。进程:
一个具有独立功能的程序对某个数据集在处理机上的执行过程和分配资源的基本单位。 -程序:指一组操作序列; -数据集:是接受程序规定操作的一组存储单元的内容。并发执行的程序在执行过程中分配和管理资源的基本单位。 以上进程的定义,尽管各有侧重,但在本质上是相同的。即主要进程概念阅读菜谱准备原料烹制菜肴饭菜阅读洗衣机手册准备衣服、洗衣粉设定参数,洗衣服干净衣服程序输入运行输出程序输入运行输出分时切换洗衣进程做饭进程进程概念阅读菜谱准备原料烹制菜肴饭菜阅读洗衣机手册准备衣服、进程概念进程的核心思想进程是某种类型的一个活动,它有程序、输入、输出和状态。在分时操作系统中,单个CPU被若干进程共享,它使用某种调度算法决定何时停止一个进程的运行,转而为其他进程提供服务。进程概念进程的核心思想进程是某种类型的一个活动,它有程序、输进程和程序是区别和关系:(1)进程是一个动态概念;程序是一个静态概念。程序是指令的有序集合,描述完成某个功能的一个具体操作过程;没有任何执行的含义。进程强调执行过程,它被动态地创建,并被调度执行后消亡。(2)进程具有并发特征,而程序没有。进程具有并发特征的两个方面:独立性和异步性。即在不考虑资源共享的情况下,各进程的执行是独立的,执行速度是异步的。程序不反映执行过程,所以不具有并发特征。进程和程序是区别和关系:(3)进程是竞争计算机系统资源的基本单位,从而其并发性受到系统自己的制约。这里,制约就是对进程独立性和异步性的限制。(4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。(3)进程是竞争计算机系统资源的基本单位,从而其并发性受到作业和进程*作业:用户需要计算机完成某项任务时要求计算机所作工作的集合。一个作业的完成要经过提交、收容、执行和完成四个阶段。进程:已提交完毕程序的执行过程的描述,是资源分配的基本单位。作业和进程*作业和进程的区别1)作业是用户向计算机提交任务的任务实体。用户向计算机提交作业后,系统将它放入外存的作业等待队列中等待执行。进程是完成用户任务的执行实体,是向系统申请分配资源的基本单位。任一进程只要被创建,总有相应的部分存在于内存中。2)作业描述用户和OS之间的任务委托关系,进程描述OS内部任务的具体执行过程。3)作业的概念主要用在批处理系统中,进程的概念则用在几乎所有的多道系统中。关系:一个用户的作业,由用户提交给系统,必须以进程的形式具体完成。一个作业包含多个进程,至少含一个进程,但反过来不成立作业和进程的区别进程的特征动态性:进程具有动态的地址空间(数量和内容),地址空间上包括:代码(指令执行和CPU状态的改变)数据(变量的生成和赋值)系统控制信息(进程控制块的建立和系统收回)独立性:各进程的地址空间相互独立,除非采用进程间通信手段;并发性:多个进程实体同存于内存中,且能在一段时间内同时运行;引入进程实体的目的就是并发执行异步性:各进程按各自独立的、不可预知的速度向前推进结构性:程序段、数据段和PCB;程序文件中通常也划分了代码段和数据段,进程的创建与撤消就是PCB的创建与撤消进程的特征动态性:进程具有动态的地址空间(数量和内容),地址3.2进程的描述从处理机的活动角度(进程的静态描述)系统中有描述进程存在和反映其变化的物理实体,即进程的静态描述。进程的静态描述由三部分组成:①进程控制块PCB、②有关程序段:描述进程所要完成的功能。
③该程序段对其进行操作的数据结构集:程序在执行时必不可少的工作区和操作对象。②③是进程完成所需功能的物质基础。它们放在外存中,直到该进程执行时再调入内存。3.2进程的描述3.2.1进程控制块PCBPCB是系统感知进程存在的唯一实体;PCB是进程动态特征的集中反映。创建一个进程时,先创建其PCB,然后才能根据PCB中信息对进程实施有效的管理和控制。当一个进程完成其功能之后,系统则释放PCB,进程也随之消亡。一个进程的PCB结构全部或部分常驻内存的。进程的PCB所包含的基本内容: (1)描述信息 (2)控制信息 (3)资源管理信息 (4)CPU现场保护结构3.2.1进程控制块PCB(1)描述信息 ①进程名或进程标识号(唯一) ②用户名或用户标识号 ③家族关系(2)控制信息①进程当前状态:说明进程当前处于何种状态。初始态、就绪态、执行态、等待态、终止态就绪态:表示该进程准备占有处理机;执行态:表示该进程占有处理机;等待态:表示该进程因某种原因不能占有处理机;(1)描述信息②进程优先级 是选取进程占有处理机的重要依据。与它有关的PCB表项有: a.占有CPU时间; b.进程优先级偏移; c.占据内存时间等。③程序开始地址 规定该进程的程序从此地址开始执行.④各种计时信息 给出进程占有和利用资源的有关情况。⑤通信信息 用来说明该进程在执行过程中与别的进程所发生的信息交换情况。②进程优先级(3)资源管理信息有关存储器的信息、输入输出设备的信息、文件系统的信息等。
①占用内存大小及其管理用的数据结构指针。②对换或覆盖用的有关信息③共享程序段大小及起始地址。④输入输出设备的设备号,所要传送的数据长度、缓冲区地址、缓冲区长度及所用设备的有关数据结构指⑤指向文件系统的指针及有关标识等。进程可使用这些信息对文件系统进行操作。(3)资源管理信息(4)CPU现场保护结构当前进程因等待某个事件而进入等待状态或因某种事件发生被中止在处理机上的执行时,为了以后该进程能在被打断处恢复执行,需要保护当前进程的CPU现场(或称进程上下文)。PCB中设有专门的CPU现场保护结构,以存储退出执行时的进程现场数据。(4)CPU现场保护结构3.2.2进程上下文实际上是进程执行过程中顺序关联的静态描述,是进程执行活动全过程的静态描述。是一个与进程切换和处理机状态发生变换有关的概念。是一个抽象的概念,它包含了每个进程执行过的、执行时的以及待执行的指令和数据,在IR、堆栈、状态寄存器等中的内容。已执行过的进程指令和数据在相关寄存器与堆栈中的内容称为上文。正在执行的进程指令和数据在相关寄存器与堆栈中的内容称为正文。待执行的进程指令和数据在相关寄存器与堆栈中的内容称为下文。3.2.2进程上下文在不发生进程调度时,进程上下文的改变是在同一进程内进行的。同一进程的上下文结构包括:计算机系统中与执行该进程有关的各种寄存器的值程序段在经过编译之后形成的机器指令代码集(正文段)数据集及各种堆栈值与PCB结构在不发生进程调度时,进程上下文的改变是在同一进程内进行的。UNIXSystemⅤ中,进程上下文由以下3部分组成:用户级上下文:由进程的用户程序段部分编译而成的用户正文段、用户数据、用户栈等组成。寄存器上下文:由PC、PS、栈指针和通用寄存器的值组成。进程的系统级上下文:分为静态部分、动态部分。静态部分:PCB结构将进程虚地址空间映射到物理空间用的有关表格核心栈(用来装载进程中所使用系统调用的调用序列)UNIXSystemⅤ中,进程上下文由以下3部分组成:寄系统级上下文的动态部分是与寄存器上下文相关联的。进程上下文的层次概念也主要体现在动态部分中,即系统级上下文的动态部分可看成是一些数量变化的层次组成。其变化规则满足先进后出的堆栈方式,每个上下文层次在栈中各占一项。动态部分是指在进入和退出不同的上下文层次时,系统为各层上下文中相关联的寄存器值所保存和恢复的记录。系统级上下文的动态部分是与寄存器上下文相关联的。动态部分是指3.2.3进程上下文切换进程上下文的切换发生在不同的进程之间而不是同一个进程内。进程上下文的切换过程包含3个部分,涉及到3个进程。第1部分:保存被切换进程的上下文部分到有关存储区。第2部分:OS进程中有关调度和资源分配程序执行,并选取新的进程。第3部分:将被选中进程的原来被保存的正文部分从有关存储区中取出,并送至有关寄存器与堆栈中,激活被选中进程执行。进程上下文的切换过程:图P463.2.3进程上下文切换进程上下文的切换过程涉及到谁来保护和获取进程的正文问题。也就是如何使得寄存器和堆栈等中的数据流入流出PCB的存储区。进程上下文的切换过程涉及到了系统调度和分配程序,耗费CPU时间。多组寄存器技术:为了提高效率,进程切换时进程上下文不保存到存储器区,设置多组寄存器,直接切换到相应的寄存器.进程上下文的切换过程涉及到谁来保护和获取进程的正文问题。也就3.2.4进程空间与大小任一进程,都有一个自己的地址空间,称为进程空间。进程空间的大小只与处理机的位数有关。(例如:16位机2的16次方(64K),32位机2的32次方单元(4G))程序的执行都在进程空间内进行。 用户程序、进程的各种控制表格等都按一定的结构排列在进程空间中。有些系统中,进程空间还被划分为:用户空间、系统空间;用户程序在用户空间内执行;OS内核程序则在进程的系统空间内执行。系统通过程序状态寄存器等设置不同的执行模式,即用户模式和系统模式,把用户执行模式和系统执行模式分别称为用户态和系统态。3.2.4进程空间与大小 图3.4进程空间第3章进程管理课件3.3进程状态及其转换3.3.1进程状态一个进程的生命期可以划分为一组状态,这些状态刻划了整个进程。系统根据PCB结构中的状态值控制进程。在进程的生命期内,一个进程至少具有5种基本状态:初始态、就绪状态、执行状态、等待状态、终止态。3.3进程状态及其转换1、初始态:进程刚被创建时,由于其它进程正占有处理机得不到执行,处于初始态。初始终止2、终止态:
进程在执行结束后,将退出执行而被终止,这时进程处于终止态。1、初始态:初始终止2、终止态:3、就绪状态:表示该进程准备占有处理机;此时进程已经得到除CPU外的所有资源,只要由调度得到处理机,便可立即投入执行。内存就绪状态: 处于这种状态的进程在得到处理机后才能立即投入执行。外存就绪状态: 处于这种状态的进程只有先成为内存就绪状态后,才可能被调度执行。3、就绪状态:表示该进程准备占有处理机;4、执行状态:表示该进程占有处理机;单CPU系统中任一时刻处于执行状态的进程只能有一个。只有处于就绪状态的进程经调度选中之后才可进入执行状态。又分为用户执行状态和系统执行状态;用户执行状态: 进程的用户程序段在执行时该进程处于用户状态。系统执行状态: 进程的系统程序段在执行时该进程处于系统状态。4、执行状态:表示该进程占有处理机;5、等待状态:表示该进程因某种原因不能占有处理机;进程因等待某个事件发生而放弃处理机进入等待状态。根据等待事件的种类而进一步划分为不同的子状态,如内存等待、设备等待、文件等待和数据等待等。5、等待状态:表示该进程因某种原因不能占有处理机;3.3.2进程状态转换进程的状态随着进程的执行和外界条件变化和转换。进程的状态转换是一个非常复杂的过程。从一个状态到另一个状态的转换除了要使用不同的控制过程,有时还要借助于硬件触发器才能完成。3.3.2进程状态转换图3.5进程状态转换初始终止初始终止3.4进程控制进程控制就是系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。把系统态下执行的某些具有特定功能的程序段称为原语。原语可分为两类:1.机器指令级的原语,特点是执行期间不允许中断,如物理学中的原子,在OS中它是一个不可分割的基本单位。功能级的原语,特点是作为原语的程序段不允许并发执行。这两类原语都在系统态下执行,且都是为了完成某个系统管理所需要的功能和被高层软件所调用。3.4进程控制系统在创建、撤消一个进程以及要改变进程的状态时,都要调用相应的程序段来完成这些功能。在OS中,通常把进程控制用的程序段做成原语。用于进程控制的原语有:创建原语、撤消原语、阻塞原语、唤醒原语等。系统在创建、撤消一个进程以及要改变进程的状态时,都要调用相应3.4.1进程创建与撤消进程创建进程创建方式有2种:由系统程序模块统一创建。 批处理系统中,由OS的作业调度程序为用户作业创建(2)由父进程创建。 例如在层次结构的系统中,父进程创建子进程。由系统统一创建的进程之间的关系是平等的,它们之间不存在资源继承关系。在父进程创建的进程之间则存在隶属关系,且互相构成树型结构的家族关系。属于某个家族的一个进程可以继承其父进程所拥有的资源。无论是哪一种方式创建进程,在系统生成时,都必须由OS创建一部分系统进程,由系统进程承担资源分配和管理工作。无论是哪一种方式创建进程,都必须调用创建原语来实现。3.4.1进程创建与撤消图3.6创建原语流图创建原语扫描系统的PCB链表,在找到一定PCB表之后,填入调用者提供的有关参数,最后形成代表进程的PCB结构。参数:进程名、进程优先级P0、进程正文段起始地址d0、资源清单R0等。图3.6创建原语流图创建原语扫描系统的PCB链表,在找到一2.进程撤消以下几种情况导致进程被撤消:(1)该进程已完成所要求的功能而正常终止。(2)由于某种错误导致非正常终止。(3)祖先进程要求撤消某个子进程。进程被撤消时,进程都必须释放它所占用的各种资源和PCB结构本身。当一个祖先进程撤消某个子进程时,还需审查该子进程是否还有自己的子孙进程,若有的话,还需撤消其子孙进程的PCB结构和释放它们所占有的资源。2.进程撤消撤消原语先检查PCB进程链或进程家族,寻找所要撤消的进程是否存在。若找到了,则释放该进程所占有的资源之后,把对应的PCB结构从进程链或进程家族中摘下并返回给PCB空队列。若被撤消的进程有自己的子进程,则先撤消其子进程的PCB结构并释放子进程所占用的资源之后,再撤消当前进程的PCB结构和释放其资源。撤消原语图3.7撤消原语流图图3.7撤消原语流图3.4.2进程的阻塞与唤醒阻塞原语:实现进程的执行态等待态的转换。阻塞原语在一个进程期待某一事件发生,但发生条件尚不具备时,被该进程自己调用来阻塞自己。唤醒原语:实现进程的等待态就绪态的转换。当等待队列中的进程所等待的事件发生时,等待该事件的所有进程都将被唤醒。唤醒一个进程有两种方法:1.由系统进程唤醒。2.由事件发生进程唤醒。3.4.2进程的阻塞与唤醒图3.8阻塞原语图阻塞原语先中断处理机和保存该进程的CPU现场。将被阻塞进程置“阻塞”状态后插入等待队列中;转进程调度程序选择新的就绪进程投入运行。图3.8阻塞原语图阻塞原语当由系统进程唤醒等待进程时,系统进程统一控制事件的发生并将“事件发生”这一消息通知等待进程。从而使得该进程因等待事件已发生而进入就绪队列。由事件发生进程唤醒时,事件发生进程和被唤醒进程之间是合作关系。唤醒原语既可被系统进程调用,也可被事件发生进程调用。称调用唤醒原语的进程为唤醒进程。当由系统进程唤醒等待进程时,系统进程统一控制事件的发生并将“图3.9唤醒原语唤醒原语先将被唤醒进程从相应的等待队列中摘下,将被唤醒进程置为就绪状态之后,送入就绪队列。唤醒原语既可以返回原调用程序,也可以转向进程调度,以便让调度程序有机会选择一个合适的进程执行。图3.9唤醒原语唤醒原语3.5 进程互斥两种形式的制约关系 在多道程序环境下,当程序并发执行时,由于资源共享和进程合作,使同处于系统中的诸进程之间存在两种形式的制约关系间接相互制约关系 同处于一个系统中的进程必然共享某种资源,如CPU、I/O设备等,间接相互制约即源于资源共享。如A、B共享打印机,若A申请打印时,打印机已分配给B,则A只能阻塞,等B释放后再改为就绪,又称为"互斥"直接相互制约关系 这种制约源于进程之间的合作关系。如进程A向B提供数据,当输入缓冲空时,B不能得到数据而阻塞;反之当缓冲满时,A无法写入而阻塞,又称为"同步"3.5 进程互斥两种形式的制约关系3.5 进程互斥3.5.1 资源共享所引起的制约例1:在描述一个程序或算法时,总认为存在一个伪处理机,可以按程序或算法所规定的步骤来执行该程序或算法。在实际的系统,一般在程序中所描述的一条语句是由多条指令构成的。例如,各种程序中经常出现的赋值语句: X=X+1;在用汇编语言书写时,就变成:
LOAD A,X ADDI A,1 STORE A,X这3条指令的执行期间,有可能发生中断或调度,从而使与当前进程无关的程序得以执行。为了保证程序执行最终结果的正确性,必须对并发执行的各进程进行制约,以控制它们的执行速度和对资源的竞争。3.5 进程互斥示例2共享变量的修改冲突!!示例2共享变量的修改冲突!!例3:设有两个计算进程PA,PB共享内存MS。其中MS分为三个领域,即系统区、进程工作区和数据区。这里数据区被划分大小相等的块,每个块中既可能放有数据,也有可能未放有数据。系统区主要是堆栈S,其中存放那些空数据块的地址。当进程PA或PB要求空数据块时,从堆栈最顶部(top指针所指的位置)取出所需数据块的地址。当进程PA或PB释放数据块时,则把所释放数据块的地址放入堆栈顶部。getspace为取空数据块过程,release(ad)为释放数据块过程。ad为待释放数据块的地址。如果堆栈S非空的话,进程PA或PB是可以用任意的顺序释放和获取数据块的。例3:设有两个计算进程PA,PB共享内存MS。其中MS分为
getspace: begin local g g←stack[top] top←top-1 end
release(ad): begin top←top+1 stack[top]←ad end设时刻t0时,top=h0,则getspace和release(ad)可按以下顺序执行:t0:top←top+1 ;top=h0+1;
release(ad)的第一句执t1:g←stack[top];g=stack[h0+1];getspace执行t2:top←top-1 ;top=h0;getspace执行t3:stack[top]←ad;stack[h0]←ad;release(ad)执行 getspace: begin local g其结果是:调用getspace的进程取到的是h0+1中的一个未定义值;调用release(ad)的进程把所释放的空块地址ad重复放入了h0中。怎样保证上述执行结果的正确性呢?如果把getspace和release(ad)抽象为两个各以一个动作完成的顺序执行单位,那么执行结果的正确性是可以保证的。其结果是:主要任务使并发执行的诸进程之间能有效的共享资源和相互合作,从而使程序的执行具有可再现性。主要任务使并发执行的诸进程之间能有效的共享资源和相互合作,从1、临界区(criticalregion)把不允许多个并发进程交叉执行的一段程序称为临界区(criticalregion)。临界区是由属于不同并发进程的程序段共享公用数据或公用数据变量而引起的。临界区也被称为访问公用数据的那段程序。一次仅允许一个进程使用的资源为临界资源。在每个进程中,用来访问临界资源的那段程序称为临界区。1、临界区(criticalregion)2、间接制约把那些不允许交叉执行的临界区按不同的公用数据划分为不同的集合,把这些集合称为类(class),对类给定一个唯一的标识名; 上例中以公用数据栈S划分的临界区集合是{getspace,release}。描述临界区: when〈类名〉do〈临界区〉od2、间接制约 设类{getspace,release}的类名为sp,则getspace和release(ad)可重新描述为:getspace:
whenspdogetspace←stack[top] top←top-1od release(ad): whenspdotop←top+1 stack[top]←adod 设类{getspace,release}的类名为sp, 由于共享某一公有资源而引起的在临界区内不允许并发进程交叉执行的现象,称为由共享公有资源而造成的对并发进程执行速度的间接制约,简称间接制约。间接制约主要指各并发进程的速度受公有资源制约,而不是进程间直接制约的意思!受制约的类中各进程在执行顺序上是任意的! 由于共享某一公有资源而引起的在临界区内不允许并发进程交叉进程之间的关系:间接制约(进程互斥): 各个进程彼此不知道对方的存在,逻辑上没有关系,由于竞争同一资源所引起的制约;直接制约(进程同步):
各个进程彼此不知道对方的名字,通过对某些对象的共同存取来协同完成一项任务。通信:
各个进程通过名字彼此之间直接进行通信,交换信息,合作完成一项任务。进程之间的关系:3.什么是互斥一组并发进程中的一个或多个程序段,因共享某一公有资源而导致它们必须以一个不允许交叉执行的单位执行。也就是说,不允许两个以上的共享该资源的并发进程同时进入临界区称为互斥。一组并发进程互斥执行时必须满足如下准则:不能假设各并发进程的相对执行速度。 各并发进程享有平等的、独立的竞争公有资源的权利,且在不采取任何措施的条件下,在临界区内任一指令结束时,其他并发进程可以进入临界区。3.什么是互斥(2)并发进程中的某个进程不在临界区时,它不阻止其他进程进入临界区。(3)并发进程中的若干个进程申请进入临界区时,只能允许一个进程进入。(4)并发进程中的某个进程申请进入临界区时开始,应在有限时间内得以进入临界区。准则(1),(2),(3)是保证各并发进程享有平等的、独立的竞争和使用公有资源的权利,且保证每一时刻至多只有一个进程在临界区。准则(4)则是并发进程不发生死锁的重要保证。(2)并发进程中的某个进程不在临界区时,它不阻止其他进程进3.5.2互斥的加锁实现方法:对临界区加锁实现互斥当某个进程进入临界区之后,它将锁上临界区,直到它退出临界区时为止。并发进程在申请进入临界区时,首先测试该临界区是否是上锁的。如果该临界区已被锁住,则该进程要等到该临界区开锁之后才有可能获得临界区。3.5.2互斥的加锁实现设:临界区的类名为S;锁定位key[S]表示该锁定位属于类名为S的临界区。加锁后的临界区程序描述如下: lock(key[S]) 〈临界区〉 unlock(key[S])Key[S]=1:表示类名为S的临界区可用;key[S]=0:表示类名为S的临界区不可用;unlock(key[S])的实现:key[S]←1lock(key[S])的实现:key[S]=0,不允许任何进程进入临界区。key[S]=1时,仅允许一个进程进入临界区。设:临界区的类名为S;锁定位key[S]表示该锁定位属于
一种方法是: lock(x)=beginlocalv repeat v←x untilv=1 x←0 end该方法不能保证并发进程互斥执行所要求的准则(3)((3)并发进程中的若干个进程申请进入临界区时,只能允许一个进程进入)。当同时有几个进程调用lock(key[S])时,在x←0语句执行之前,可能已有两个以上的多个进程由于key[S]=1而进入临界区。解决方法:有些机器在硬件中设置“测试与设置”指令,来保证整个代码执行的不可分离性。!!在系统实现时,锁定位key[S]总是设置在公有资源所对应的数据结构中的。 一种方法是:3.5.3信号量和P,V原语1、信号量1965年,荷兰学者Dijkstra提出的信号量(Semaphores)机制是一种有效的进程同步互斥工具,所以P、V分别是荷兰语的test(proberen)和increment(verhogen)信号是铁路交通管理中的一种常用设备,交通管理人员利用信号颜色的变化来实现交通管理。信号量机制已从整型信号量发展为记录型信号量,又进一步发展为信号量集目前,信号量机制已广泛应用于单处理机、多处理机以及计算机网络中信号量就是OS提供的管理公有资源的有效手段信号量代表可用资源实体的数量3.5.3信号量和P,V原语1、信号量加锁法的弊端:1.循环测试锁定位将损耗较多的CPU计算时间。2.使用加锁法实现进程间互斥时,将导致在某些情况下出现不公平现象。 一个进程能否进入临界区是依靠进程自己调用lock过程去测试相应的锁定位判断。没有获得执行机会的进程当然无法判断,从而出现不公平现象。加锁法的弊端: PA PBA:lock(key[S]) B:lock(key[S]) 〈S〉<S> unlock(key[S]) unlock(key[S]) GotoA GotoB
设PA已通过lock(key[S])而进入临界区。在PA执行unlock(key[S])之前,key[S]=0且PB没有进入临界区的机会。当PA执行完unlock(key[S])之后,由于紧接着是一转向语句,PA将又立即去执行lock(key[S])此时,unlock(key[S])已将key[S]的值置为1,即开锁状态,从而PA又可进入临界区S。只有在PA执行完unlock(key[S])过程之后、执行GotoA语句之前的瞬间发生进程调度,使PA把处理机转让给进程PB,PB才有可能得到执行。这种可能性是非常小的。PB将处于永久饥饿状态。 PA PB例2:教室:人人都可借用、且不规定使用时间。某个学生想使用该教室时,他必须先申请获得使用该教室的权利;然后再到教室看该教室是不是被锁上了。如果该教室被锁上了,他只好下次再来观察,看该教室的门是否已被打开。这种反复将持续到他进门后为止。一种最直观的办法:设置一个教室管理员。如果有学生申请使用教室而未能如愿时,教室管理员记下他的名字,并等到教室门一打开则通知该学生进入。这样,既减少了学生多次来去教室检查门是否被打开的时间,又减少了因为学生自发地检查造成的不公平现象。例2:教室:人人都可借用、且不规定使用时间。某个学生想使用该解决加锁法带来的问题的方法:在OS中,这个管理员就是信号量。信号量管理相应临界区的公有资源,代表可用资源实体。在OS中,信号量sem是一整数。sem≥0:代表可供并发进程使用的资源实体数;Sem<0:表示正在等待使用该资源的进程数。用于互斥的信号量sem的初值应该大于零;建立一个信号量必须:说明所建信号量所代表的意义;赋初值以及建立相应的数据结构以便指向那些等待使用该临界区的进程。解决加锁法带来的问题的方法:2.P,V原语信号量的数值仅能由P,V原语操作改变;采用P,V原语,可以把类名为S的临界区描述为WhenSdoP(sem)临界区V(sem)odSem:与临界区内所使用的公用资源有关的信号量一次P原语操作:使得信号量sem减1;一次V原语操作:将使得信号量sem加1;2.P,V原语当某个进程正在临界区内执行时,其他进程如果执行了P原语操作:该进程在等待队列中等待有其他进程做V原语操作释放资源后,进入临界区,这时,P原语的执行才算真正结束。当有好几个进程执行P原语未通过而进入等待状态之后,如有某进程作了V原语操作: 等待进程中的一个可以进入临界区,但其他进程必须等待。当某个进程正在临界区内执行时,其他进程如果执行了P原语操作:P原语操作的主要动作是:(1)sem减1;(2)若sem减1后仍大于或等于零,则进程继续执行;(3)若sem减1后小于零,则该进程被阻塞后进入该信号相对应的队列中,然后转进程调度。P原语操作的主要动作是:V原语的操作主要动作是:(1)sem加1;(2)若相加结果大于零,进程继续执行;(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。V原语的操作主要动作是:图3.11P原语操作功能 图3.12V原语操作功能第3章进程管理课件P,V操作都必须以原语实现,且在P,V原语执行期间不允许中断发生。实现方法:一种使用加锁法的P,V原语的软件实现方法:P,V操作都必须以原语实现,且在P,V原语执行期间不允许中断P(sem): begin 封锁中断; lock(lockbit) val[sem]=val[sem]-1 ifval[sem]<0 保护当前进程CPU现场 当前进程状态置为″等待″
将当前进程插入信号sem等待队列 转进程调度
fi unlock(lockbit);开放中断 endP(sem):V(sem): begin 封锁中断; lock(lockbit) va[sem]=val[sem]+1 ifval[sem]≤0 localk
从sem等待队列中选取一等待进程,将其指针置入k中 将k插入就绪队列 进程状态置“就绪” fi unlock(lockbit);开放中断endV(sem):3.5.4用P,V原语实现进程互斥设信号量sem是用于互斥的信号量;sem初值为1:表示没有并发进程使用该 临界区。只要把临界区置于P(sem)和V(sem)之间,即可实现进程间的互斥。3.5.4用P,V原语实现进程互斥当一个进程想要进入临界区时,它必须先执行P操作以将信号量sem减1。信号量初始值为1,任一进程在执行P操作之后将sem的值变为0,表示该进程可以进入临界区。在一个进程完成对临界区的操作之后,它必须执行V操作以释放它所占用的临界区。在该进程未执行V操作之前如有另一进程想进入临界区的话,它也应先执行P,从而使sem的值变为-1,第二个进程将被阻塞。直到第一个进程执行V操作之后,sem的值变为0,从而可唤醒第二个进程进入就绪队列,经调度后再进入临界区。在第二个进程执行完V操作之后,如果没有其他进程申请进入临界区的话,则sem又恢复到初始值。当一个进程想要进入临界区时,它必须先执行P操作以将信号量se用信号量实现两并发进程PA,PB互斥的描述:1)设sem为互斥信号量,取值范围为(1,0,-1)。sem=1:表示进程PA和PB都未进入类名为S的临界区;sem=0:表示进程PA或PB已进入类名为S的临界区;sem=-1:表示进程PA和PB中,一个进程已进入临界区,而另一个进程等待进入临界区。用信号量实现两并发进程PA,PB互斥的描述:2)描述: PA: P(sem) 〈S〉 V(sem): : : PB: P(sem) 〈S〉 V(sem)∷ : :2)描述:应用题:独木桥问题。某条河上只有一座独木桥,以便行人过河。现在河的两边都有人要过桥,按照下面的规则过桥。为了保证过桥安全,请用P、V操作分别实现正确的管理。
过桥的规则是:每次只有一个人通过桥。process(E-W)i:begin P(mutex); 过桥; V(mutex);
endVarmutex=1:semaphore;process(W-E)j:begin P(mutex); 过桥; V(mutex);
end应用题:process(E-W)i:Varmutex=3.6进程同步3.6.1同步的概念各进程之间需要相互合作以完成某项工作,产生了直接制约。例:缓冲区Buf:计算进程和打印进程共同使用同一缓冲区Buf。计算进程:反复地把每次计算结果放入 Buf中;打印进程:把计算进程每次放入Buf中的数据通过打印机打印输出。3.6进程同步PC : : A: localBuf1 Repeat Buf1←Buf UntilBuf1=空 计算 得到计算结果 Buf←计算结果 Goto APP: : : B: localPri Repeat Pri←Buf Until Pri≠空 打印Buf中的数据 清除Buf中的数据 Goto B假定进程PC和PP对Buf已采取了互斥措施。如果按上面的描述并发执行进程PC和PP的话,则会造成CPU时间的极大浪费。PC :PP: :假定进程PC和PP对Buf已采取了互斥措直接制约: 一组在异步环境下的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程称为并发进程间的直接制约。 异步环境主要指各并发进程的执行起始时间的随机性和执行速度的独立性。直接制约:直接制约引起的问题:CPU时间的浪费主要是由于进程PC和PP的执行互相制约所引起的。 PC的输出结果是PP的执行条件; PP的执行结果也是PC的执行条件;解决方案:直接制约的进程互相给对方进程发送执行条件已经具备的信号。这样,被制约进程即可省去对执行条件的测试,只要收到了制约进程发来的信号便开始执行,而在未收到制约进程发来的信号时便进入等待状态。直接制约引起的问题:CPU时间的浪费主要是由于进程PC和P进程同步: 把异步环境下的一组并发进程,因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。具有同步关系的一组并发进程称为合作进程;合作进程间互相发送的信号称为消息或事件。wait(消息名): 表示进程等待合作进程发来的消息,signal(消息名): 表示向合作进程发送消息。进程同步: 实现进程同步:1)利用过程wait和signal实现同步;2)利用信号量实现同步; 实现进程同步:wait的功能: 等待到消息名为true的进程继续执行;signal的功能: 向合作进程发送合作进程所需要的消息名,并将其值置为true。wait的功能:(1)设消息名Bufempty:表示Buf空;
消息名Buffull:表示Buf中装满了数据。(2)初始化 Bufempty=true; Buffull=false。(3)描述: PC : A: wait(Bufempty) 计算 Buf←计算结果 Bufempty←false signal(Buffull) Goto A PP : B: wait(Buffull) 打印Buf中的数据 清除Buf中的数据 Buffull←false signal(Bufempty) Goto B(1)设消息名Bufempty:表示Buf空; PP :3.6.2私用信号量用信号量的方法实现进程间的同步:把各进程之间发送的消息作为信号量看;与互斥时不同,这里的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关。因此,称该信号量为私用信号量(PrivateSemaphvre);一个进程Pi的私用信号量Semi是从制约进程发送来的进程Pi的执行条件所需要的消息。与私用信号量相对应,称互斥时使用的信号量为公用信号量。3.6.2私用信号量3.6.3用P,V原语操作实现同步利用P,V原语实现进程同步的方法:首先为各并发进程设置私用信号量;然后为私用信号量赋初值;最后利用P,V原语和私用信号量规定各进程的执行顺序。3.6.3用P,V原语操作实现同步图3.13缓冲区队列例:设进程PA和PB通过缓冲区队列传递数据。PA为发送进程;PB为接收进程;PA发送数据时调用发送过程deposit(data);PB接收数据时调用过程remove(data)。且数据的发送和接收过程满足如下条件:1)在PA至少送一块数据入一个缓冲区之前,PB不可能从缓冲区中取出数据(假定数据块长等于缓冲区长度);2)PA往缓冲队列发送数据时,至少有一个缓冲区是空的;3)由PA发送的数据块在缓冲队列中按先进先出(FIFO)方式排列。图3.13缓冲区队列例:设进程PA和PB通过缓冲区队列传递发送过程deposit(data)和接受过程remove(data)必须同步执行;deposit(data)的执行结果是remove(data)的执行条件;当缓冲队列全部装满数据时,remove(data)的执行结果又是deposit(data)的执行条件,满足同步定义。按三步描述过程deposit(data)和remove(data):(1)设Bufempty为进程PA的私用信号量; Buffull为进程PB的私用信号量;(2)令Bufempty的初始值为n(n为缓冲队列的缓冲区个数);Buffull的初始值为0;发送过程deposit(data)和接受过程remove(d(3)描述:PA:deposit(data): beginlocalx P(Bufempty);
按FIFO方式选择一个空缓冲区Buf(x); Buf(x)←data Buf(x)置满标记 V(Buffull) endPB:remove(data): Beginlocalx P(Buffull);
按FIFO方式选择一个装满数据的缓冲区Buf(x) data←Buf(x) Buf(x)置空标记 V(Bufempty) end(3)描述:PB:remove(data):局部变量x用来指明缓冲区的区号,给Buf(x)置标志位是为了便于区别和搜索空缓冲区及非空缓冲区。局部变量x用来指明缓冲区的区号,给Buf(x)置标志位是为了3.6.4经典进程的同步问题生产者—消费者问题哲学家进餐问题读者—写者问题爸爸、妈妈,孩子吃水果问题3.6.4经典进程的同步问题生产者—消费者问题生产者-消费者问题把并发进程的同步和互斥问题一般化,可以得到一个抽象的一般模型,即生产者-消费者问题。把系统中使用某一类资源的进程称为该资源的消费者;把释放同类资源的进程称为该资源的生产者。例:计算进程PC与打印进程PP公用一个缓冲区。计算进程PC把数据送入缓冲区;打印进程PP从缓冲区中取数据打印输出。PC进程相当于数据资源的生产者;PP进程相当于消费者。生产者-消费者问题把一个长度为n的有界缓冲区(n>0)与一群生产者进程P1,P2,…,Pm和一群消费者进程C1,C2,…,Ck联系起来;设生产者进程和消费者进程是互相等效;生产者和消费者之间满足同步条件:1)消费者接收数据时有界缓冲区中至少有一个单元是满的2)生产者发送数据时有界缓冲区中至少有一个单元是空的。有界缓冲区是临界资源,各生产者进程和各消费者进程之间必须互斥执行。生产者调用过程deposit;消费者调用过程remove把一个长度为n的有界缓冲区(n>0)与一群生产者进程P1,P deposit(data): begin P(avail) P(mutex)
送数据入缓冲区某单元 V(full) V(mutex) end remove(data): begin P(full) P(mutex)
取缓冲区中某单元数据 V(avail) V(mutex) end公用信号量mutex:保证生产者进程和消费者进程之间的互斥,表示可用有界缓冲区的个数,初值为1。信号量avail:为生产者进程的私用信号量,表示有界缓冲区中的空单元数,初值为n;信号量full:为消费者进程的私用信号量,表示有界缓冲区中非空单元数,初值为0。 deposit(data): remove(data):公V原语是释放资源的,可以以任意次序出现。P原语次序不能变,否则会造成死锁。V原语是释放资源的,可以以任意次序出现。经典进程的同步问题生产者—消费者问题哲学家进餐问题读者—写者问题爸爸、妈妈,孩子吃水果问题经典进程的同步问题生产者—消费者问题哲学家进餐问题哲学家进餐问题(TheDinningPhilosophersProblem)是由Dijkstra提出并解决的典型进程同步问题问题描述5个哲学家坐在桌子边,桌上有5个碗和5支筷子,分开放在每个人两边各一支.哲家家的生活方式是交替地进行思考和进餐哲学家饥饿时便拿起两边的筷子进餐,但只有当拿到两支后才能进餐用餐毕,放下筷子继续思考哲学家进餐问题哲学家进餐问题(TheDinningPhi哲学家进餐问题利用记录型信号量解决哲学家进餐问题经分析可知,放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用。为了实现对筷子的互斥使用,可以用一个信号量表示一只筷子,由这五个信号量构成信号量数组。其描述如下: Varchopstick:array[0,…,4]ofsemaphore;哲学家进餐问题利用记录型信号量解决哲学家进餐问题哲学家进餐问题所有信号量均被初始化为1,第i位哲学家的活动可描述为:repeat wait(chopstick[i]);wait(chopstick[(i+1)mod5]);… eat;… signal(chopstick[i]); signal(chopstick[(i+1)mod5]); … think;untilfalse;问题:同时拿起一侧的筷子,则——死锁如何解决???哲学家进餐问题所有信号量均被初始化为1,第i位哲学家的活动哲学家进餐问题可采取以下几种解决方法至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。按此规定,将是1、2号哲学家竞争1号筷子;3、4号哲学家竞争3号筷子。即五位哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家能获得两只筷子而进餐哲学家进餐问题可采取以下几种解决方法信号量机制——AND型信号量AND型信号量在有些任务中,一个进程先要获得多个共享资源后才能执行,若进程A和B都要访问共享数据D和E,设信号量Dmutex和Emutexmutex(MUTualExclusion)的初值均为1在两个进程中都要包含两个对Dmutex和Emutex的操作,即processA: processB:wait(Dmutex); wait(Emutex);wait(Emutex); wait(Dmutex);若进程A和B按下述次序交替执行wait操作:processA:wait(Dmutex);于是Dmutex=0processB:wait(Emutex);于是Emutex=0processA:wait(Emutex);于是Emutex=-1A阻塞processB:wait(Dmutex);于是Dmutex=-1B阻塞此时,A和B处于僵持状态,若无外力作用无法解脱,称为“死锁”状态信号量机制——AND型信号量AND型信号量此时,A和B处于僵信号量机制——AND型信号量AND同步机制的基本思想是将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其它所有可能为之分配的资源,也不分配给他。亦即,对若干个临界资源的分配,采取原子操作方式:要么全部分配到进程,要么一个也不分配。由死锁理论可知,这样就可避免上述死锁情况的发生。为此,在wait操作中,增加了一个“AND”条件,故称为AND同步,或称为同时wait操作,即Swait(Simultaneouswait)信号量机制——AND型信号量AND同步机制的基本思想是信号量机制——AND型信号量Swait(S1,S2,…,Sn)ifSi≥1and…andSn≥1then//每个资源都可用fori:=1tondoSi:=Si-1;//分配所有资源endforelse//否则,将进程放到等待资源Si的队列中placetheprocessinthewaitingqueueassociatedwiththefirstSifoundwithSi<1,andsettheprogramcountofthisprocesstothebeginningofSwaitoperationendifSsignal(S1,S2,…,Sn)fori:=1tondoSi=Si+1;//释放所有资源RemovealltheprocesswaitinginthequeueassociatedwithSiintothereadyqueue.endfor;信号量机制——AND型信号量Swait(S1,S2,…,哲学家进餐问题利用AND信号量机制解决哲学家进餐问题在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐,这在本质上就是AND同步问题,用AND信号量机制可获得最简洁的解法Varchopstickarray[0,…,4]ofsemaphore:=(1,1,1,1,1);processirepeatthink;Sswait(chopstick[(i+1)mod5],chopstick[i]);eat;Ssignat(chopstick[(i+1)mod5],chopstick[i]);untilfalse;哲学家进餐问题利用AND信号量机制解决哲学家进餐问题经典进程的同步问题生产者—消费者问题哲学家进餐问题读者—写者问题爸爸、妈妈,孩子吃水果问题经典进程的同步问题生产者—消费者问题读者—写者问题一个数据文件或记录可被多个进程共享,我们把只要求读该文件的进程称为“Reader进程”,其他进程称为“Writer进程”允许多个进程同时读一个共享对象,因为读不会使数据文件混乱不允许一个Writer进程和其他Reader进程或Writer进程同时访问一个对象读者—写者问题(Reader-WriterProblem)是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题读者—写者问题一个数据文件或记录可被多个进程共享,我们把只要读者—写者问题利用信号量解决读者-写者问题思想为实现Reader与Writer进程间在读或写时的互斥而设置了一个互斥信号量Wmutex。另外,再设置一个整型变量Readcount表示正在读的进程数目由于只要有一个Reader进程在读,便不允许Writer进程去写。因此,仅当Readcount=0,表示尚无Reader进程在读时,Reader进程才需要执行Wait(Wmutex)操作若wait(Wmutex)操作成功,Reader进程便可去读,相应地,做Readcount+1操作。同理,仅当Reader进程在执行了Readcount减1操作后其值为0时,才须执行signal(Wmutex)操作,以便让Writer进程写又因为Readcount是一个可被多个Reader进程访问的临界资源,因此,应该为它设置一个计数器互斥信号量rmutex读者—写者问题利用信号量解决读者-写者问题思想读者—写者问题读者-写者问题可描述如下:Varrmutex,wmutex:semaphore:=1,1;Readcount:integer:=0;beginparbegin
Reader:begin
repe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省公务员面试模拟3
- 天津申论模拟4
- 陕西行政职业能力模拟8
- 2024年昆山制衣厂员工劳动合同
- 2024年精简版融资租赁合同
- 2024年工程施工安全责任书
- 二手集资房买卖简单合同范本2024年
- 贵州省公务员面试真题汇编16
- 2024年中央空调改造安装工程合同
- 2024年简单的赡养协议书范本
- 职场人际关系与沟通课件
- 部编版八年级历史上册《戊戌变法》评课稿
- 第九版内科学-高血压-课件
- Lesson13Atschool(课件)冀教版英语四年级上册
- 幕墙操作工安全操作规程
- 《小学美术活动中学生创新思维培养的研究》课题研究开题报告结题报告
- QC(质量管理)培训课件
- 公交车站突发事件处置方案
- 《汉字应用水平测试题》练习试卷及其参考答案
- 新建小学建设工程项目建议书
- 药品生产质量管理规范-细胞治疗产品附录
评论
0/150
提交评论