版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1§2.5进程互斥一、互斥的概念1.资源共享引起的制约——间接制约在多道程序系统中,各进程并发执行,并以各自独立的速度向前推进。当并发进程竞争使用同一资源(如处理机、主存空间、I/O设备以及文件等一类资源)时,它们之间会发生冲突,竞争资源的进程之间没有任何信息交换,但是,一个进程的执行可能会影响到竞争进程的行为。例如,两个进程都期望访问同一个资源,操作系统把这个资源分配给其中一个进程,另一个就必须等待。这种由竞争共享资源带来的进程之间的相互制约的关系称为间接制约关系。22.临界资源与临界区
如若两个或更多的进程需要访问打印机,在并发执行的过程当中,若让它们任意使用,则可能发生的情况是多个进程交替使用打印机,输出结果交织在一起,很难区分。解决的方法是任何一个进程在使用打印机打印整个文件时,都独占打印机的控制权,直到打印完成释放打印机为止。临界资源:一次仅允许一个进程使用的资源。
许多物理设备都属于临界资源,例如:输入机、打印机、绘图机等;此外,还有许多软件资源,例如:共享的变量、数据、表格、队列等也属于临界资源。它们虽然可被若干进程所共享,但一次只能为一个进程所利用。3
设某时刻游艺场的在场人数count为n,这时有一个人进场,同时有一个人退场。由于进场和退场是随机的,因此进程PIN和POUT的执行是并发的。例如:某游艺场设置了一个自动计数系统,用一个计数器count指示在场的人数。
当有一个人进场时,由进程PIN实现计数加1;当有一个人退场时,由进程POUT实现计数减1。
count→R1R1+1→R1R1→countcount→R2R2-1→R2R2→count进程PIN
进程POUT
如果这两个进程按下述不同顺序执行时,执行的结果分别如下:41)进程PIN和POUT各自顺序执行:假若进程PIN先执行,结束之后进程POUT再执行,两个进程分别完成了对count的计数加1和计数减1的工作,count的计数值保持为n,显然,这个结果是正确的。
2)进程PIN和POUT交替执行各个操作:假若:PINR1:=count;
POUTR2:=count;
PINR1:=R1+1;
count:=R1;
POUTR2:=R2-1;
count:=R2;
执行完毕时,count的计数值为n-1。假若:PINR1:=count;
POUTR2:=count;
R2:=R2-1;
count:=R2;
PINR1:=R1+1;
count:=R1;
执行完毕时,count的计数值为n+1。上述两种结果和实际的情况不一致,即发生与时间有关的错误。5
问题的关键在于共享变量count,两个进程访问这个共享变量,如果一个进程修改了count,完成了对count的一部分操作,然后被中断,另一个进程在第一个进程使用完count的值之前又修改了count,从而造成了count计数值的错误;
如果一次只允许一个进程对共享变量count进行访问,就能解决这个问题,共享变量count属于临界资源。
要防止临界资源使用过程中发生“与时间有关的错误”,惟一的办法是控制访问临界资源的各进程的执行,实现对临界资源的互斥访问。
临界区:每个进程中访问临界资源的那一部分程序。注意:临界区是对某一资源而言的,对于不同资源的临界区,它们之间是无关的,所以不必互斥地执行。
63.互斥
在操作系统中,当一个进程进入临界区访问临界资源时,另一个欲进入相关临界区的进程必须等待,直到占用临界资源的进程退出临界区后,另一个进程才可以进入临界区,进程之间这种相互制约的关系称为互斥。
即进程的互斥就是两个或两个以上的进程不能同时进入共享同一临界资源的(相关)临界区。
71)若有多个进程同时要求进入它们的临界区时,应在有限的时间内让其中之一进入临界区,而不应相互阻塞,以致于各进程都不能进入临界区;2)每次至多只允许一个进程处于临界区;3)进程在临界区内仅停留有限的时间。
实现进程互斥,也就是实现对于临界区的管理。为了保证共享临界资源的各进程在临界区互斥地执行,提出了对临界区管理的原则:4.对临界区管理的原则
8
根据上述对临界区的管理原则,可以得出临界区的调度原则:1)空闲让进:当无进程处于临界区内时,允许一个进程进入临界区;2)忙则等待:当某一个进程已进入临界区时,其它欲进入临界区的进程必须等待;3)有限等待:当某一个进程离开临界区时,若有进程等待进入临界区,则允许其中一个进程进入临界区;4)让权等待:当进程不能进入自己的临界区时,应立即释放处理机。9
实现进程互斥的同步机构:锁机制、信号量和PV操作机制、管程机制。二、锁机制1.锁:使用一个标志或一个变量来代表临界资源的状态。
W=1为锁被关闭,表示该资源已占用;
W=0为锁已打开,表示该资源空闲,未被占用。
系统提供一对在锁位W上进行操作的上锁原语Lock(W)和开锁原语UnLock(W)。
进程互斥的实现可以采用软件的方法,也可以通过系统提供的同步机构来协调进程间的关系。102.上锁原语Lock(W):
测试W的值,若W=1,表示资源正在使用,继续反复测试;若W=0,则设置W=1(上锁)。上锁原语算法:lock(w)
begintest:if(w=1)
gototestelsew=1;
endW=1?1→W
入口
返回是否113.开锁原语UnLock(W):设置W=0(开锁)。
0→W
入口
返回开锁原语算法:Unlock(w)
beginw=0;end
在测试锁位W的值和设置锁位W的值为1的这两步之间,锁位W的值不得被其它进程所改变,这是应该绝对保证的,因此采用了在锁位W上的原语操作。
有些系统中,机器在硬件中提供了专门的硬件指令TestandSet(简称TS)来完成上述的上锁和开锁操作。例如,在IBM/370中就有一条称为“测试并置位”的TS指令。124.用上锁原语和开锁原语实现进程互斥
利用上锁原语和开锁原语可以解决并发进程对临界区访问的互斥问题。
任何申请进入临界区的进程,必须先执行上锁原语。若上锁原语顺利通过,则进程可以进入临界区,这时临界区已被上锁原语锁住,其它申请进入临界区的进程只能等到临界区开锁之后才有可能进入临界区;当进程完成对临界资源的访问退出临界区时再执行开锁原语,以释放该临界资源。13上锁原语
临界区CSA开锁原语上锁原语
临界区CSB开锁原语进程A进程B14进程使用临界资源的操作流程
R1+1→R1
R1→count
count→R2
R2+2→R2
R1→count
上锁原语Lock(W)
开锁原语UnLock(W)
count→R1
上锁原语Lock(W)
开锁原语UnLock(W)
进程PIN
进程POUT
临界区
临界区15§2.6信号量和PV操作一、信号量的概念
在操作系统中,信号量是表示资源的实体,是一个特殊的变量,其值仅能由PV操作来改变。操作系统利用信号量的状态对进程和资源进行管理。
信号量是一个确定的二元组(s,q),s是一个具有非负初值的整型变量,q是一个初始状态为空的进程PCB队列的首指针。因此,一个信号量w包括两个部分:即整数值部分w.s和指针部分w.q。
w.sw.q信号量w∧16信号量的物理含义:从资源观点来看,s的值表示系统中某类可用资源的数目。其大于等于零时,表示系统中当前可用资源的数目;其小于零时,其绝对值表示系统中还欠缺的资源数目,(即正在等待使用临界资源的进程数)。w.sw.q∧…
PCB队列
建立一个信号量必须说明该信号量所代表的意义,并赋初值,而信号量的值仅能由PV操作原语来改变。17二、P、V操作
PV操作是P操作原语P(s)和V操作原语V(s)的简称,是定义在信号量上的两个操作原语,在执行期间不可分割。P操作原语P(s)的过程:(P(s)--wait(s))1)s的值减1;
2)若相减的结果大于或等于零,则调用P(s)的进程继续执行;
3)若相减的结果小于零,则调用P(s)的进程被阻塞,并插入到该信号量的等待队列中,然后转进程调度程序。18P(S)操作-wait(s)算法pbegins=s–1;
ifs<0{保护调用进程的CPU现场;将该进程入s的等待队列;置该进程为“等待”状态;转进程调度;}ends-1→ss≥0?调用进程入等待队列
转进程调度
入口
继续是否19V操作原语V(s)的过程:(V(s)--signal(s))(1)s的值加1;(2)若相加的结果大于零,则进程继续执行;(3)若相加的结果小于或等于零,则从该信号量的等待队列中唤醒一等待进程,然后返回原进程继续执行或转进程调度程序。
从PV操作原语的定义中可以看出,当进程调用P操作,判断s的值小于零时,调用P(s)的进程被阻塞后,该进程并没有象锁机制中那样陷入“忙等待”,而是“让权等待”,放弃占用处理机而进入等待队列,然后转进程调度程序重新选择一个进程占用处理机。从而避免了处理机的空耗,提高了处理机的效率。20V(S)操作-signal(s)算法Vbegins=s+1;
ifs<=0{移出s等待队列首元素;将该进程入就绪队列;置该进程为“就绪”状态;}end唤醒等待队列中的一个进程返回或转进程调度s+1→s入口
继续s≤0?是否21三、用信号量实现进程互斥
利用信号量能方便地解决临界区问题。
设有n个进程,用数组P(i)表示,设与n个进程共享的临界资源对应的互斥信号量为s。信号量初始化为1,表示初始状态时共享资源是空闲的。只需把各个进程临界区的程序段置于P(s)和V(s)之间即可实现n个进程的互斥。进程P(1)…
进程P(i)…
进程P(n)P(s)V(s)
临界区1P(s)P(s)
临界区i
临界区nV(s)V(s)……222)进程每执行一次V操作,信号量的数值加1,意味着进程释放一个单位的资源。
当s>0,说明系统中没有进程在等待此类资源,则释放资源的进程继续执行;
当s≤0,说明此信号量的等待队列中有等待进程,那么应唤醒等待队列中的一个进程,将释放的资源分配给它,使其能获取所需资源,然后释放资源的进程可继续执行下去。
当s<0,表示系统已无资源可用,所有的此类资源均已被占用,则应将该进程阻塞,并插入等待队列。此时,s的绝对值表示信号量s的等待队列中的进程数。注意:信号量和PV操作的物理含义1)进程每执行一次P操作,信号量的数值减1,意味着进程申请分配一个单位的资源。当s≥0,表示了某类可用资源的数量;23分析信号量s的取值范围
例如:设一民航售票系统有n个售票处。每个售票处通过终端访问系统中的公用数据区,假定公共数据区中的一些单元xk(k=1,2,……
,m)分别存放×月×日×次航班的现存票数。设P1,P2,……,Pn表示各售票处的处理程序,R1,R2,……,Rn表示各进程执行时所用的工作单元。24用信号量实现各进程间的互斥begincobeginprocessPi(i=1,2,……,n)
begin
按旅客订票要求找到xk(k=1,2,……,m)
;
Ri=xk;
ifRi≥1thenbeginRi=Ri-1;
xk=Ri;输出一张票;
endelse
输出“票已售完”;
end;
coend;end;sk:semaphore;sk=1;P(sk);V(sk);V(sk);beginend;信号量Sk的取值范围是:1到-(n–1)之间的整数25§2.7进程同步一、同步的概念
异步环境中的各进程并发执行,并以各自独立的速度向前推进,并发执行的进程之间可能由于合作完成同一任务而相互支持和依赖,从而引发出进程间的直接制约关系。异步环境:主要指各并发进程的执行起始时间的随机性和执行速度的独立性。
直接制约关系带来进程的同步。亦即,一组相互合作的并发进程,为了协调其推进速度,在一些关键点上可能需要相互等待或互通消息,进程之间这种相互制约的关系称作进程同步。具有同步关系的一组并发进程称为合作进程(或相关进程)。26(一)按规定次序执行的合作进程的同步一般同步问题可以分为两类:1)保证一组合作进程按逻辑需要所确定的执行次序;2)保证共享缓冲区(或共享数据)的合作进程的同步。二、同步的例子27例如:A,B两个进程通过一个缓冲区合作完成一项任务,A进程将将从卡片机读入的数据送入缓冲区,B进程从缓冲区中取走数据进行处理。当缓冲区空时,B进程因得不到数据而阻塞,只有当A进程将数据送入缓冲区时才将B进程唤醒。反之,当缓冲区已满,A进程不能继续送数据而阻塞,只有当B进程取走数据时才唤醒A进程。
缓存区
P
A
PB
从读卡机读入数据从缓存区中取数据
将数据送入缓存区
加工处理数据
P
A
PB(二)共享缓冲区的合作进程的同步28例1:PA,PB,PC为一组合作进程,其进程流图如下所示,试用信号量实现这三个进程的同步。
设两个同步信号量SB,SC:
SB表示PA发给PB的能开始执行的消息,其初值为0;
SC表示PA发给PC的能开始执行消息,,其初值为0。三、用信号量机制实现进程同步
要实现进程的同步就必须提供一种同步机制,该机制能把其它进程需要的消息发送出去,也能测试自己等待的消息是否到达。29算法描述:begin
SB:semaphore=0;
SC:semaphore=0;cobegin
processPA
begin
┇
V(SB);
V(SC);
end
process
PB
begin
P(SB);
┇
end
process
PC
begin
P(SC);┇
end
coendend30(二)共享缓冲区的合作进程的同步例如:设某计算进程cp和打印进程iop共用一个单缓冲,如下图所示。其中,cp进程负责不断地计算数据并送入缓冲区buf中,iop进程负责从缓冲区buf中取出数据去打印。缓冲区buf
cp进程和iop进程必须遵循以下同步规则:(1)当cp进程把计算结果送入buf时,iop进程才能从buf中取出结果去打印,否则必须等待。(2)当iop进程把buf中的数据取出打印后,cp进程才能把下一个计算结果送入buf中,即只有当buf为空时,cp进程才能动作,否则必须等待。31begin
full:semaphore
=0;
empty:semaphore
=1;cobegin
process
cp
beginLc:得到一个进程结果;
P(empty);
将数送到缓冲区中;
V(full);gotoLc;endprocessiopbeginLo:P(full);
从缓冲区中取一数;
V(empty);
从打印机上输出;
gotoLo;endcoendend
设置两个信号量full和empty。full用来表示缓冲区中是否有可供打印的计算结果,初值为0。empty用以表示缓冲区有无空位置存放新的信息,初值为1。算法描述如下:表示buf中有无信息表示buf中有无空位置321、生产者—消费者问题
生产者—消费者问题是一个典型的同步例子。它描述了一组生产者向一组消费者提供产品(数据),它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取出产品消费。这样的一个问题是许多相互合作进程存在的内在关系的一种抽象。一组生产者P1、P2、…、Pm一组消费者C1、C2、…、Ck有界缓冲区——长度为n(n>0)四、经典同步问题
33
只要缓冲区未满,生产者就可把产品送入缓冲区;只要缓冲区未空,消费者便可从缓冲区取走产品并消耗它。
仅当缓冲区满时,生产者被阻塞,类似地,缓冲区空时,消费者被阻塞。
生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品。P1P2P3Pm-1Pm┇
┇
C1C2C3Ck-1Ck缓冲区34信号量的功能:
消费者在信号量上做P操作来表示消耗一个资源,生产者通过在同一信号量上做v操作表示生产一个资源。计数器在每次P操作后减1,而在每次V操作中增1。这一计数器的初始值是可利用的资源数目。当资源是不可利用时,将申请资源的进程放置到等待队列中,如果有一个资源释放,在等待队列中的第一个进程被唤醒并得到资源的控制权。为解决这一类生产者—消费者问题,应设置两个同步信号量:1)empty:表示空缓冲单元的数目,初值为缓冲区的大小n;2)full:表示满缓冲单元(即产品)的数目,初值为0;由于有界缓冲区是一个临界资源,必须互斥使用,所以,另外还需要设置一个互斥信号量:
3)mutex:互斥信号量,初值为l。35生产者—消费者问题流程
生产者进程Pi(i=1,2,……,m)消费者进程Cj(j=1,2,……,k)
产品送入缓冲区
P(empty)
P(mutex)V(mutex)V(full)
生产一个产品
从缓冲区取一个产品
P(mutex)
V(empty)
V(mutex)
消耗该产品
P(full)36生产者—消费者问题算法描述
beginfull:semaphore
=0;
empty:semaphore
=n;
mutex:semaphore
=1;ti,tj:int=0;cobeginprocessproduceribegin
Lp:生产一个产品;
P(empty);
P(mutex);
送一个产品到ti缓冲区;
ti=(ti+1)modn;
V(mutex);
V(full);gotoLpendprocessconsumerjbeginLc:P(full);
P(mutex);
从缓冲区tj中取产品;
tj=(tj+1)modn;
V(mutex);
V(empty);
消费一个产品;
gotoLcendcoendend372、读者—写者问题
有一个许多进程共享的数据区和两组并发进程。这个数据区可以是一个文件或者主存的一块空间,甚至可以是一组寄存器;一组进程只对此数据区执行读操作,我们将该组进程称作读者(Reader);另一组进程只对此数据区执行写操作,我们将该组进程称作写者(Writer)。当有多个读者和写者都要对共享数据区访问时,为了保证共享数据的完整性,必须满足以下条件:。1.任意多个读者可以同时访问这个共享的数据区;2.多个写者不可以同时访问这个共享的数据区;3.读者和写者不可以同时访问这个共享的数据区。38显然,要满足读者—写者问题的要求,写者与写者之间要互斥,
写者与读者之间也要互斥,多个读者可同时读共享数据,我们用一个计数器Rc来统计读者的数量,每当有一个读者欲访问共享数据时,对Rc计数加1,每当有一个读者结束对共享数据的访问时,对Rc计数减1,在第一个读者到达共享数据区之后以及最后一个读者离开共享数据区之前,写者不能访问共享数据区。为了解决读者—写者问题,我们设置了两个互斥信号量:信号量S,用于写者与写者之间、读者与写者、写者与读者之间对共享数据区操作的互斥,初值为1;信号量Sc,用于多个读者对共享计数器Rc操作的互斥,初值为1。思考:需要几个信号量?是什么类型信号量?
39读者Readeri(i=1,2,……
,m)
否
是
是Rc=0?
读共享数据区
P(Sc)
Rc+1→Rc
P(S)Rc=1?
V(Sc)
P(Sc)
Rc-1→Rc
V(S)V(Sc)
否写者Writerj(j=1,2,…,n)
P(S)
写共享数据区
V(S)40思考思考思考思考思考准备进餐进餐准备进餐进餐问题描述五位哲学家围桌而坐。哲学家在思考问题时不需要任何资源,思考完问题后进入进餐态。每人必须获得左右两支筷子才能进餐。3、哲学家进餐问题
410#1#2#3#4#利用记录型信号量解决哲学家进餐问题分析可知,放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用。为了实现对筷子的互斥使用,可以用一个信号量表示一只筷子,由这五个信号量构成信号量数组。其描述如下:Varchopstick:array[0,…,4]ofsemaphore;42所有信号量均被初始化为1,第i位哲学家的活动可描述为:
repeat wait(chopstick[i]); wait(chopstick[(i+1)mod5]); … eat;… signal(chopstick[i]); signal(chopstick[(i+1)mod5]); … think;untilfalse;43哲学家问题分析死锁思考思考思考思考思考准备进餐准备进餐准备进餐准备进餐准备进餐思考P(chopstick[i])P(chopstick[i+1]mod5)V(chopstick[i]))V(chopstick[i+1]mod5)eat44可采取以下几种解决死锁问题方法:
(1)至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐。(2)仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。(3)规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子,而偶数号哲学家则相反。15432竞争竞争45利用AND信号量机制解决哲学家进餐问题
在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐,AND信号量机制可获得最简洁的解法。描述如下:Varchopsiickarrayofsemaphore:=(1,1,1,1,1);
processi
repeat
think;
Swait(chopstick[(i+1)mod5],chopstick[i]);
eat;
Ssignal(chopstick[(i+1)mod5],chopstick[i]);
untilfalse;
46例1:用信号量实现司机和售票员间的同步。
司机
售票员
正常行车
到站停车
售票
开车门
关车门
离站开车设:S1和S2分别为司机和售票员的私用信号量,其初值均为0,信号量S1表示售票员通知司机“可以开车”的消息(信号),信号量S2表示司机通知售票员“可以开门”的消息(信号)。P(s2)V(s1)V(s2)P(s1)47例2:某超级市场,可容纳100人同时购物。入口处备有篮子,每个购物者可持一只篮子入内购物。出口处结帐,并归还篮子(出、入口仅容一人通过)。请试用P(S)、V(S)操作以及信号量写出购物同步算法。begincobeginprocessPi(i=1,2,…,
beginL:
进入口处,并取一只篮子;选购商品结帐,并归还篮子;
gotoL;end;
coend;end;解:设信号量S其初始值为100,信号量mutex1,mutex2其初始值为1。购物者进程设为Pi,其算法如下所示:s,mutex1,mutex2:semaphore;s=100;mutex1=mutex2=1;P(s);P(mutex1);V(mutex1);P(mutex2);V(mutex2);V(s);48五、管程机制
(一)管程的基本概念
1.管程的定义
管程由三部分组成:①局部于管程的共享变量说明;②对该数据结构进行操作的一组过程;③对局部于管程的数据设置初始值的语句。此外,还须为管程赋予一个名字。
49管程的示意图
50管程的语法如下:
typemonitor-name=monitor
variabledeclarations
procedureentryP1(…);begin…end;procedureentryP2(…);begin…end;…procedureentryPn(…);begin…end;
begininitializationcode;end
512.利用管程解决生产者-消费者问题
在利用管程方法来解决生产者-消费者问题时,首先便是为它们建立一个管程,并命名为PC,其中包括两个过程:
52
(1)put(item)过程。生产者利用该过程将自己生产的产品投放到缓冲池中,并用整型变量count来表示在缓冲池中已有的产品数目,当count≥n时,表示缓冲池已满,生产者须等待。
(2)get(item)过程。消费者利用该过程从缓冲池中取出一个产品,当count≤0时,表示缓冲池中已无可取用的产品,消费者应等待。
53typePC=monitor
Varin,out,count:integer;buffer:array[0,…,n-1]ofitem;notfull,notempty:condition;procedureentryput(item)beginifcount≥nthennotfull.wait;buffer(in)∶=nextp;in∶=(in+1)modn;count∶=count+1;ifnotempty.queuethennotempty.signal;end54
procedureentryget(item)beginifcount≤0thennotempty.wait;nextc∶=buffer(out);out∶=(out+1)modn;count∶=count-1;ifnotfull.quenethennotfull.signal;end
beginin∶=out∶=0;count∶=0end
55
在利用管程解决生产者-消费者问题时,其中的生产者和消费者可描述为:
producer:beginrepeatproduceaniteminnextp;
PC.put(item);untilfalse;endconsumer:beginrepeat
PC.get(item);consumetheiteminnextc;untilfalse;end56§2.7进程通信一、进程通信的概念1、进程通信:进程间的信息交换。进程之间,需要交换一定数量的信息,以便协调一致共同完成指定的任务。
进程之间交换的信息量可多可少,多则成百上千个数据,少则仅仅是一个状态或一个信号。低级通信方式:传送一个或几个字节的控制信息。
(锁机制和信号量机制)高级通信方式:以较高的效率,交换大批量的数据。
(消息缓冲机制和信箱机制)2、进程通信方式:573、进程通信的类型
(1)共享存储器系统
基于共享数据结构的通信方式基于共享存储区的通信方式(2)消息传递系统直接通信方式间接通信方式(3)管道(Pipe)通信所谓“管道”,是指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件。58(1)共享存储器系统
基于共享数据结构的通信方式
基于共享存储区的通信方式缺点:效率低;对程序员不透明;传送少量数据;共享存储区进程:读、写公用数据结构生产者
消费者
有界缓冲区程序员:设置缓冲区,负责进程同步OS:提供共享存储器进程分区指定连接申请本进程读写进关程键程字59(2)消息传递系统
进程间的数据交换以消息(message)或报文为单位,程序员利用一组通信命令(原语)来实现通信,可分为直接通信和间接通信两种方式。
优点:大量数据传送;隐藏通讯的实现细节。(3)管道(Pipe)通信也称共享文件方式,基于文件系统,利用一个打开的共享文件连接两个相互通信的进程,文件作为缓冲传输介质。发送进程接收进程字符流方式写入读出;先进先出顺序。60二、消息缓冲通信(直接通信)
消息:进程之间相互传送的,有结构的一组信息。消息缓冲通信:是一种直接通信方式,即一个进程直接发送一个消息给接收进程,企图发送或接收消息的每个进程必须指出消息发给谁,或者从谁那里接收消息。是一种可直接以较高的效率传递较多数据的信息交换方式,被广泛应用于本地进程之间的通信。
每当发送进程欲发送消息时,便形成一个消息缓冲区,其结构如下:Sptr:指向发送进程的指针(或sender:发送进程的标识符);Npty:指向消息队列中下一个消息缓冲区的指针;Size:消息长度;Text:消息正文;61
消息缓冲区是内存中的一个区域,其中可以存放一条消息。发送进程可以把消息填写到消息缓冲区中,并把该消息缓冲区插入到接收进程的消息链上,以待接收进程进行加工处理。为此,PCB中还应该增加如下的数据项:1)hpty:消息队列头指针,初值为空。由于接收进程可能会收到几个进程发来的消息,故应将所有的消息缓冲区链成一个队列,其队头通过在接收进程PCB中设置队首指针hpty来指出。2)mutex:消息队列互斥信号量,初值为1。消息队列属于临界资源,故在PCB中设置了互斥信号量mutex,每当对消息链操作之前和结束操作之后,应在mutex上分别执行P操作和V操作。623)Si:消息队列同步计数信号量。初值为0。当发送进程发来一个消息,在此信号量上执行V(Si);而当接收进程从消息队列上欲取走一个消息时,先对信号量执行P(Si),如果有消息,则从消息链中取走hpty所指出的第一个消息。
发送进程在发送消息之前,应先在自己的内存空间设置一个发送区,把欲发送的消息正文以及接收进程标识符id和消息长度填入其中,然后用发送原语构造消息并把消息发送出去;接收进程在接收消息之前,在本进程的内存空间中设置一个接收区,然后用接收原语接收消息。63receive(n,sid);
send(m);指向发送进程64(1)发送原语:send(m)m为发送区开始地址。功能:把消息从发送区复制到消息缓冲区,并将它挂到接收进程消息队列的末尾。如果该接收者正因等待消息而处于等待状态,则唤醒该进程。(2)接收原语:receive(n,sid)n为接收区开始地址,sid为发送进程的id号。功能:查看消息链中计数信号量来获知有待处理的消息否?若无,则接收进程插入消息链的等待队列;若有消息,则把消息链上的第一个消息摘下,将消息的内容复制到进程B的接收区n,然后,释放消息缓冲区。65发送原语send{
从发送区id域得接收进程id号;以此id号取得接收进程pcb的消息队列头指针;
从发送区size域得缓冲区大小;
以此大小加上缓冲区头得area;
向存储管理模块申请一个消息缓冲区area;
发送进程id送area的sptr域;缓冲区大小送area的size域;
发送区的text送area的text域;
置area的勾链字为链尾标记;
p(mutex);
将area入消息队列;
v(mutex);v(si);}建立新的消息缓冲区封锁消息队列解锁消息队列与接收进程同步66接收原语receive{p(si);p(mutex);
在消息队列中找到发送者为sid的消息;从消息队列中摘下此消息缓冲区area;v(mutex);area的sptr送接收区的id域;
area的size送接收区的size域;area的text送接收区的text域;
释放area给存储管理模块;}有无消息可取封锁消息队列解锁消息队列将消息缓冲区的信息复制到接收区67二、信箱通信(间接通信)
进程之间传送消息时需要借助于一个中间媒体,即信箱来进行,因此称之为间接通信方式。1.信箱的数据结构间接通信所利用的信箱是一种数据结构,它由信箱头和信箱体两部分组成。其中:信箱头是对信箱的描述,信箱头包括如下信息:信箱标识符信箱大小已存放的信件数等信箱队列的首指针等信件队列的首指针信箱体由若干格子组成,每一个格子可以存放一个信件。信箱格子的大小和数量在信箱创建时确定。682.发送原语和接收原语(1)发送原语的形式为:send(B,M)
其中:B为信箱的标识符,M为信件的存放地址。发送原语的执行过程:根据参数B找到指定的信箱,若信箱未满,则将信件M送入信箱由指针所指示的位置,信件数加1,并释放等信件的进程;否则,发送进程被阻塞,并将其插入等信箱队列。(2)接收原语的形式为:receive(B,M)其中:B为信箱的标识符,M为信件的存放地址。接收原语的执行过程:根据参数B找到指定的信箱,若信箱有信件,则取出第一封信送到M所指定的区域,信件数减1,并将信箱中剩余的信件顺次前移,若有等信箱的进程,则将其唤醒;若信箱中无信件,则接收进程被阻塞,并将其插入等信件队列。69
信箱可以由操作系统创建,也可以由用户创建,创建者是信箱的拥有者。因此,可以根据创建者的不同将信箱分为:私用信箱公用信箱共享信箱发送
接收
信箱头格子1格子2格子3
┅AB发送进程接收进程信箱体703.信箱分类信箱种类创建者通信方式实现生命期私用用户拥有者读取,其它用户只能发送单向通信链路用户结束则消失公用OS可发送可读取双向通信链路OS运行期始终存在共享进程拥有和共享者可读取,其它只能发送双向进程结束终止714.信箱通信发送和接收对应关系发送接收专用:一对一;不干扰发送接收一对多;广播方式发送接收多对一;C/S(客户/服务)发送接收多对多;公用信箱72§2.8线程一、什么是线程
进程的概念和结构是传统操作系统工作的基础。但是,随着计算机体系结构从早期的单处理机结构发展到目前的多处理机结构,在多任务的环境中,为了减少处理机的空转时间以及处理机调度切换时的时间和空间开销,提高系统的并行能力,因此产生了更小的控制单位:线程。线程:进程内的一个处理机调度的基本单位。或者,进程内的一个执行体。
线程又称为轻型进程,这是因为线程的执行环境很小,负担也很小。73二、引入线程的原因
进程和线程是构造操作系统的两个基本元素,可以从两者的异同中进一步理解线程的概念。1)进程是系统资源分配的基本单位。在引入线程的操作系统中,进程不再是处理机调度的基本单位,而是系统资源分配的基本单位,所有与该进程有关的资源,例如打印机,输入缓冲队列等,都被记录在进程控制块PCB中。以表示该进程拥有这些资源或正在使用它们。不同的进程拥有不同的虚拟地址空间。
线程是系统处理机调度的基本单位。
并发执行的各线程之间竞争处理机,真正在处理机上运行的是线程。线程与资源分配无关,它属于某一个进程,并与进程内的其它线程一起在进程的地址空间中活动,共享进程的资源。
74
线程所涉及的执行环境小,从而其调度切换时所需要的系统开销也小。当进程发生切换时将涉及到有关资源指针的保存和地址空间的变化等问题,而线程切换时,由于同一进程内的多个线程共享进程的地址空间和资源,不会涉及到资源信息的保存和地址变化的问题,从而减少了系统管理的开销。并且,进程的调度与切换均是由操作系统内核完成,而线程的调度与切换则既可以由操作系统内核完成,也可以由用户程序控制。2)线程管理减少了系统管理的开销。线程的执行环境除了自体堆栈寄存器以及线程控制表TCB外,共享其所属进程的资源。也就是说进程中的多个线程在同一进程地址空间中活动。因此,系统无须专门对线程空间进行管理,线程间的同步与通信也可以因此而大大简化。753)线程是进程的一个组成部分。进程可以包含一个或者多个线程,而且至少包含一个可执行的线程,进程的活动就是以其所属线程的活动来体现。三、线程结构与线程控制块TCB
线程控制块TCB执行堆栈程序计数器通用寄存器组状态标记线程76
单进程多线程单进程单线程线程标识线程号处理机状态信息(现场)通用寄存器指令计数器程序状态字栈指针线程调度信息线程状态线程优先数等待原因调度算法参数等线程及线程控制块系统依据TCB控制线程运行77用户栈系统栈PCB数据程序寄存器PCB数据程序用户栈系统栈
TCB1寄存器用户栈系统栈
TCB2寄存器用户栈系统栈TCB3寄存器线程1线程2线程3进程进程单线程结构进程多线程结构进程线程78
线程的属性(1)轻型实体。(2)独立调度和分派的基本单位。(3)可并发执行。(4)共享进程资源。多线程OS中进程的属性(1)系统资源分配的单位。(2)可包括多个线程。所有线程都只能属于某一个进程。(3)进程不是一个可执行的实体。例:进程处于“执行”状态,即进程中的某线程正在执行。挂起某个进程,即该进程中的所有线程也都将被挂起。四、线程与进程的比较79
调度性:线程作为调度的基本单位,同进程中线程切换不引起进程切换,当不同进程的线程切换才引起进程切换;进程作为拥有资源的基本单位。并发性:一个进程间的多个线程可并发。拥有资源:线程仅拥有隶属
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提高公司知名度的创新策略计划
- 《自动控制理论教学课件》二数学模型
- 专题14-读后续写整体思维之布局宏观结构-2021年高考英语培优计划之思维型课堂
- 足球队球衣合作协议书范文模板
- 租金调整协议书范文范文模板
- 中小学足球比赛合作协议书范文
- 无第三者的离婚协议书范文
- 拼音乐园:学习与娱乐-打造趣味化的拼音学习体验
- 环境学概论(第一章)
- 氧化还原反应配平专项训练
- 2024年全国高考生物试题分类汇编
- 空调制冷培训资料:制冷剂的认识
- 五育融合下的新劳动教育课题
- 数字化转型对中学教育的影响
- 新型电力系统简介演示
- 基于Android网上购物系统的设计与实现
- 偿债能力分析开题报告
- 企业事业部制的职责与权限
- 广东省行政执法资格考试题库
- 项目实施组织形式和管理措施
- 健康知识讲座-痛风
评论
0/150
提交评论