收藏 分享(赏)

互斥同步与通讯.ppt

上传人:天天快乐 文档编号:1117875 上传时间:2018-06-13 格式:PPT 页数:171 大小:567KB
下载 相关 举报
互斥同步与通讯.ppt_第1页
第1页 / 共171页
互斥同步与通讯.ppt_第2页
第2页 / 共171页
互斥同步与通讯.ppt_第3页
第3页 / 共171页
互斥同步与通讯.ppt_第4页
第4页 / 共171页
互斥同步与通讯.ppt_第5页
第5页 / 共171页
点击查看更多>>
资源描述

1、第四章 互斥、同步与通讯,并发进程(concurrent processes)进程互斥(mutual exclusion)进程同步(synchronization)进程高级通讯(communication),4.1并发进程,4.1.1前驱图的定义 前驱图(precedence graph)是一个有向无环图,图中的每个结点表示一条语句、一个计算步骤或一个进程。结点间的有向边表示偏序或前驱关系(precedence relation)“”,=(pi,pj) pi必须在pj启动之前完成。 (pi,pj) 可记为pi pj,称pi是pj的前驱, pj是pi的后继。,4.1并发进程,在前驱图中没有前驱的

2、结点称为初始结点,没有后继的结点称为终止结点。每个结点可以有一个权重(weight),它表示该结点所包含的程序量或计算时间。前驱关系满足传递性,即若p1 p2,p2 p3,则必有p1 p3。,4.1 并发进程,4.1.2 顺序程序及其特性顺序性内部顺序性:对于一个进程来说,它的所有指令是按顺序执行的。P1: a1,a2,a3; P2: b1,b2,b3外部顺序性:对于多个进程来说,所有进程的活动是依次执行的。a1,a2,a3,b1,b2,b3; b1,b2,b3,a1,a2,a3顺序程序特性: (1)顺序性: 指令逐条执行 (2)封闭性: 不受其它程序及外界因素影响 (3)可再现性: 结果与推

3、进速度无关,4.1 并发进程,4.1.3 并发程序及其特性并发性内部并发性:指程序内部的并发性。例如:S1:a:=x+2;S2: b:=y+4;S3: c:=a+b;S4: d:=c-6;S5: e:=c+6;S6: f:=c-e;经分析知道S3必须在S1和S2之后执行,S4和S5必须在S3之后执行,S6必须在S3和S5之后执行;而S1和S2可以并发执行,S4和S5可以并发执行,S4和S6可以并发执行。,4.1并发进程,外部并发性:外部并发性是指多个程序的并发性。例如P1: a1,a2,a3; P2: b1,b2,b3 执行次序可以是如下情况:a1,b1,b2,a2,a3,b3; b1,b2,

4、a1,b3,a2,a3并发程序特性:(1)间断性:多个程序是交叉执行的,处理器在执行一个程序的过程中有可能被中断,并转而执行另一个程序,有些交叉可能导致错误结果(2)非封闭性:一个进程的运行环境受其他程序影响(3)不可再现性:由于交叉的随机性,并发程序的多次执行可能对应不同的交叉,从而使得两次运行结果可能不同即不能期望从新运行的程序能够再现上次运行时产生的结果。,4.1并发进程,4.1.4程序并发执行的条件 并发是人们所期望的,但并发带来一个明显的问题就是程序执行的非封闭性,而人们却要求在非封闭性的条件下保持可再现性,因为只有可再现的结果才是正确的。令: R(pi)=a1,a2,am表示程序p

5、i在执行期间所读取的所有变量的集合,称为“读集”。 W(pi)=b1,b2,bn表示程序pi在执行期间所修改的所有变量的集合,称为“写集”。Bernstein条件(1966年由Bernstein提出): 若两个程序p1、p2满足以下条件,则能够保持可再现性,可以并发执行,条件是: R(p1) W(p2) R(p2) W(p1) W(p1) W(p2) =,4.1并发进程,并发程序的表示 并发程序常用并发语cobegin(concurrent begin)coend(concurrent end)来表示,令S1、S2、Sn为n条语句,它们可以并发执行,则用并发语句表示为: cobegin S1;

6、S2; Sn coend; 有时也用并行语parallelbegin(parallel begin)parallelend(parallel end)来表示 当遇到并发或并行语句时,同时n创建个进程(线程),分别执行S1、S2、Sn 。当它们都结束时,并发和并行语句结束。,4.1.6 与时间有关的错误,例:图书借阅系统 (x:某种书册数,设当前x=1.)终端1: 终端2:do do 等待借书者; 等待借书者; if x=1 if x=1 _ _ x:=x-1; x:=x-1; _ _ 借书 借书 else 无书 else 无书 while(1) while(1) (a)CR1 (b)CR2,1

7、,2,3,4,4.1.6 与时间有关的错误(Cont.),错误原因之1: 进程执行交叉(interleave);错误原因之2: 涉及公共变量(x)。Remarks: 某些交叉结果不正确; 必须去掉导致不正确结果的交叉。,4.2 进程互斥(mutual exclusion),4.2.1 共享变量与临界区4.2.2 临界区域与进程互斥4.2.3 进程互斥的实现4.2.4 多处理机环境下的互斥,4.2.1 共享变量与临界区域,共享变量(shared variable)或公共变量多个进程都需要访问的变量。临界区域(critical region)或临界段(critical section)访问共享变量

8、的程序段。,一组公共变量,CR1,CR2,CRn,.,4.2.1 共享变量与临界区域,临界区是于1965年首先提出的。在上例中的CR1和CR2。临界区可能有多个。为了清晰起见,通常把临界区与所对应的共享变量联系起来,称为关于某一组共享变量的临界区。如上例CR1和CR2是关于共享变量x的临界区。关于同一组共享变量的临界区可能有一个也可能有多个,它们的关系可以用上图表示。共享变量既可能属于操作系统空间,也可能属于用户空间。对于前者,其临界区也属于操作系统空间;同样后者对应的临界区也属于用户空间。,共享变量和临界区的表示,共享变量: shared 临界区域: region do 语句临界资源:一次只

9、允许一个进程使用的资源例子:shared x1,x2; region x1,x2 do region x1,x2 do (访问B) (访问B) ,4.2.2 临界区域与进程互斥,定义:多个进程不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误,这种现象称为进程互斥。二层涵义: (1)任何时刻最多只能有一个进程处于同一组共享变量的相同的临界区域; (2)任何时刻最多只能有一个进程处于同一组共享变量的不同的临界区域。Remarks: 互斥是相对于公共变量而言的。,嵌套临界区域,shared x; shared y; region x do region y do _ _ reg

10、ion y do region x do . . 一个临界区程序段可能调用另一个临界区程序段,称发生了临界区的嵌套。,4.2.3 进程互斥的实现,framework,do critical section remainder section while(1),entry section,exit section,4.2.3 进程互斥的实现,Requirements:mutual exclusion: 一次只允许一个进程活动在关于同一组公共变量的临界区中;progress: 临界区空闲时,多个竞争者在有限时间内确定下一个进入者;bounded waiting: 一个想要进入临界区的进程在等待有限

11、个进程进入并离开临界区后获得进入临界区的机会。,4.2.3 进程互斥的实现,调度原则: 1.关于同一组共享变量的所有临界区均为空闲时,一个要求进入改组共享变量某一临界区的进程应当能够立即进入。 2.当关于某一组共享变量的某一临界区被占用时,一个要求进入改组共享变量某一临界区的进程应当等待。 3.当某一进程离开关于某一组共享变量的某一临界区时,应当允许某一个等待进入该组共享变量某一临界区的进程进入。,4.2.3.1 进程互斥的软件实现,完全用程序实现,不需特殊硬件指令支持。可用于单CPU和多CPU环境中。有忙式等待问题。,Busy waiting“运行”或“就绪”,Dekker互斥算法,是由荷兰

12、数学家T.Dekker给出的第一个正确实现互斥的软件算法,算法针对两个进程P0和P1定义的两个数据结构: int flag2;/初值为0 int turn;/初值为0或1算法:,Dekker互斥算法,P0: do flag0=1; while flag1 do if (turn=1) flag0=0; while turn=1 do skip; flag0=1;,Dekker互斥算法,临界区 turn=1; flag0=0; 其余代码 while(1),Dekker互斥算法,P1: do flag1=1; while flag0 do if (turn=0) flag1=0; while tu

13、rn=0 do skip; flag1=1;,Dekker互斥算法,临界区 turn=0; flag1=0; 其余代码 while(1),Lamport面包店算法,算法思想:算法的基本思想源于顾客在面包店中购买面包时的排队原理。设置一个发号者,按0,1,2, 发号。想进入临界区(面包店)的进程先抓号,抓到号之后按由小到大的次序依次进入。Problem: 两个进程可能抓到相同的号。Why? 为保证抓到不同的号,需要互斥机制。Resolution: 若抓到相同的号,按进程编号由小到大依次进入。Definition: (a,b)(c,d) iff (ac)or(a=c and bd),Lamport

14、面包店算法,算法需要以下两个数据结构 int choosingn; int numbern; 前者表示进程是否正在抓号choosingi=1表示进程正在抓号,否则为0,其初值为0.后者用来表示进程抓到号码,初值也为0.算法描述方便需要定义以下表示方法 (a,b)(c,d),如果 ac or(a=c and bd)成立。,Lamport面包店算法,doPi 进入:1. choosingi=1;2. numberi=maxnumber0,numbern-1+1;3. choosingi=0;4. for(j=0;j0)&7. (numberj,j)(numberi,i) skip8. ,(1)P0

15、抓到1未赋值,(2)P1抓到1进入临界区(3)P2抓到2进入临界区,Lamport面包店算法(Cont.),临界区; numberi=0;while(1);变量choosing的作用:P0:抓到1; P1:抓到1; 正确次序:P0,P1,P2P2:抓到2;,可能按P1,P2,P0次序进入!,满足临界区管理原则,互斥性(mutual exclusion)如果进程pi在临界区内,且进程pk(ki)已抓到号numberk0, 则有(numberi,i)(numberk,k). 进程Pk将在第二个while循环处等待, 直到pi离开该临界区.有限等待性(bounded waiting)竞争进程按FIF

16、O的次序进入临界区, 而进程个数是有限的, 因而进程不会无限期等待进入临界区.进展性(progress)多个进程竞争进入临界区时, 下述条件之一成立: (1)一个进程抓到最小号, (2)若干进程抓到最小号. 情形(1)抓到最小号的进程获准进入临界区; 情形(2)编号最小抓到最小号的进程获准进入临界区, 因而确定进入临界区进程的决策将在有限时间内确定.,Eisenberg/Mcguire算法,enum flagn (idle, want_in, in_cs);初值idle int turn;/in the range of (0,n-1); 初始任意,flagi=idle: 进程Pi不想进入临界

17、区flagi=want_in: 进程Pi想进入临界区flagi=in_cs: 进程Pi想进入或已进入临界区,Eisenberg/Mcguire算法,Pi进入:do do flagi=want_in; j=turn; While (j!=i) if (flagj!=idle) j=turn; else j=(j+1)% n; flagi=in_cs; j=0; While (jvalueS-queue,Semaphore s;,FIFO,P操作原语,P操作原语:void P(semaphore *s) s-value-; if (s-valuequeue) asleep(s-queue)是标准函

18、数:(1) 执行此操作进程的PCB入s-queue尾(状态改为等待);(2) 转处理机调度程序。,Primitive: a piece of code un-interruptible,V操作原语,V操作原语:void V(semaphore *s) s-value+; if (s-valuequeue); wakeup(s-queue)是标准函数:(1)执行次操作系统将队列s-queue头部的进程的PCB移出等待队列,并将其插入就绪队列。(2)将移出进程的状态改为就绪。,Primitive: a piece of code un-interruptible,规定和结论,对于信号量变量的规定:

19、必须置一次初值,只能置一次初值,初值=0;只能执行P操作和V操作,所有其它操作非法。几个有用的结论:当s-value0时,s-queue为空;当s-valuevalue|为队列s-queue的长度;当s.value初=1时,可以实现进程互斥;当s.value初=非1正整数时,可以用来管理同种组合资源,申请资源执行一次P操作,归还资源执行一次V操作;当s.value初=0时,可以实现进程同步。,用信号量实现进程互斥,semaphore mutex; (初值=1) shared int x,y,z; CR1 CR2 CRn,用信号量实现进程互斥,semaphore mutex; (初值=1) sh

20、ared int x,y,z;P(mutex) P(mutex) P(mutex) CR1 CR2 CRnV(mutex) V(mutex) V(mutex),互斥例子:借书系统(revisited),semaphore mutex=1; 终端1: 终端2:do do 等待借书者; 等待借书者; if x1 if x1 x=x-1; x=x-1; 借书 借书 else 无书; else 无书; while(1) while(1),互斥例子:借书系统(revisited),semaphore mutex=1; 终端1: 终端2:do do 等待借书者; 等待借书者; P(mutex) P(mut

21、ex) if x1 if x 1 x=x-1; x=x-1; V(mutex) V(mutex) 借书 借书 else V(mutex);无书; else V(mutex);无书; while(1) while(1),用信号灯实现进程同步,后动作,先动作,P1:,P2:,用信号量实现进程同步,General Case:Semaphore s=0;,P(S)后动作,先动作 V(S),P1:,P2:,用信号量实现进程同步,例子:司机-售票员问题:司机活动: 售票员活动: Do Do 关车门 启动车辆 正常行驶 售 票 到站停车 开车门 While(1) While(1),用信号量实现进程同步,例子

22、:司机-售票员问题:semaphore s1=0,s2=0; 司机活动: 售票员活动: Do Do P(S1) 关车门 启动车辆 V(S1) 正常行驶 售 票 到站停车 P(S2) V(S2) 开车门 While(1) While(1),用开关中断实现P、V操作,void P(semaphore *s) disable interrupt; s-value-; if (s-valuequeue) enable interrupt; goto CPU dispatcher; else enable interrupt; ,用开关中断实现P、V操作,void V(semaphore *s) dis

23、able interrupt; s-value+; if (s-value0) wakeup(s-queue) else enable interrupt; ,用开关中断实现P、V操作,asleep(s-queue):set this process status to blocked;place this process in s-queue.wakeup(s-queue):remove a process from s-queue;place the process in ready list.,用TS、swap指令实现P、V操作,void P(semaphore *s) while(TS

24、(s-flag); s-value-; if (s-valuequeue) s-flag=0; goto CPU dispatcher; else s-flag=0; ,用TS、swap指令实现P、V操作,void V(semaphore *s) while(TS(s-flag); s-value+; if (s-value0) wakeup(s-queue) else s-flag=0;,Classical synchronization problems,1. Producers and consumers problem2. Readers and writers problem3. D

25、ining philosophers problem4. Cigarette smokers problem5. Sleepy barbers problemetc.,例1. 生产者/消费者问题,预备知识:组合资源:若干相对独立的资源构成的资源集合,其中每个相对独立的资源称为子资源。同种组合资源:相同类型子资源构成的组合资源。管理:semaphore s; (初值=子资源个数)例子:2台打印机 semaphore s=2; 申请:P(S); 释放:V(S);,自动机描述,2,1,0,-1,-2,P(S),P(S),P(S),P(S),P(S),V(S),V(S),V(S),V(S),V(S),

26、S-value=空闲资源数 S-queue=空,|S-value|=等待进程数 空闲资源数=0,.,P(S): 申请一台打印机, 分配, 空闲打印机减1P(S): 申请一台打印机, 等待, 等待进程数加1,2,自动机描述,1,0,-1,-2,P(S),P(S),P(S),P(S),P(S),V(S),V(S),V(S),V(S),V(S),S-value=空闲资源数 S-queue=空,|S-value|=等待进程数 空闲资源数=0,.,V(S): 释放一台打印机, 唤醒一个等待者, 打印机分给被唤醒进程, 等待进程数减1V(S): 释放一台打印机, 空闲打印机数量增1,例1. 生产者/消费者问题,0 1 k-1,箱子,容量k itemType bufferk,生产者,消费者,生产物品放入B中,B中取物品消费之,环形缓冲区,1,0,K-1,in,(in+1)% k,out,(out+1)% k,问题分析,生产者活动: 消费者活动: do do 加工一件物品 箱中取一物品 物品放入箱中 消耗这件物品 while(1) while(1),资源:箱子(同种组合) 资源:物品(同种组合) semaphore s1; semaphore s2; s1.value=k; s2.value=0;放前:P(S1) 取前:P(S2)放后:V(S2) 取后:V(S1),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报