第2章进程管理下_第1页
第2章进程管理下_第2页
第2章进程管理下_第3页
第2章进程管理下_第4页
第2章进程管理下_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

§2.3进程同步

进程同步的主要任务:对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。2.3.1进程同步的基本概念1.两种形式的制约关系(1)间接相互制约关系源于资源共享(互斥方式)(2)直接相互制约关系源于进程合作(同步方式)1互斥:同步的特例,多个操作决不能同时执行,如:进程A和进程B共用一台打印机的情形。同步:对于进程操作的时间顺序所加的某种限制,如输入进程I和计算进程C共用一个缓冲区的情形,输入进程I必须在计算进程C之前完成。§2.3进程同步A打印机BI缓冲区C2

必须互斥访问的资源称为临界资源(或者说一次仅允许一个进程访问的资源)引起不可再现性是因为临界资源没有互斥访问。

例如,打印机、变量、表格、队列等。2.临界资源—互斥访问例如:有两个进程共享一个count变量,当两个进程按以下顺序执行时:P1 P2n1=count; n2=count;n1=n1+1; n2=n2+1;count=n1; count=n2;假定count初值为0,如果先执行P1,后执行P2,最后count变量的值为23但如果按下列顺序并发执行:P1:n1=count;P2:n2=count;P1:n1=n1+1;count=n1;P2:n2=n2+1;count=n2;

尽管P1与P2都有各自对count做了加1操作,但最后的count却是增加1,即发生了与执行顺序有关的错误。

为防止这种错误,对临界资源count必须互斥访问。即P1访问count变量,P2就不能访问;当P1访问结束时,才允许P2访问count变量。

2.临界资源—互斥访问4

每个进程中访问临界资源的那段代码对欲访问的临界资源进行检查,………………进入区若此刻未被访问,设正在访问的标志访问临界资源………………临界区将正在访问的标志恢复为未被访问的标志………退出区其余部分………………剩余区repeat

entrysection

criticalsection

exitsection

remaindersectionuntilfalse3.临界区53.临界区对临界资源设一访问标志flag对flag检查,看是否被访问?该进程可以进入临界区,并设置已被访问标志该进程不能进入临界区YN进入临界区流程64.同步机制应遵循的准则

空闲让进

无进程处于临界区内时,可让一个申请进入该临界区的进程进入。忙则等待

临界区内有进程时,申请进入临界区的进程必须等待。有限等待进程进入临界区的请求,必须在有限的时间内满足。让权等待等待进入临界区的进程,必须立即放CPU。7信号量机制中心街道楼宇1小区A小区B城市公路进程82.3.2解决方法——信号量机制

1、信号量机制

1965年荷兰学者Dijkstra提出信号量机制,是一个卓有成效的进程同步机制。2、信号量的发展整型信号量、记录型信号量、AND型信号量和信号量集机制。

92.3.2解决方法——信号量机制

信号量是一种数据结构信号量的值与相应资源的使用情况有关信号量的值仅由P、V操作改变10整型信号量整型量,除初始化外,仅能通过两个原子操作来访问。P操作wait(S):

WhileS<=0dono-op; S:=S-1;V操作signal(S):

S:=S+1;P、V操作是原子操作,不可中断。信号量S:表示资源个数

S>0表示可获得这个临界资源的进程个数

S<=0表示等待该临界资源的进程个数P操作:申请资源V操作:释放资源2.3.2解决方法——信号量机制11整型信号量未遵循“让权等待”原则,导致忙等

引入整型变量value(代表资源数目)、进程链表指针L(链接所有等待进程)2记录型信号量其中:

信号量值

—表示某种资源的数量。

等待队列指针—当信号量值为负时,表示该类资源已分配完,等待该类资源的进程排在等待队列中。L为指向该信号量等待队列的指针。

定义:

typesemaphore=recordvalue:integer;信号量值

L:listofprocess

信号量等待队列指针

end;12定义:VARS:Semaphore;

1.P操作(wait原语)每作一次P操作,申请分配一个单位的资源。

P(S)—对信号量S进行P操作。

①S.value:=S.Value-1;②若S.Value≥0进程继续执行。若S.Value<0进程阻塞,并进入等待队列(L)。2.V操作(Signal原语)

V(S)—对信号量S进行V操作,释放一个单位的资源。①S.value:=S.Value+1;②若S.Value>0

进程继续执行。若S.Value≤0

则释放S等待队列中的一个进程,使之转为就绪状态。2记录型信号量P、V操作原语13

P操作

ProcedureP(s)

Vars:semaphore;

begins.value:=s.value-1;ifs.value0thenblock(s.L);

end;

V操作

ProcedureV(s)

Vars:semaphore;

begins.value:=s.value+1;ifs.value≤0thenwakeup(s.L);

end;P、V操作的算法描述2记录型信号量14

说明:

S.Value>0

时,其值表示某类资源可用数量。

S.Value≤0时,其绝对值表示在信号量队列中等待该资源的进程数。②

P、V操作有严格的不可分割性;执行过程不允许中断;

③P、V操作成对出现。(根据同步机制的原则,分析P、V操作的特点,)?问题?如何使用P、V操作实现同步机制?实现同步机制基本思想是:加锁、解锁

考虑:

如何控制互斥地使用临界资源?

如何控制进程并发执行的时序?2记录型信号量153信号量的应用

1.利用信号量实现进程互斥例1:用P(wait)、V(signal)原语实现3个进程(A、B、C)互斥进入临界区。设互斥信号量mutex=1A B C…… …… ……P(mutex) P(mutex) P(mutex)CSA CSB CSCV(mutex) V(mutex) V(mutex)…… …… ……16

序号调用进程被调用操作进入临界区运行的进程mutex值在mutex上等待的进程112AP(mutex)A03BP(mutex)A-1B4CP(mutex)A-2BC5AV(mutex)B-1C6BV(mutex)C07CV(mutex)13信号量的应用

17

例2:以计算进程C和打印进程P为例来描述两个进程的合作关系,试用P、V原语实现。设:计算进程与打印进程共用一个缓冲区,为此可设置两个信号量:full表示缓冲区满,令full=0;empty表示缓冲区空,令empty=13信号量的应用

18计算进程与打印进程的P、V描述如下:计算进程C…产生一个数据P(empty);往缓冲区送数据V(full);…打印进程P…P(full);从缓冲区取数V(empty);输出结果

…3信号量的应用

19S1S2S3S4S5S6abcdegf图2-10前趋图举例例3:S1,S2,S3,S4,S5,S6为一组合作进程,其前趋图如图,试用P、V原语实现这6个进程的同步。

3信号量的应用

20Vara,b,c,d,e,f,g:semaphore:=0,0,0,0,0,0,0;Begin parbegin beginS1;signal(a);signal(b);end; beginwait(a);S2;signal(c);signal(d);end; beginwait(b);S3;signal(e);end; beginwait(c);S4;signal(f);end; beginwait(d);S1;signal(g);end; beginwait(e);wait(f);wait(g);S6;end; parendend3信号量的应用

21思考:利用信号量实现前趋关系(p57)P1P3P4P2P5P63信号量的应用

222.3进程同步4.AND型信号量上述进程互斥问题,多个进程共享一个临界资源。两个进程A和B,共享数据D和E,为其分别设置互斥信号量Dmutex和Emutex,初值为1。ProcessA:

wait(Dmutex);wait(Emutex);ProcessB:

wait(Emutex);wait(Dmutex);ProcessA:wait(Dmutex);于是Dmutex=0ProcessB:wait(Emutex);于是Emutex=0ProcessA:wait(Emutex);于是Emutex=-1A阻塞ProcessB:wait(Dmutex);于是Dmutex=-1B阻塞设执行过程为共享的资源越多,死锁的可能越大232.3进程同步

AND同步机制的基本思想:将进程在整个运行过程中需要的所有资源,一次性全部分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其他所有可能为之分配的资源,也不分配给它。即对临界资源的分配采取原子操作。Swait(S1,S2,…,Sn)ifS1>=1and…andSn>=1thenfori:=1tondoSi:=Si-1;endforelsePlacetheprocessinthewaitingqueueassociatedwiththefirstSifoundwithSi<1,andsettheprogramcountofthisprocesstothebeginningofSwaitoperationendifSsignal(S1,S2,…,Sn)fori:=1tondoSi:=Si+1;RemovealltheprocesswaitinginthequeueassociatedwithSiintothereadyqueueendfor245信号量集(略)251.P、V操作是

。A.两条低级进程通信原语B.两组不同的机器指令C.两条系统调用命令D.两条高级进程通信原语2.若P、V操作的信号量S初值为2,当前值为-1,则表示有

等待进程。A.0个B.1个C.2个D.3个3.用P、V操作管理临界区时,信号量的初值应定义为

。A.一1B.0C.1D.任意值4.对于两个并发进程,设互斥信号量为mutex,若mutex=0,则

。A.表示没有进程进入临界区B.表示有一个进程进入临界区C.表示有一个进程进入临界区,另一个进程等待进入D.表示有两个进程进入临界区答:ABCB习题265.设有5个进程共享一个互斥段,如果最多允许有3个进程同时进入互斥段,则所采用的互斥信号量的初值应是

。A.5B.3C.1D.06.两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来信息,或者建立某个条件后再向前执行,这种关系是进程间的(

)关系。

A.同步B.互斥C.竞争D.合作7.在一段时间内,只允许一个进程访问的资源称为(

)。

A.共享资源B.临界区C.临界资源D.共享区8.系统中有N个进程,则进程就绪队列中最多有()个进程。

A.NB.N-1C.N-2D.N-39.程序和与它有关的进程的对应关系是()。A一对一B一对多C多对一D多对多习题答:BACBB271.进程A和进程B都要使用系统中同一台打印机,为了保证打印结果的正确性,两个进程要先后分别使用打印机,这属于进程的同步关系。(×)2.临界资源是指在一段时间内,一次仅允许一个进程使用的共享资源。(√)3.信号量机制是一种有效的实现进程同步与互斥的工具。信号量只能由P、V操作来改变。(√)4.V操作是对信号量执行加1操作,意味着释放一个单位资源,如果加1后信号量的值小于等于零,则从等待队列中唤醒一个进程,现进程变为阻塞状态,否则现进程继续进行。(×)5.利用信号量的P,V操作,进程之间可以交换大量信息。(×)(×)6.用户为每个自己的进程创建PCB,并控制进程的执行过程。(√)7.原语是一种不可分割的操作。(√)8.对临界资源应采取互斥访问方式来实现共享。习题282.3.4管程机制一种新的进程同步工具管程的定义:

系统中的各种硬件和软件资源,均可用数据结构加以抽象的描述,即用少量信息和对该资源所执行的操作来表征该资源,而忽略它们的内部结构和实现细节.

我们把这样一组相关的数据结构和过程一并称为管程(资源管理程序,如队列的定义及其操作).Hansan对管程的定义(P57)292.4经典进程同步问题2.4.1生产者--消费者问题2.4.2哲学家进餐问题2.4.3读者--写者问题30

问题?

一组生产者进程

Pi(P1,P2,…Pk)一组消费者进程

Ci(C1,C2,…Cm)互斥使用由n个缓冲区组成的缓冲池。inoutCiPi一、生产者—消费者问题31

1、同步关系:当缓冲池放满产品时生产者必须等待。

定义生产者进程同步信号量:

empty—

表示空闲缓冲区数。

0≤empty≤nempty初值为;当缓冲池空时,消费者进程必须等待。

定义消费者进程同步信号量:

full—表示有产品的缓冲区数。

0≤full≤nfull初值为;分析

n0

2、互斥关系:两组进程中的每个进程必须互斥的使用缓冲区。定义公共互斥信号量:mutex初值为1

3、定义:

in,out分别表示首空缓冲区序号及首满缓冲区序号。inoutCiPi一、生产者—消费者问题32

empty—表示空闲缓冲区数。初值为n

empty=0缓冲区全满,生产者进程不能工作。

full—表示有产品的缓冲区数。初值为0

full=0缓冲区全空,消费者进程不能工作。inoutCiPi一、生产者—消费者问题33

empty—表示空闲缓冲区数。初值为n

empty=0缓冲区全满,生产者进程不能工作。

full—表示有产品的缓冲区数。初值为0

full=0缓冲区全空,消费者进程不能工作。outCiPiin一、生产者—消费者问题34

empty—表示空闲缓冲区数。初值为n

empty=0缓冲区全满,生产者进程不能工作。

full—表示有产品的缓冲区数。初值为0

full=0缓冲区全空,消费者进程不能工作。inoutPiCi一、生产者—消费者问题35生产者—消费者问题算法:生产者进程:

生产一个产品m;

...

P(empty);

P(mutex);

将产品m放入缓冲区;

in:=(in+1)modn;

V(mutex);

V(full);

Varmutex,empty,full:semaphore:=1,n,0;

buffer:array[0..n-1]ofitem;in,out:0..n-1:=0,0;

消费者进程:

P(full);

P(mutex);

从缓冲区取产品m;

out:=(out+1)modn;

V(mutex);

V(empty);检查有否空缓冲区检查缓冲区中有无进程释放缓冲区通知消费者进程使用检查缓冲区中是否有产品检查缓冲区中有无进程释放缓冲区通知生产者进程使用36生产者—消费者问题算法:生产者进程:生产一个产品m;

...

P(empty);

P(mutex);将产品m放入缓冲区;

in:=(in+1)modn;

V(mutex);

V(full);

消费者进程:

P(full);

P(mutex);从缓冲区取产品m;

out:=(out+1)modn;

V(mutex);

V(empty);问题1。能否交换两个P操作?能否交换两个V操作?为什么?2。如果缺少操作:P(empty)或P(full),结果如何?37intin=0,out=0;itembuffer[n];semaphoremutex=1,empty=n,full=0;voidproceducer(){ do{ produceraniteminnexp;…

wait(empty);wait(mutex);buffer(in):=nexp;in=(in+1)%n;

signal(mutex);signal(full);

}while(TRUE);}

38

void

consumer(){

do{ wait(full);wait(mutex);nextc:=buffer[out];out=(out+1)%n;

signal(mutex);signal(empty);consumetheiteminnexc;……}while(TRUE);}voidmain(){cobegin proceducer();consumer();coend}注意:1。每个程序中用于实现互斥的wait(mutex)和signal(mutex)必须成对地出现。2。对资源信号量empty和full的wait和signal操作,同样需要成对地出现,但处于不同的程序中。3。在每个程序中的多个wait操作顺序不能颠倒。应先执行对资源信号量的wait操作,再执行对互斥信号量的wait操作,否则可能引起进程死锁。4.在每个程序中的多个signal操作顺序无要求。392.4经典进程的同步问题2.利用AND信号量解决生产者——消费者问题intin=0,out=0;itembuffer[n];semaphoremutex=1,empty=n,full=0;voidproceducer(){ do{ produceraniteminnexp;…

Swait(empty,mutex);buffer(in):=nexp;in=(in+1)%n;

Ssignal(mutex,full);

}while(TRUE);}

402.4经典进程的同步问题2.利用AND信号量解决生产者——消费者问题void

consumer(){

do{

Swait(full,mutex);nextc:=buffer[out];out=(out+1)%n;

Ssignal(mutex,empty);

consumetheiteminnexc;……}while(TRUE);}

412.4经典进程的同步问题403212.4.2哲学家进餐问题

五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在桌子上有五只碗和五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐。进餐毕,放下筷子继续思考。可见:相邻两位不能同时进餐;最多只能有两人同时进餐。422.4经典进程的同步问题2.4.2哲学家进餐问题分析筷子是临界资源,在一段时间内只允许一个哲学家使用用一个信号量表示一支筷子,由这五个信号量构成信号量组。Varchopstick:array[0,…,4]ofsemaphore;所有的信号量被初始化为1432.4经典进程的同步问题1.利用记录型信号量解决哲学家进餐问题

放在桌子上的筷子是临界资源,在一段时间内只允许一个哲学家使用。为实现对筷子的互斥使用,用一个信号量表示一只筷子,五个信号量构成信号量数组。

semaphorechopstick[5]={1,1,1,1,1};

所有信号量均被初始化为1。44第i位哲学家的活动可描述为:

do{wait(chopstick[i]);wait(chopstick[(i+1)%5]);…//eat;…signal(chopstick[i]);signal(chopstick[(i+1)%5]);…//think;}while[TRUE];当哲学家进餐完毕,先放下左边的筷子,再放下右边的筷子。当哲学家饥饿时,总是先拿左边的筷子,再拿右边的筷子。452.4经典进程的同步问题算法虽能保证相邻两位不会同时进餐,但有可能引起死锁。问题:假如五位哲学家同时饥饿而各自拿起左边的筷子时,就会使五个信号量chopstick均为0,当他们再试图去拿右边的筷子时,都将因无筷子可拿而无限等待。4032146解决方法:至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕后释放出他用过的两只筷子,从而使更多的哲学家能够进餐。仅当哲学家的左右两只筷子均可用时,才允许他拿起筷子进餐。规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;偶数号哲学家则相反。472.4经典进程的同步问题2.利用AND信号量机制解决哲学家进餐问题在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐。本质上是AND同步问题。48semaphorechopstickchopstick[5]={1,1,1,1,1};do{……//think;……Swait(chopstick[(i+1)%5],chopstick[i]);…… //eat; ……Ssignal(chopstick[(i+1)%5],chopstick[i]);

}whiletrue;492.4.3读者——写者问题50读者——写者问题问题描述一个数据文件或记录可被多个进程共享。其中,有些进程要求读;而另一些进程要求写或修改。只要求读的进程称为“Reader进程”,其它进程称为“Writer进程”。允许多个Reader进程同时读一个共享对象,不允许一个Writer进程和其它Reader进程或Writer进程同时访问共享对象。所谓读者——写者问题是指保证一个Writer进程必须与其它进程互斥地访问共享对象的同步问题。51(2)用P、V操作实现读者-写者进程同步问题①设wmutex=1表示读者进程与写者进程,写者进程与写者进程之间的互斥信号量。②rcount=0;由于读者进程与读者进程之间不互斥,但要对多个读者读数据库文件进行计数。③rmutex=1;由于rcount是临界资源,因此在读的过程中,需要对rcount变量进行互斥访问。通过上述分析,读者进程、写者进程的同步描述如下:读者——写者问题52读者——写者问题53分析:①在读者进程中,可以有多个读者在读数据库,对读者进程的计数要互斥,以免发生错误,同时注意当第一个读者进程读时,一定要封锁写者进程。当读者进程逐渐撤离时,也要对计数变量进行互斥操作,若当前为最后一个读者进程读,则唤醒写者进程。②当写者进程在进行写操作时,可以封锁其它读者或写者进程,当写操作完成时,唤醒其它读者或写者进程。读者——写者问题54例题例1:桌子上有一只盘子,最多可容纳两个水果,每次只能放入或取出一个水果,爸爸专向盘子中放苹果(apple),妈妈专向盘子中放橘子(orange),儿子专等吃盘子中的橘子,女儿专等吃盘子中的苹果,请用P.V操作来实现爸爸、妈妈、儿子、女儿间的同步与互斥关系。

Varmutex,empty,apple,orange:semphore:=1,2,0,0;爸爸妈妈女儿儿子repeat repeatrepeatrepeatP(empty)P(empty)P(apple)P(orange)

P(mutex)P(mutex)P(mutex)P(mutex)放苹果放橘子取苹果取橘子

V(mutex)V(mutex)V(mutex)V(mutex)

V(apple)V(orange)V(empty)V(empty)untilfalse;untilfalse;untilfalse;untilfalse;55例题例2:桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。561.在生产者—消费者问题中,能否将生产者进程的wait(empty)和wait(mutex)语句互换,为什么?不能。因为这样可能导致系统死锁。当系统中没有空缓冲时,生产者进程的wait(mutex)操作获取了缓冲队列的控制权,而wait(empty)导致生产者进程阻塞,这时消费者进程也无法执例题572.简述进程的几种状态和引起状态转换的典型原因,以及相关的操作原语。进程的基本状态有:新、就绪,阻塞,执行、挂起和终止六种。新到就绪:交换,创建原语就绪到执行:进程调度执行到阻塞:I/O请求,阻塞原语阻塞到就绪:I/O完成,唤醒原语执行到就绪:时间片完阻塞到挂起:挂起原语挂起到就绪:唤醒原语执行到终止:进程执行完毕例题58

2.三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。

59定义信号量S1控制P1与P2之间的同步;S2控制P1与P3之间的同步;empty控制生产者与消费者之间的同步;mutex控制进程间互斥使用缓冲区。程序如下:

Var

s1=0,s2=0,empty=N,mutex=1;

Parbegin

P1:begin

X=produce();

P(empty);

P(mutex);

Put();

If

x%2==0

V(s2);

else

V(s1);

V(mutex);

end.

P2:begin

P(s1);

P(mutex);

Getodd();

Countodd():=countodd()+1;

V(mutex);

V(empty);

end.

P3:begin

P(s2)

P(mutex);

Geteven();

Counteven():=counteven()+1;

V(mutex);

V(empty);

end.

Parend.

602.5进程通信进程通信是指进程之间的信息交换。进程之间的互斥和同步——低级通信(因其所交换的信息最少)如在进程互斥中,进程通过只修改信号量来向其它进程表明临界资源是否可用在生产者-消费者问题中,生产者通过缓冲池将所生产的产品传送给消费者。信号量机制作为通信工具的缺点:(1)效率低(2)通信对用户不透明。低级通信中共享数据的设置,数据的传送,进程的互斥都是由程序员去实现,操作系统只提供共享存储器,因此非常不方便612.5进程通信

高级进程通信是指用户可直接利用操作系统所提供的一组通信命令,高效地传送大量数据的一种通信方式。操作系统隐藏了进程通信的细节,对用户透明,减少了通信程序编制上的复杂性。622.5进程通信2.5.1进程通信的类型低级通信高级通信(三大类)共享存储器系统消息传递系统(主要用于网络)管道通信(首创于Unix系统)

632.5进程通信1.共享存储器系统在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。(1)基于共享数据结构的通信方式(2)基于共享存储区的通信方式642.5进程通信

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

程序员:公用数据结构的设置及对进程间同步的处理操作系统:提供共享存储器(如缓冲池、缓冲区)

特点:低效,只适合传递相对少量的数据,属于低级通信。652.5进程通信

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

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

通信过程:(1)向系统申请一个或多个分区(2)获得分区后即可读/写.特点:高效,速度快。662.5进程通信2.消息传递系统(主要用于网络)操作系统隐藏了通信的实现细节,简化了通信程序编制的复杂性。信息单位:格式化的消息(报文)是目前的主要通信方式,分为直接通信方式、间接通信方式实现:一组通信命令(原语),具有透明性--->同步的实现。672.5进程通信直接通信方式发送进程直接把消息发送给目标进程发送进程和接收进程都以显式方式分别提供对方的标识符系统提供两条通信原语Send(Receiver,message);Receive(Sender,message);例如:Send(P2,m1);Receive(P1,m1);试用直接通信方式解决生产者-消费者问题682.5进程通信解决生产者一消费者问题repeat…produceaniteminnextp;…Send(consumer,nextp);untilfalse;

repeatReceive(producer,nextp);…Consumertheiteminnextc;untilfalse;692.5进程通信间接通信方式进程之间的通信需要通过某种中间实体,该实体用来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方发给自己的消息。这种中间实体成为信箱消息在信箱中可以安全地保存,只允许核准的目标用户随时读取,故可实现非实时通信。70间接通信方式

信箱可由操作系统创建,也可由用户进程创建,创建者是信箱的拥有者。据此,可把信箱分为以下三类。1)私用信箱用户进程建立,作为该进程的一部分。拥有者有权读消息,其它用户只能发送。采用单向通信链路。进程结束时信箱也消失。2.5进程通信712)公用信箱它由操作系统创建。提供给系统中的所有核准进程使用。进程既发送也可取出。采用双向通信链路的信箱来实现。系统运行期间始终存在。3)共享信箱它由某进程创建,创建指出共享进程(用户)的名字。信箱的拥有者和共享者,都有权从信箱中取走发送给自己的消息。2.5进程通信72

在利用信箱通信时,在发送进程和接收进程之间,存在以下四种关系:

(1)一对一关系。这时可为发送进程和接收进程建立一条两者专用的通信链路,使两者之间的交互不受其他进程的干扰。

(2)多对一关系。允许提供服务的进程与多个用户进程之间进行交互,也称为客户/服务器交互(client/serverinteraction)。

(3)一对多关系。允许一个发送进程与多个接收进程进行交互,使发送进程可用广播方式,向接收者(多个)发送消息。

(4)多对多关系。允许建立一个公用信箱,让多个进程都能向信箱中投递消息;也可从信箱中取走属于自己的消息。2.5进程通信733.管道通信(首创于Unix系统)

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

向管道提供输入的进程(称写进程),以字符流的形式将大量数据送入管道,而接受管道输出的进程(读进程)可从管道中接收数据。该方式首创于UNIX,它能传送大量数据,被广泛采用。

发送进程接收进程字符流方式写入读出先进先出顺序2.5

温馨提示

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

评论

0/150

提交评论