cha3进程同步与通信_第1页
cha3进程同步与通信_第2页
cha3进程同步与通信_第3页
cha3进程同步与通信_第4页
cha3进程同步与通信_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

第二章复习程序执行的两种方式,主要区别进程的概念进程与程序的主要区别进程的存储方式进程的七种状态及其转换挂起状态和活动状态的区别挂起状态和阻塞状态的区别什么是操作系统的内核什么是原语核心态和用户态的区别引入进程和线程的主要目的进程和线程的区别第三章进程同步与通信3.1同步与互斥的概念3.2互斥的实现方法3.3信号量3.4经典的进程同步问题3.5管程3.6进程通信3.1进程间的关系直接制约关系:2获得1的消息才可继续运行进程1进程2消息间接制约关系:1释放资源后2才可使用进程-进程关系资源进程1进程2进程-资源-进程关系临界资源临界资源一次只允许一个进程使用的资源物理设备,变量,数据……临界区进程中访问临界资源的代码段临界资源的例子AR1=XR1=R1+1X=R1BR2=XR2=R2+1X=R2R1=XR2=XR1=R1+1X=R1R2=R2+1X=R2X3344进程A和B共享变量X,并对X进行访问:临界资源的正确使用进入区检查是否可以进入 可以-设置资源的使用标志 不行-等待临界区使用临界资源的代码退出区清除资源使用标志剩余区不使用临界资源的部分进入区临界区退出区剩余区剩余区临界区的使用规则每次只能一个进程进入临界区进程在临界区内停留有限时间资源空闲时让申请进程在有限时间内进入空闲让进忙则等待有限等待让权等待什么是同步多个进程之间有合作关系各自的执行速度不同在关键点上要协调进度计算进程打印进程计算进程快-缓冲装满-计算进程等待(打印进程)打印进程快-缓冲用完-打印进程等待(计算进程)缓冲同步过程计算进程打印进程数据用完,等待执行等待生产数据,发送通知数据用完,等待时间什么是互斥多个进程共享某个资源资源每次只给一个进程使用一个进程释放后另个进程才可使用进程1进程2i个进程竞争进程1获得,其他进程等待进程1释放,进程j获得,其他进程等待打印机……互斥过程进程1进程2获得资源执行执行等待时间发出申请未获得等待释放资源,通知获得资源执行释放资源,通知3.2互斥的实现方法互斥算法硬件方法锁机制假设两个进程:P0P1具有互斥关系P0P1是循环进程算法1设置整型变量turn=i表示允许进程i谁进入临界区Intturn=0P0:Do{Whileturn=1;临界区Turn=1;剩余区}WhiletrueP1:Do{Whileturn=0;临界区Turn=0;剩余区}Whiletrue可以实现互斥问题:强迫两进程轮流进入临界区违反“空闲让进”原则算法2设置整型数组flag[]表示进程状态Booleanflag[2]={false,false}P0:Do{Whileflag[1];flag[0]=true;临界区flag[0]=false;剩余区}WhiletrueP1:Do{Whileflag[0];flag[1]=true;临界区flag[1]=false;剩余区}Whiletrue问题:有时不能实现互斥1234abcd1-通过a-通过2b3c同时进入临界区算法3设置整型数组flag[]表示进程的愿望Booleanflag[2]={false,false}P0:Do{flag[0]=true;

Whileflag[1];临界区flag[0]=false;剩余区}WhiletrueP1:Do{flag[1]=true;Whileflag[0];临界区flag[1]=false;剩余区}Whiletrue问题:有时不能实现互斥1234abcd1a2-循环b-循环同时希望互相等待算法4设置整型数组flag[]表示进程的愿望设置整型变量turn表示允许谁进入临界区P0:Do{flag[0]=true;

Turn=1;Whileflag[1]andturn==1;临界区flag[0]=false;剩余区}WhiletrueP1:Do{flag[1]=true;Turn=0;Whileflag[0]andturn==0;临界区flag[1]=false;剩余区}Whiletrue1234abcd硬件方法主要思想用一条指令完成标志的检查和修改禁止中断方法硬件指令方法禁止中断方法限制了并行——关中断后不会发生进程切换,降低执行效率系统失去控制——当进程关中断后不再开中断,系统会崩溃P0:关中断;临界区开中断;剩余区P1:关中断;临界区开中断;剩余区硬件指令方法-TS指令

lock初值为假,即资源可用,因此ts返回结果为真,锁定资源,用完资源后lock恢复为假P0:Whilets(lock);临界区Lock=false;剩余区P1:Whilets(lock);临界区Lock=false;剩余区Booleants(booleanx){Booleanold;old=x;x

=true;Returnold;}lock初值ts返回值lock终值truetruetruefalsefalsetrue硬件指令方法-swap指令P0:Key=true;Whilekeyswap(lock,key);临界区Lock=false;剩余区Swap(booleana,booleanb){Booleantemp;temp=a;a=b;b=temp;}lock初值key终值lock终值truetruetruefalsefalsetrueP1:Key=true;Whilekeyswap(lock,key);临界区Lock=false;剩余区当key=false才能进入临界区硬件方法的特点优点适用范围广:对进程一视同仁简单:设置方法支持多个临界区:对资源一视同仁缺点忙等待:空循环,违反让权等待原则饥饿现象:随机选择,违反有限等待原则锁机制使用锁变量表示资源状态w=0资源空闲w=1资源被占用使用原语对锁变量进行操作加锁lock(w)开锁unlock(w)锁的使用lock(w){whilew==1;w=1;}unlock(w){w=0;}P0:……lock(w);临界区;unlock(w);……P1:……lock(w);临界区;unlock(w);……通过原语保证资源状态的检查和修改作为一个整体来执行,从而能正确的实现互斥3.3信号量信号量的构成整型变量s>0资源的可用数量=0资源正好够用<0资源的缺少数量(q中的进程数)队列q等待使用该资源的进程信号量的操作P操作(wait操作)- 申请资源V操作(signal操作)-释放资源信号量的定义structsemaphore{intcount;queuetypequeue;};wait(semaphores){s.count--;ifs.count<0{阻塞该进程;进程插入s.queue;}}signal(semaphores){s.count++;ifs.count<=0{从s.queue取出头个进程;进程插入就绪队列;}}P操作V操作信号量及P、V操作讨论(续1)1)信号量的物理含义:

S>0表示有S个资源可用

S=0表示无资源可用

S<0则|S|表示S等待队列中的进程个数P(S):表示申请一个资源V(S):表示释放一个资源。信号量的初值应该大于等于0【思考题】司机进程:while(1){启动车辆正常驾驶到站停车}…售票员进程:while(1){关门售票开门}…用P.V操作解决司机与售票员的问题司机进程:while(1){

启动车辆正常驾驶

到站停车}…售票员进程:while(1){关门

售票开门}…同步信号量:S1——开车信号量(初值为0)S2——开门信号量(初值为0)P(S1)V(S1)V(S2)P(S2)信号量及P、V操作讨论(续2)2)P.V操作必须成对出现,有一个P操作就一定有一个V操作当为互斥操作时,它们同处于同一进程当为同步操作时,则不在同一进程中出现如果P(S1)和P(S2)两个操作在一起,那么P操作的顺序至关重要。一个同步P操作与一个互斥P操作在一起时同步P操作在互斥P操作前而两个V操作无关紧要信号量及P、V操作讨论(续3)3)P、V操作的优缺点优点:简单,而且表达能力强(用P、V操作可解决任何同步互斥问题)缺点:不够安全,P、V操作使用不当会出现死锁;遇到复杂同步互斥问题时实现复杂三、利用P、V操作解决合作进程的执行次序

若干个进程为了完成一个共同任务而并发执行,在这些进程中,有些进程之间有次序的要求,有些进程之间没有次序的要求,为了描述方便,可以用一个图来表示进程集合的执行次序。如图P1P2P3P4P1P2P3P4P5P6P1P2P3P4sf1)串行2)串/并行3)并行例题1如图,试用信号量实现这三个进程的同步。

Pa:…V(SB);V(SC);Pb:P(SB);…Pc:P(SC);…PaPbPcSBSC为进程Pa和Pb设置共享公用信号量SB,为进程Pa和Pc设置共享公用信号量SC,初值均为0【思考题1】如图,试用信号量实现这三个进程的同步。PaPbPcSBSC【思考题2】如图,试用信号量实现这6个进程的同步S12S13S14S45S26P3P1P2P4P5P6S35S56为进程P1和P2设置共享公用信号量S12,

P1和P3设置共享公用信号量S13,

P1和P4设置共享公用信号量S14,

P2和P6设置共享公用信号量S26,

P3和P5设置共享公用信号量S35,

P4和P5设置共享公用信号量S45,

P5和P6设置共享公用信号量S56,初值均为0解P4:

P5:

P6:P(S14);P(S35);P(S26);…P(S45);P(S56);…

V(S45);V(S56);P1:P2:P3:…P(S12);P(S13)V(S12);…

V(S13);V(S14);V(S26);V(S35)

总结进程互斥:在OS中,当某一进程正在访问cs时,就不允许其它进程来读写(访问),否则就会发生后果无法估计的错误,进程之间的这种相互制约关系为进程互斥。进程同步:并发进程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通消息,称为进程同步。进程同步与互斥关系:都反映了在异步环境下并发进程间的相互制约关系。可归于同步范畴,但互斥是同步问题的一个特例,互斥解决临界区的使用,同步是并发进程在一些关键点上需互相等待互发消息。3.4经典的进程同步问题

生产者/消费者问题读者/写者问题哲学家进餐问题生产者/消费者问题描述通过一个有界缓冲池(包含N个缓冲区)可以把一群生产者p1,p2…,pm,和一群消费者Q1,Q2,…,Qn联系起来。如图只要缓冲池未满,生产者就可以把消息送入缓冲池;只要缓冲池未空,消费者就可以从缓冲区中取走消息。图....生产者(m):P放消息消费者(n):Q取消息Buffer(n-1)n个缓冲区(Buffer)Buffer(0)Buffer(i)生产消息;申请空缓冲区;放消息;指针↘移动;满缓冲区+1;申请满缓冲区;取消息;指针↗移动;释放空缓冲区;消费消息;Buffer(i)i:0,n-1i=(i+1)%nBuffer(j)j:0,n-1j=(j+1)%n同步信号量:S1空缓冲区数,n;S2满缓冲区数,0。互斥信号量:mutex,1图生产者(m):P消费者(n):Q生产消息;申请空缓冲区;放消息;指针↘移动;满缓冲区+1;申请满缓冲区;取消息;指针↗移动;释放空缓冲区;消费消息;Buffer(i)i:0,n-1i=(i+1)%nBuffer(j)j:0,n-1j=(j+1)%n同步信号量:S1空缓冲区数,n;S2满缓冲区数,0。互斥信号量:mutex,1buffer:array[0..n-1]ofmessage;i,j=0;生产者P:i=0;

while(1){

生产消息;

P(S1);P(mutex);

往Buffer[i]放消息;i=(i+1)%n;

V(mutex);V(S2);

};消费者Q:j=0;while(1){

P(S2);P(mutex);

从Buffer[j]取消息;j=(j+1)%n;

V(mutex);V(S1);

消费消息;};【思考题】如果生产者消费者问题中的缓冲池是无界的,又该如何解呢?Buffer(0)Buffer(1)...Buffer(i)...生产者(m):P消费者(n):Q生产消息;放消息;指针↘移动;满缓冲区+1;申请满缓冲区;取消息;指针↗移动;消费消息;Buffer(i)i=i+1Buffer(j)j=j+1互斥信号量:mutex,1同步信号量:S1满缓冲区,0。Q:J=0;while(1){

P(S1);P(mutex);

从Buffer[j]取消息;j=j+1;

V(mutex);

消费消息;};互斥信号量:mutex,1同步信号量:S1满缓冲区,0。P:i=0;while(1){

生产消息;

P(mutex);

往Buffer[i]放消息;i=i+1;

V(mutex);

V(S1);

};【练习题】有一个仓库,可以存放A和B两种产品,但要求:(1)

每次只能存入一种产品(A或B)(2)

-N<A产品数量-B产品数量<M。其中,N和M是正整数。试用P、V操作描述产品A与B的入库过程。分析:(1)互斥地使产品入库(2)A-B<M,B-A<N,A产品的数量不能比B产品的数量少N个以上,A产品的数量不能比B产品的数量多M个以上仓库生产产品申请入库A产品入库允许B多放入一个A产品入库B产品入库A-B<M,B-A<N生产产品申请入库B产品入库允许A多放入一个互斥信号量:mutex,1同步信号量:Sa:表示允许产品A比B多入库的数量,初值为M-1;Sb:表示允许产品B比A多入库的数量,初值为N-1

B产品入库进程:

while(1){

生产产品

P(Sb);P(mutex);B产品入库

V(mutex);V(Sa);};A产品入库进程:

while(1){

生产产品;

P(Sa);

P(mutex);A产品入库

V(mutex);

V(Sb);

};读者/写者问题

有两组并发进程:

读者和写者,共享一组数据区要求:允许多个读者同时执行读操作不允许读者、写者同时操作不允许多个写者同时操作第一类:读者优先如果读者来:1)无读者、写者,新读者可以读2)有写者等待写,但有其它读者正在读,则新读者也可以读3)有写者写,新读者等如果写者来:1)无读者,新写者可以写2)有读者,新写者等待3)有其它写者,新写者等待读者操作(Reader):判断读者数,为0则申请数据区;读者数+1;读数据;读者数-1判断读者数,为0则释放数据区;写者操作(Reader):申请数据区;写数据;释放数据区;全局变量:readcount(读者数),0互斥信号量:mutex(临界资源数据区),1 Rmutex(临界资源readcount),1读者操作(Reader):判断读者数,为0则申请数据区;读者数+1;读数据;读者数-1判断读者数,为0则释放数据区;repeatP(Rmutex); ifreadcount=0thenP(mutex);readcount:=readcount+1;V(Rmutex);

读数据;

P(Rmutex);readcount:=readcount-1;ifreadcount=0thenV(mutex);V(Rmutex);untilfalse;全局变量:readcount(读者数),0互斥信号量:mutex(临界资源数据区),1 Rmutex(临界资源readcount),1写者操作(Reader):申请数据区;写数据;释放数据区;写者(Writer):repeat P(mutex);

写;

V(mutex);untilfalse;全局变量:readcount(读者数),0互斥信号量:mutex(临界资源数据区),1 Rmutex(临界资源readcount),1【思考题】写优先修改读者写者问题的算法,使之对写者优先,即一旦有写者到达,后续的读者必须必须等待,无论是否有读者在读。读者操作(Reader):是否有写者正在写或请求写?读者数+1;判断读者数,为1则申请数据区;允许写者申请写;读数据;读者数-1判断读者数,为0则释放数据区;写者操作(Writer):申请写操作;申请数据区;写数据;释放数据区;释放写操作;全局变量:readcount(读者数),0互斥信号量:mutex(临界资源数据区),1;

Rmutex(临界资源readcount),1;

Wmutex(读者、写者互斥,写者与写者互斥),1全局变量:readcount(读者数),0互斥信号量:mutex(临界资源数据区),1;

Rmutex(临界资源readcount),1;

Wmutex(读者、写者互斥,写者与写者互斥),1Repeat P(Wmutex);P(Rmutex); ifreadcount=0thenP(mutex);readcount:=readcount+1;V(Rmutex); V(Wmutex);

读数据;

P(Rmutex);readcount:=readcount-1;ifreadcount=0thenV(mutex);V(Rmutex);untilfalse;写者(Writer):Repeat P(Wmutex); P(mutex);

写;

V(mutex); V(Wmutex);untilfalse;哲学家就餐问题思考思考思考思考思考准备进餐进餐准备进餐进餐问题描述五位哲学家围桌而坐哲学家在思考问题时不需要任何资源,思考完问题后进入进餐态。每人必须获得左右两支筷子才能进餐哲学家i:思考;取左手筷子;取右手筷子;吃通心粉;放左手筷子;放右手筷子;第i根筷子第(i+1)%5根筷子Philosopheri:repeat

思考;

P(fork[i]);P(fork[(i+1)%5]);进食;

V(fork[i]);V(fork[(i+1)%5]);Untilfalse;互斥信号量:筷子fork[i],i取值0-4哲学家进餐问题分析死锁思考思考思考思考思考准备进餐准备进餐准备进餐准备进餐准备进餐思考P(left_stick)P(right_stick)V(left_stick)eatV(right_stick)解决方法:

1、至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕后释放出他用过的两只筷子,从而使更多的哲学家能够进餐。---限制并发执行的进程数

2、仅当哲学家的左右两只筷子均可用时,才允许他拿起筷子进餐。---采用信号量集

3、规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;偶数号哲学家则相反。---保证总会有一个哲学家能同时获得两只筷子而进餐

【思考题】

有一阅览室,读者进入时必须先在一张登记表上进行登记,该表为每一座位列一表目,包括座号和读者姓名。读者离开时要消掉登记信号,阅览室中共有100个座位,请问:(1)为描述读者的动作,应编写几个程序?设置几个进程?进程与程序间的对应关系如何?(2)用类Pascal语言和P,V操作写出这些进程间的同步算法。答:(1)应编写1个程序;设置2个进程;

进程与程序间的对应关系是:多对1。进阅览室(P1):申请空座位;填写登记表;读者+1;就座,阅读;出阅览室(P2):读者-1;消掉登记表;释放空座位;离开阅览室;同步信号量:S1座位数,100;S2读者,0互斥信号量:mutex(临界资源登记表),1(2) begin

S1:=100;(有100个座位)

S2:=0;(阅读者)

mutex:=1;

cobegin

P1:repeat

P(S1);

P(mutex);

登记信息;

V(mutex);

V(S2)

就座,阅读;

untilfalse

coend

endP2:repeat

P(S2)

P(mutex);

消掉信息;

V(mutex);

V(S1);

离开阅览室;

untilfalse2.5管程(monitor)机制同步操作分散:信号量机制中,同步操作分散在各个进程中,使用不当就可能导致各进程死锁;易读性差:要了解对于一组共享变量及信号量的操作是否正确,必须通读整个系统或者并发程序;不利于修改和维护:各模块的独立性差,任一组变量或一段代码的修改都可能影响全局;正确性难以保证:操作系统或并发程序通常很大,很难保证这样一个复杂的系统没有逻辑错误;信号量同步的缺点:2.5.1管程的基本概念管程的定义:管程是关于共享资源的数据结构及一组针对该资源的操作过程所构成的软件模块。管程可增强模块的独立性:引入管程可提高代码的可读性,便于修改和维护,正确性易于保证:条件变量(condition)在管程内部可以说明和使用一种特殊类型的变量----条件变量。每个条件变量表示一种阻塞原因,并不取具体数值--相当于每个原因对应一个队列。

条件变量(condition)同步操作原语C.wait和C.signal:针对条件变量c,执行C.wait(c)的进程将自己阻塞在c队列中,C.signal(c)将c队列中的一个进程唤醒。

C.signal(c)

操作的作用,是重新启动一个被阻塞的进程,但如果没有进程被阻塞,则C.signal(c)操作不产生任何效果,这与信号量机制中的signal操作不同。管程中的多个进程进入当一个进入管程的进程执行唤醒操作时(如进程P唤醒进程Q),管程结构不允许被唤醒的进程重新执行(管程内只能有一个进程)。这种情况有三种可能的解决办法:P等待Q继续,直到Q等待或退出;Hoare采用。Q等待P继续,直到P等待或退出;Lampson和Redell采用。规定唤醒为管程中最后一个可执行的操作,这样被唤醒的进程可以立即执行。管程示意图urgentqueue5.管程的组成管程的组成名称:数据结构说明:一组局部于管程的共享变量操作原语:对共享变量进行操作的一组原语过程(程序代码),初始化代码:对控制变量进行初始化的代码monitorpccharbuffer[n];intnextin,nextout;intcount;conditionnotfull,notempty;append(charx){ifcount==ncwait(notfull);buffer[nextin]=x;nextin=(nextin+1)%n;count++;csignal(notempty);}take(charx){ifcount==0cwait(notempty);x=buffer[nextout];nextout=(nextout+1)%n;count--;csignal(notfull);}将进程阻塞在notfull的队列上2.5.2利用管程解决生产者-消费者问题用管程解决PC问题main(){cobeginproducer;consumer;coend}producer(){charx;whiletrue{(produce(x);

append(x);}}consumer(){charx;whiletrue{(take(x);

consume(x);}}管程机制(复习)引入原因过多信号量的使用,容易造成死锁管程的基本概念把数据及其上的一组操作看作一个整体——管程管程组成局部于管程的局部变量局部于管程的数据初值设置在数据上的一组操作2.6进程的通信进程之间的信息交换低级通信--进程同步进程的同步,简单的信号交换如:锁、信号量高级通信--进程通信高效、大量数据传递2.6.1进程通信的类型1.共享存储器系统

在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。共享存储器系统消息传递系统管道通信系统2.6.1进程通信的类型

基于共享数据结构的通信方式

在这种通信方式中,诸进程公用某些数据结构,借以实现诸进程间的信息交换。

程序员:提供对公用数据结构的设置及对进程间同步的控制操作系统:提供共享存储器

特点:低效,只适合传递相对少量的数据。

基于共享存储区的通信方式

在存储器中划出了一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信。

2.6.1进程通信的类型2.6.1进程通信的类型2.消息传递系统消息传递系统:进程间的数据交换,以格式化的消息为单位。计算机网络:消息称为报文。程序员直接利用系统提供的一组通信命令(原语)进行通信。2.6.1进程通信的类型进程2读出写入进程1写入进程3读出3.管道通信

所谓“管道”,是指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件。

在进程之间通信时,源进程可以直接或间接地将消息传送给目标进程。1.直接通信方式通信原语:Send(Receiver,message);发送一个消息给接收进程Receive(Sender,message);接收Sender发来的消息2.6.2消息传递通信的实现方法1.直接通信方式利用直接通信原语解决生产者——消费者问题

当生产者生产出一个产品(消息)后,便用Send原语将消息发送给消费者进程;而消费者进程则利用Receive原语来得到一个消息。如果消息尚未产生出来,消费者必须等待,直至生产者进程将消息发送过来。Producer:repeat…produceaniteminnextp;…send(consumer,nextp);untilfalse;Consumer:repeatreceive(producer,nextc);…consumetheiteminnextc;untilfalse;1.直接通信方式2.6.2消息传递通信的实现方法2.间接通信方式—信箱消息在信箱中可以安全地保存,只允许核准的目标用户随时读取。

利用信箱通信方式,既可实时通信,又可非实时通信。ABCDE中间实体信箱头(信箱名、口令)信格信格信格信格信格存放多种格式消息定长消息变长消息2.间接通信方式系统为信箱通信提供若干原语:信箱的创建和撤消消息的发送和接收

进程之间要利用信箱进行通信时,必须使用共享信箱。

Send(mailbox,message);

将一个消息发送到指定进程

Receive(mailbox,message);

从指定信箱中接收一个消息2.间接通信方式信箱的分类:私用信箱公用信箱共享信箱利用信箱通信时,发送进程和接收进程之间的四种关系:一对一关系多对一关系一对多关系多对多关系2.6.4消息缓冲队列通信机制

发送进程利用Send原语,将消息直接发送给接收进程;接受进程则利用Receive原语接收消息。1.消息缓冲队列通信机制中的数据结构(1)消息缓冲区typemessagebuffer=recordsender;发送者进程标识符

size;消息长度

text;消息正文

next;指向下一个消息缓冲区的指针

end2.6.4消息缓冲队列通信机制(2)PCB中有关通信的数据项

增加用于对消息队列进行操作和实现同步的信号量,并将它们置入进程的PCB中。typeprocesscontrolblock=record…mq;消息队列队首指针

mutex;消息队列互斥信号量

sm;消息队列资源信号量

…endtext:Hellosize:5sender:Asend(B,a)smmutexmqnext:0text:Hellosize:5sender:Atext:Hellosize:5sender:Areceive(b)发送区a接收区b

进程A

进程B第一消息缓冲区PCB(B)本章基础要点进程间的同步是指进程间在逻辑上的相互制约关系。在进程中访问临界资源的代码称为临界区。为保证进程互斥访问临界资源,应在进程的临界区前设置进入区,在临界区后设置退出区。进程间的相互制约关系有直接制约关系和间接制约关系。临界区是一段程序。本章基础要点并发进程之间的基本关系是合作或共享资源,其中共享资源是指进程之间的一种间接关系。访问临界资源应遵循的准则是:空闲让进、忙则等待、有限等待、让权等待。如果信号量的当前值为-4,则表示系统中在该信号量上有4个等待进程。本章基础要点在操作系统中,Wait、Signal原语是一种低级进程通信原语。除初值外,信号量的值只能通过Wait、Signal操作来改变。对于两个并发进程,设互斥信号量为mutex,若mutex=0则表示:有一个进程进入临界区。用Wait、Signal操作管理临界区时,任何一个进程在进入临界区之前应调用Wait操作,退出临界区时应调用Signal操作。本章基础要点信号量的物理意义是:当信号量值大于0时表示可用资源的数目;当信号量值小于0时,其绝对值为在该信号量上等待的进程个数。信箱通信是一种间接通信方式。利用消息机制实现通信时,应有发送原语和接收原语。进程通信是指进程之间的信息交换。第三章作业1、有一单向行驶公路桥,每次只允许一辆汽车通过。当汽车到达桥头时,若桥上无车,便可上桥;否则需等待,直到桥上的汽车下桥为止。若每一辆汽车为一个进程,请用p,v操作保证汽车按要求过桥。第三章作业SemaphoreS=1;Pass(){到达桥头;P(S);上桥行驶;到达桥的另一端;V(S);}第三章作业2、有3个并发进程R、M、P,它们共享一个循环使用的缓冲区B,缓冲区B共有N个单元。进程R负责从输入设备读信息,每读一个字符后,把它存入到缓冲区B的一个单元中;进程M负责处理读入的字符,若发现读入的字符中有空格符,则把它改成“,”;进程P负责把处理后的字符取出并打印输出。当缓冲区单元中的字符被进程P取出后,则又可用来存放下一次读入的字符。请用PV操作写出它们正确并发执行的程序。提示1、这是一个三进程同步问题,需要考虑该问题中临界资源有哪些;2、三个进程制约关系构成一个

温馨提示

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

评论

0/150

提交评论