配色: 字号:
自考本科计算机网络工程第四章
2012-06-11 | 阅:  转:  |  分享 
  
第七章进程同步与通信7.1进程的顺序性与并发性7.2与时间有关的错误7.3临界区与PV操作7.4进程的互斥7.
5进程的同步7.6进程通信7.7UNIX中的进程同步与进程通信7.8线程概念beginE,W,
Flag:Semaphore;CountE,CountW:integer;CountE:=0;
CountW:=0;E:=W:=Flag:=1;cobeginprocessEasti
(i=1,2,…)beginP(E);IfC
ountE=0ThenP(Flag);CountE:=CountE+1;
V(E);passab;P(E);
CountE:=CountE-1;IfCountE=0ThenV(Flag);
V(E);end;7.7.2UNIX中的进程通信UNIX提供多种通
信机制。1.管道机制(1)无名管道pipe(2)命名管道FIFO2.
消息缓冲机制7.8线程概念7.8.1什么是线程线程:是进程中可独立执行的子任务线程属性:
①线程是进程的一个组成部分。②一个进程可以有多个线程,一个进程的多个线程都在进程的地址空间内活动。③资
源分配的对象是进程,而不是线程。④处理机调度的基本单位是线程而不是进程,但线程使用的资源是进程分到的资源。⑤线
程在执行过程中,需要协作同步。7.8.2进程与线程引入线程的优点:①创建与维护线程的开销比创建
与维护进程的开销小。②线程的通信在同一地址空间进行,通信简便、速度快。③通过线程可以方便有效地实现并行
。进程可以创建多个线程执行同一程序的不同部分。作业:5,7,8,10,11processWestj(j
=1,2,…)beginP(W);IfCoun
tW=0ThenP(Flag);CountW:=CountW+1;
V(W);passba;P(W);
CountW:=CountW-1;IfCountW=0ThenV(Flag);
V(W);end;coend;End;7.1进程的顺序性与并
发性7.1.1进程的顺序性一个程序由若干个程序段组成,而这些程序段的执行必须是顺序的,这种进程执行的方式就称为
进程的顺序性。例如:顺序进程的特征(1)封闭性:程序在封闭的环境下运行,并独占全机,因此机内的资源的状
态只有运行的程序操作才能改变它,其执行结果不受外界因素的影响。(2)可再现性:只要程序执行时的环境和初始条件相同,程序
经多次运行后所得的结果必然相同。7.1.2进程的并发性若干个进程同时在系统中运行,这些进程的执行在
时间上是重叠的,一个进程的执行尚未结束,另一个进程的执行已经开始,即使这种重叠是很小的一部分,也称这几个进程是并发的。
例:三个并发执行的进程。PQR并发进程之间的关系(1)无关的:一个进程的执行不影响其他进
程的执行结果,也不依赖其他进程的进展情况,即它们是各自独立的,则说这些进程相互之间是无关的。(2)有交互的:一个进程的
这些要依赖其他进程的进展情况,或者可能会影响其他进程的执行结果,则说这些进程相互之间是有交互的。
有交互的进程并发执行时,会破坏“封闭性”和“可再现性”7.2与时间有关的错误1.什么是与时间有关的错误
执行结果与并发进程执行的相对速度相关。2.为什么会发生与时间有关的错误当两个或多个进
程共享资源时,由于程序执行的速度不同,则会发生与时间有关的错误。★进程占用处理器的时间★进程
执行的速度★外界的影响processObserverbeginL1:observealor
ry;count:=count+1;gotoL1;end;proc
essReporterbeginprintcount;count:=0;end;例1:
当执行次序为:printcount;count:=c
ount+1;count:=0;则会丢失一次计
数值例2:机票预订系统A
B旅行社A查到某机座空;::
旅行社B查到某机座空;与其顾客商量;:
:旅行社A预订该机座;
:B预订该机座;7.3临界区与PV操作7.3.1
临界区有交互的并发进程执行时出现与时间有关的错误,其根本原因是对共享资源(变量)的使用不受限制,当进程交叉使用了共
享变量就造成了错误。临界区:并发交叉中与共享变量有关的程序段相关临界区:并发交叉中涉及相同变量的那些临界区进入临界区的准
则:(1)每次至多有一个进程处于临界区;(2)当有若干个进程欲进入临界区时,应在有限的时间内使其进入;(3)进程在临界区内仅
逗留有限的时间。7.3.2PV操作PV操作时由两个不被中断的过程——P操作原语和V
操作原语组成。PV操作是对信号量实施操作信号量S是整型变量,其物理含义为:
S>0时,S表示可使用的资源,或表示可使用资源的进程数。S=0时,表示无资源可供使用,或表
示不允许进程再进入临界区。S<0时,|S|表示等待使用资源的进程个数,或表示等待进入临界区的进
程个数。注意:创建信号灯时,应准确说明信号灯s的意义和初值(这个初值绝不能为负值)。
信号量的值只能由P、V操作来改变。(1)P操作对信号量S的P操作记为P(S)。
P(S)是一个不可分割的原语操作,即取信号灯值减1,若相减结果为负,则调用p(S)的进程被阻,并插入到该信号灯的等待队列中,否则可
以继续执行。(2)V操作对信号量S的V操作记为V(S)。V
(S)是一个不可分割的原语操作,即取信号灯值加1,若相加结果大于零,进程继续执行,否则,要帮助唤醒在信号灯等待队列上的一个进程。
7.3.3用PV操作管理临界区设:信号量S的初值为1。p(S)进入临界区csa进程pa
v(S)进入临界区csbp(S)v(S)进程pb信号量S的取值范围:-2、-1、0
、1beginS:semaphore;S:=1;cobeginprocessp1
begin:P(S);……
V(S);:end;processp2
begin:P(S);……V(S);
:end;processp3begin:P(S);
……V(S);:end;coend;end;7.4进程的互斥
进程的互斥:当有若干进程都要使用某已共享资源时,任何时刻最多只允许一个进程去使用资源,其他要使用它的进程必须等待,直到该资源
的占有者释放了该资源。7.4.1用PV操作实现进程的互斥begincount:integer;cou
nt:=0;S:semaphore;S:=1;cobeginprocessObserve
rbeginL1:observealorry;P(S);
count:=count+1;V(S);
gotoL1;end;processReporterbeginP(
S);printcount;count:=0;V(S);
end;coend;end;7.4.2读者写者问题beginS,mutex:Semaphor
e;S:=mutex:=1;rc:integer;rc:=0;cobegin
processReaderi(i=1,2,…,m)beginP(mute
x);rc:=rc+1;ifrc=1thenP(S);
V(mutex);readfileF;P(mutex);
rc:=rc–1;ifrc=0thenV(S);
V(mutex);end;processWriteri(j=1,2,…,n)begi
nP(S);writefileFV(
S);end;coend;End;7.5进程的同步7.5.1协作为了完成某一任务,进程之
间需要协作。多个协作进程执行速度不协调,则有可能发生错误。可采用互同消息的方法来控制进程的执行速度。7.5.2用PV
操作实现进程的同步进程的同步:并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消息,当一
个进程没有得到另一个进程的消息时应等待,直到消息到达才唤醒。1.同步机制(1)调用P操作测试消息是否
到达(2)调用V操作发送消息2.生产者消费者问题(1)只有一个生产者和一个消费者,只有单个缓冲区begi
nBuffer:integer;SP,SG:semaphore;SP:=1;SG
:=0;cobeginprocessproducerbegin
L1:produceaproduct;P(SP);
Buffer:=product;V(SG);
gotoL1;end;processco
nsumerbeginL2:P(SG);takeapro
duct;V(SP);consume;
gotoL2;end;coend;end;(2)只有一个生产者和一个消费者,有n单个缓
冲区beginB:array[0..(n-1)]ofinteger;k,t:integer;
k:=0;t:=0;SP,SG:semaphore; SP:=n;SG:
=0;cobeginprocessproducerbegin
L1:produceaproduct;P(SP);
B[k]:=product;k:=(k+1)m
odn;V(SG);gotoL1;
end;processconsumerbegin
L2:P(SG);takeaproductfromB[t];
t:=(t+1)modn;V(SP);consume;
gotoL2;end;coend;end;3.同步与
互斥的混合问题例2m个生产者和r个消费者,有n单个缓冲区beginB:array[0..(n-1)]of
integer;k,t:integer;k:=0;t:=0;m1,m2,SP
,SG:semaphore;m1:=m2:=1; SP:=n;SG:=0;
cobeginprocessproduceri(i=1,2,…,m)begin
L1:produceaproduct;P(SP);
P(m1);B[k]:=product;
k:=(k+1)modn;V(m1)
;V(SG);gotoL1;
end;processconsumerj(j=1,2,…,r)begin
L2:P(SG);P(m2);takea
productfromB[t];t:=(t+1)modn;
V(m2);V(SP);consume;
gotoL2;end;coend;end;例3:桌上有一个盘子,每次只能放入一个水
果。爸爸专向盘子中放苹果,妈妈专向盘子中放桔子,一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子里的苹果。试用PV操作实现四个人的同
步,并写出程序描述。beginmutex,SA,SO:semaphore;mutex:=1;SA:
=0;SO:=0;cobeginprocessfatherbeginL1
:haveanapple;P(mutex);putana
pple;V(SA);gotoL1;
end;processdaughterbeginL4:P(SA);
getanapple;V(mutex);
eatanapple;gotoL4;end;coend
;end;processsonbeginL3:P(SO);g
etanorange;V(mutex);eatanora
nge;gotoL3;end;processmother
beginL2:haveanorange;P(mutex);putano
range;V(SO);gotoL2;end;
用PV操作作为同步机制时,应注意如下几点:(1)正确区分同步与互斥(2)正确调用信号量
(3)正确使用PV操作7.6进程通信7.6.1通信机制进程通信:通过专门的通信机制实现进程间交换大量信息的通信方式。采用高级通信方式时,进程间用信件来交换信息。通信方式:(1)直接通信方式:固定在一对进程之间通信。(2)间接通信方式:以信箱为媒体来实现通信。信箱由接收信件的进程设立。7.6.2间接通信例:磁盘管理欲访问磁盘的进程begin……{组织信件M};send(B,M);……end;磁盘管理进程begin……L1:receive(B,X);{按信件信件要求组织通道程序};{通道程序首地址存入CAW};{启动磁盘};(等待磁盘传输结束){组织回信M};send(name,M);gotoL1;end;7.7UNIX中的进程同步与进程通信7.7.1UNIX中的进程同步UNIX通过系统调用实现进程同步。(1)用wait和exit实现同步(2)用sleep和wakeup实现同步
献花(0)
+1
(本文系有事就能解...首藏)