互斥 同步与通讯.ppt
操作系统第6章 进程互斥与同步

Co-begin void Producer_i( ) (i=1,2…k) { item next_p; while(1){ produce an item in next_p P(empty); P(s); add next_p to buffer V(s); V(full); } } void consumer_j( ) (j=1,2…m) { item next_c; while(1){ P(full); P(s); remove an item from buffer to next_c V(s); V(empty); consume the item in next_c}} Co-end
• 进入临界段之前要申请,获得批准方可进入; • 退出临界段之后要声明,以便其他进程进入。
用程序描述: While(1){ entry_section; critical_section; exit_section; remainder_section; }
解决临界段问题的软件算法必须遵循:
准则1:不能虚设硬件指令或假设处理机数目。 准则2:不能假设n个进程的相对速度。 准则3:当一个进程未处于其临界段时,不应阻止 其他进程进入临界段。 准则4:当若干进程欲进入临界段时,应在有限时 间内选出一个进程进入其临界段。 用准则3,4不难推出下面原则 协调各进程入临界段的调度原则: • 当无进程处于临界段时,允许一个进程立即进入临界段。
3.实现临界段的硬件方法
利用处理机提供的特殊指令实现临界区加锁。 常见硬件指令有: ⑴ “Test_and_Set”指令 该指令功能描述为: int *target ( 限定为0,1) int Test_and_Set (int *target) { int temp; temp = *target ; *target = 1; return temp; }
江西省吉安县第三中学高中数学必修三课件:323互斥事件(共12张PPT)

议展
例3、经统计,在某储蓄所一个营业窗口等候的人数为及相 应概率如下:
排队人数 0 1 2 3 4 5人及5人以上
概率 0.1 0.16 0.3 0.3 0.1
0.04
(1)至多1人排队等候的概率是多少? (2)有人排队等候的概率是多少?
排队人数 0 1 2 3 4 5人及5人以上
概率 0.1 0.16 0.3 0.3 0.1
0.04
(1)至少3人排队等候的概率是多少? (2) 有人排队等候的概率是多少?
不能少
解:记“有0人等候”为事件A,“有1人等候”为事件B,“有2人等候” 为事件C,“有3人等候”为事件D,“有4人等候”为事件E,“有5人 及至5人以上等候”为事件F,则易知A,B,C,D,E,F互斥
(1)“记至少3人排除等候”为事件G, P(G)=P(D+E+F)=P(D)+P(E)+P(F)=0.3+0.1+0.04=0.44
“他乘汽车”为事件C,“他乘飞机”为事件D.这四个事
件两两不可能同时发生,故它们彼此互斥,
所以P(A+D)=P(A)+P(D)=0.3+0.4=0.7. 即他乘火车或乘飞机去的概率为0.7. (2)设他不乘轮船去的概率为P,则 P=1-P(B)=1-0.2=0.8, 所以他不乘轮船去的概率为0.8. (3)由于P(A)+P(B)=0.3+0.2=0.5, P(C)+P(D)=0.1+0.4=0.5, 故他可能乘火车或乘轮船去,也有可能乘汽车或乘飞机去.
发生吗? 它们又叫P(A做) 什3 么, P(事B) 件6?, P(C) 对4立, P事(D件) 9 . P(D) P( A) P(B)
13
13
13
13 P(C) P(D) 1
第4章 并发性:互斥和同步

哲学家进餐问题
管程
管程是一种程序设计语言结构
– 并发Pascal,Pascal-plus,Modula-2, Modula-3和Java等
主要特点:
– 本地变量只能由管程过程访问 – 进程通过调用管程过程进入管程 – 一次只能有一个管程过程在执行(实现互斥) 实现
管程(续)
通过cwait(c), csignal(c) 操作 管程中的条件 变量实现同步
有界缓冲区生产者/消费者问题的 管程解决方案
有界缓冲区生产者/消费者问题的 管程解决方案
消息传递
消息传递是相互合作的并发进程交换信 息的一种高级通信方式
– 进程间的数据交换以消息为单位
基于消息传递原语实现通信:
– 发送消息原语 send(destination, message) – 接收消息原语 receive(source, message)
临界区
二,专门的机器指令
适用范围(前提)
– 单处理器或共享主存多处理器结构 – 对同一存储单元的访问是互斥的
Dekker算法第二种尝试失败的原因
– 如果测 flag[1] 和置位 flag[0] 在一个指令周 期完成就不会出错
Testset 指令 (Test and Set---TS)
定义(逻辑)
boolean testset (int i) { if (i == 0) { i = l; return true; } else return false; }
一个指令周期完成,不会被中断
exchange指令
定义(逻辑)
void exchange(int register, int memory) { int temp; temp = memory; memory = register; register =temp ; }
第4章 进程的同步与互斥

mxh
同步
生产者活动:
Repeat 加工一件物品
消费者活动:
Repeat wait(full)
wait(empty)
物品放入箱中 signal(full)
箱中取一物品
signal(empty) 消耗这件物品
Until false
Until false
mxh
互斥
生产者活动:
Repeat
认为缓冲区同一时刻只有一个人可
mxh
4.1 进程的同步和互斥
信号量定义(记录型信号量)
semaphore是一个结构体: typedef struct {
int value;
//资源的个数
//进程链表
struct process *L;
} semaphore;
mxh
4.1 进程的同步和互斥 申请一个
• 信号量操作wait现在可按如 下来定义: void wait (semaphore S) { S.value - -; if (S.value <0) { add this process to S.L; block(); } }
mxh
4.1 进程的同步和互斥
• 信号量的应用
–合作进程的执行次序 –共享缓冲区的进程的同步
mxh
4.1 进程的同步和互斥
• 合作进程的执行次序:
–保证一组合作进程按照逻辑需要所确定 的次序进行。
mxh
4.1 进程的同步和互斥
• 合作进程的执行次序
–可以用一个图来表示进程集合的执行次 序。图的连接描述了进程开始和结束的 次序约束,此图称为进程流图. –例如P78,图4-2。 –使用信号量机制实现图4-2的同步。(练 习)
嵌入式系统开发--同步、互斥与通信

嵌入式系统开发同步、互斥与通信嵌入式系统开发中,同步、互斥与通信是三个重要的概念。
它们在系统设计和实现中起着至关重要的作用,确保系统能够高效、稳定地运行。
本文将详细介绍这三个概念,并提供一些实用的编程技巧。
同步是指在多个并发执行的任务或线程之间建立一种时间上的关系,确保它们按照一定的顺序执行。
在嵌入式系统中,同步机制可以帮助我们避免竞态条件、死锁等问题,保证系统的正确性和可靠性。
常用的同步机制包括信号量、互斥锁、条件变量等。
互斥是指在多任务环境下,确保同一时间只有一个任务能够访问共享资源。
互斥机制可以防止多个任务同时修改同一数据,从而避免数据不一致和竞争条件。
常用的互斥机制包括互斥锁、读写锁等。
通信是指在不同任务或线程之间进行数据交换和消息传递。
在嵌入式系统中,通信机制可以帮助我们实现任务之间的协作和资源共享,提高系统的效率和响应速度。
常用的通信机制包括消息队列、共享内存、管道等。
在嵌入式系统开发中,合理地使用同步、互斥和通信机制,可以有效地提高系统的性能和稳定性。
然而,不当的使用也可能导致系统出现死锁、资源竞争等问题。
因此,在进行系统设计和编程时,我们需要仔细分析任务之间的关系,选择合适的同步、互斥和通信机制,并进行严格的测试和验证。
在下一部分,我们将详细讨论如何使用这些机制进行嵌入式系统开发。
我们将通过一些具体的例子,展示如何利用信号量、互斥锁、条件变量等实现任务同步,如何利用互斥锁、读写锁等实现任务互斥,以及如何利用消息队列、共享内存、管道等进行任务通信。
同时,我们还将探讨一些常见的同步、互斥和通信问题,并提供一些解决方案和最佳实践。
嵌入式系统开发同步、互斥与通信嵌入式系统开发中,同步、互斥与通信是三个重要的概念。
它们在系统设计和实现中起着至关重要的作用,确保系统能够高效、稳定地运行。
本文将详细介绍这三个概念,并提供一些实用的编程技巧。
同步是指在多个并发执行的任务或线程之间建立一种时间上的关系,确保它们按照一定的顺序执行。
嵌入式操作系统_第7章 ucOS-II - 任务的同步互斥通信

IO)N;SO当就T_函8SE任绪USV数e务状EmON等P态S的TeS待n。e*返dmp的允如ePv回o时许果esnt间用值t参(/超参数/为信过数ti号已mttii量emmo创eeu的ootu被u建指tt时设设针的可置置信以一为结个0号,束等量则等待表的待时明状间指任态的针务而限。的进制入,等
待时间为无限长。 调用函数成功后,函数返回值为OS_ON_ERR,否则会根据具体 错误返回OS_ERR_EVENT_TYPE、OS_SEM_OVF。
函块以8 位IO)表数,N;至函vOS赋o明TO把S_占数i8低号号优_EdS这以U成EMVO用O8 先为值V是ESu员pOS这ENtMre无位级(M一SiNOTxo个uMTuCS个t效和(反该*te资uEre*pxet互xvpee)高转值Pa欲源Pevxete斥enevePn的,8现为(提ntneodT型dnts()y其t高位象0t从升,)p/信(/x的e他(/互/空8两而F赋互的号原任F斥事位部要斥以量时优型务型件型常用分提,为,先释信控信数然:来:升放信号级制号后O了存低的量号别S块量再该指_放8优为链指E)把信针V为位先有针表成,E号N了用级获效员量低T取避来别O_,。8TS一免存pY否位ErPv个i出放则oeE赋n。事_t现信M信C以件nUt常控的TE制数高X
926411-计算机操作系统教程-04第四章 互斥同步与通讯(2)

会合引入背景—分布系统
PV操作问题:
P1:
… P(S) CR1 V(S) …
共享变量 (被动) Semaphore s;
站点1
P2:
…
P(S) CR2 V(S) …
站点2
共享变量与访问进程在同一存储区,不适合分布环境。
会合引入背景—分布系统
管程问题:
P1: ... ...
管程(被动) 共享变量 CR1 CR2
end single_resource;
task body single_resource is begin loop accept acquire; accept return; end loop end single_resource;
single_resource.acquire;
使用
single_resource.return;
Bounded buffer problem
loop select when (count<k) => accept putin(item:in integer) do b(ip):=item end putin; ip:=(ip+1)mod k; count:=count+1;
Bounded buffer problem
4.3.6 会合(Rendezvous)
背景
80年代, Ada, Initiated by DOD; Ada 95, (Object-oriented)
Augusta Ada Lovlace 1815—1852 世界上第一位程序设计师 原名: Augusta Ada Byron
Lord George Gorden Byron的女儿 1788—1824
操作系统精髓与设计原理-第5章 并发性_互斥和同步

第五章并发性:互斥和同步复习题:5.1列出与并发相关的四种设计问题答:进程间的交互,共享资源之间的竞争,多个进程的同步问题,对进程的处理器时间分配问题5.2列出并发的三种上下文答:多个应用程序,结构化应用程序,操作系统结构5.3执行并发进程的最基本要求是什么?答:加强互斥的能力5.4列出进程间的三种互相知道的程度,并简单地给出各自的定义。
答:进程间互相不知道对方:这是一些独立的进程,他们不会一起工作。
进程间间接知道对方:这些进程并不需要知道对方的进程ID号,但他们共享访问某些对象,如一个I/O缓冲区。
进程间直接知道对方:这些进程可以通过进程ID号互相通信,用于合作完成某些活动。
5.5竞争进程和合作进程进程间有什么区别。
答:竞争进程需要同时访问相同的资源,像磁盘,文件或打印机。
合作进程要么共享访问一个共有的资源,像一个内存访问区,要么就与其他进程相互通信,在一些应用程序或活动上进行合作。
5.6列出与竞争进程相关的三种控制问题,并简单地给出各自的定义。
答:互斥:竞争进程仅可以访问一个临界资源(一次仅有一个进程可以访问临界资源),并发机制必须满足一次只有一个进程可以访问临界资源这个规则。
死锁:如果竞争进程需要唯一的访问多于一个资源,并且当一个进程控制着一个进程,且在等待另一个进程,死锁可能发生。
饥饿:一组进程的一个可能会无限期地拒绝进入到一个需要资源,因为其他成员组成垄断这个资源。
5.7列出对互斥的要求。
答:1.必须强制实施互斥:在具有关于相同资源或共享对象的临界区的所有进程中,一次只允许一个进程进入临界区。
2.一个在临界区停止的进程必须不干涉其他进程。
3.绝不允许出现一个需要访问临界区的进程被无限延迟的情况,即不会饿死或饥饿。
4.当没有进程在临界区中时,任何需要进入临界区的进程必须能够立即进入。
5.对相关进程的速度和处理器的数目没有任何要求和限制。
6.一个进程驻留在临界区中的时间是有限的。
5.8在信号量上可以执行什么操作。
并发性:互斥和同步

此两种进程必须遵循一定的规则
利用信号量实现进程同步-2
• 为了实现进程同步,需采用同步信号量。 • 设置一个同步信号量full,它代表的资源是缓冲器满,它 的初值为0。这个资源是Print进程所拥有,Print进程可以 申请该资源,对它施加P操作,如条件满足Print进程可从 Buffer中取数。而Print进程的合作进程Compute对full信号 量施加V操作,即它可释放该资源。当Compute进程将数 据存入Buffer后,即可释放该资源供Print进程再使用。 • 设置另一个同步信号量empty,它代表的资源是缓冲器空, 它的初值为1 。缓冲器空这个资源是进程Compute所拥有, 它可以申请该资源,对它施加Print操作。而它的合作进程 Print对empty信号量施加V操作。
5.5 读者/写者问题
• 一个数据集(如文件)如果被几个并行进程所共享,有些 一个数据集(如文件)如果被几个并行进程所共享, 进程只要求读数据集内容,它称读者, 进程只要求读数据集内容,它称读者,而另一些进程则要 求修改数据集内容,它称写者, 求修改数据集内容,它称写者,几个读者可以同时读些数 据集,而不需要互斥,但一个写者不能和其它进程( 据集,而不需要互斥,但一个写者不能和其它进程(不管 是写者或读者)同时访问些数据集,它们之间必须互斥。 是写者或读者)同时访问些数据集,它们之间必须互斥。 • 设置互斥信号量 信号量wmutex 表示写者间、读者和写者间互 表示写者间、 设置互斥信号量 读者和写者主要程序如下 程序如下: 斥,读者和写者主要程序如下: reader: writer: 第一个读者到时P( P(wmutex) 第一个读者到时 (wmutex) ) ( ) Read Text Write Text 最后一个读者离开时 一个读者离开时V( V(wmutex) 最后一个读者离开时 (wmutex) ) (
操作系统 进程管理三互斥和同步二

while TS(&lock); critical section lock = FALSE; remainder section
• 利用TS实现进程互斥:每个临界资源设置一个 公共布尔变量lock,初值为FALSE • 在进入区利用TS进行检查:有进程在临界区时, 重复检查;直到其它进程退出时,检查通过;
Test-and-Set指令
该指令读出标志后设置为TRUE boolean TS(boolean *lock) { boolean old; old = *lock; *lock = TRUE; return old; } lock表示资源的两种状态:TRUE表示正被占用, FALSE表示空闲
6
互斥算法(TS指令)
记录型信号量和wait、signal原语
• 信号量是一个确定的二元组(value, L), value 是一个具有非负初值的整型变量,L 是 一个初始状态为空的队列。 • value代表资源的实体。在实际应用中应准确地说
明s的意义和初值;
– 初始化指定一个非负整数值,表示空闲资源总数(又称为―资源信号 量‖)--若为非负值表示当前的空闲资源数,若为负值其绝对值表示 当前等待临界区的进程数
第n个缓冲区
•Empty:有多少空缓冲区,初值为n; •Full:有多少带数据的缓冲区,初值 为0
B[n-1]
生产者消费者问题(续4)
4 用信号量实现进程的同步--生产者-消费者问题
• 我们把上面的例子扩 充,假定缓冲区 buffer 是 一 个 有 界 缓 冲 区, 可存放 n 个数据,同时 假 定 有 n 个 CP 进 程 不 断地产生数据,并送 buffer ; 有 m 个 IOP 进 程 从缓 冲区 中 取数 据 打印。 • 在我们生活中有很多 这样的例子。
os4

Begin L: real; L:=100; Cobegin Process s1; A,b:real; Begin Read(a); B:=L; B:=b+a; L:=b;
process s2 L,d:real; begin read(c) ; d:=L; d:=L+c; L:=d; end; coend;
s.queue链头PCB出等待队列,进入就绪队列(状态改为 就绪)。
P、V操作的定义
P(S) S:=S-1 ; 若S≥0,则调用P(S)的进程继续运行; 若S<0,则调用P(S)的进程阻塞,插入S的 阻塞队列。 V(S) S:=S+1; 若S>0,则调用V(S)的进程继续执行; 若S≤0,从等待S的阻塞队列中唤醒第一个 进程,然后调用V(S)的进程继续运行。
信号灯变量
Var S:semaphore; S.value S.queue
S.value S.queue
PCB
PCB FIFO
PCB
进程互斥的软件实现
信号量和P、V操作
公用信号量 实现进程间的互斥 初值为1 它所联系的一组并发进程均可实施P、V操作
信号量
私用信号量 实现进程间的同步,初值为0,n,只允许拥有它的进程对其实施P操作
例:设一民航航班售票系统有n个售票处。 每个售票处通过终端访问系统中的公用 数据区,假定公共数据区中一些单元 Xk(k=1,2,…)分别存放某月某日某次航班 的现存票数,设P1,P2,…,Pn表示各售票 处的处理进程,R1,R2,…,Rn表示各进程 执行时所用的工作单元。
begin process Pi(i=1,2,…,n) begin 按旅客订票要求找到Xk; R1:=Xk; if R1>=1 then begin R1:=R1-1; Xk:=R1; 输出一张票 end else begin 输出“票已售完” end end;
江苏师范大学操作系统ppt第2章-2 进程的同步与互斥

何生产者。
33
生产者/消费者必须同步 生产者不能向满缓冲区写数据,消费者也不能在空 缓冲区中去数据,即生产者与消费者必须同步
34
生产者/消费者问题(分析)
为解决生产者消费者问题,应该设两个同步信号量, 一个说明空缓冲区的数目,用empty表示,初值为缓 冲池的大小N,另一个说明已用缓冲区的数目,用full 表示,初值为0。
24
使用wait/signal操作实现同步应注意 信号量的设置 信号量的初值 wait/signal操作要成对出现,并在不同的进 程中
25
信号量及wait、signal操作讨论
wait、signal操作必须成对出现,有一个wait操作就一定有 一个signal操作 当为互斥操作时,它们同处于同一进程 当为同步操作时,则不在同一进程中出现
生产者/消费者问题 读者/写者问题 哲学家进餐问题
28
生产者/消费者问题 生产者消费者问题是一种同步问题的抽 象描述。计算机系统中的每个进程都可以消 费(使用)或生产(释放)某类资源。这些 资源可以是硬件资源,也可以是软件资源。 当某一进程使用某一资源时,可以看作 是消费,称该进程为消费者。而当某一进程 释放某一资源时,它就相当于生产者。
如果wait(S1)和wait(S2)两个操作在一起,那么wait操作的 顺序至关重要。
一个同步wait操作与一个互斥wait操作在一起时,同步wait 操作在互斥wait操作前,而两个signal操作无关紧要。
26
wait/signal操作实现互斥与同步的模板
进程互斥 S初值为1 P1 P2
输入 进程PI 缓冲区 计算 进程PC 缓冲区 打印 进程PP
23
利用信号量实现进程同步的实例
第五章互斥与同步-PPT课件

5.4 信号量
3.整型信号量 整型信号量是通过定义一个整型变量,如s ,和 两个标准的原子操作wait(s)和 signal(s)来 对s进行减1和增1操作,以实现对临界资源的 访问控制。这两个原子操作习惯上分别被称为 P操作和V操作。 两种实现方式:忙等待与阻塞等待。
Pi:
while(true) {… while(flag[j]);/*执行空语句等待*/ flag[i]=true; 执行csi /* 进程Pi的临界区*/ flag[i]=false;/*释放临界资源*/ …}
5.3 互斥
(2)用一个turn来指示哪个进程应该进入临界 区,turn=i表示pi可以进入临界区。
(2)硬件指令的方法
TS(Test-and Set)指令 bool founction TS (bool flag) { TS =flag; flag=true;/*关闭临界区*/ }
2.互斥的硬件解决方法
例:用TS硬件指令方法实现互斥
while(true) {while(TS(lock)); 执行csi lock=false; ……}
Pi: While(true) {… while(turn!=i); /*执行空语句等待*/ 执行csi; /*临界区*/ turn=j; /* (j!=i) 释放临界资源*/ … } 强制在两个进程之间轮换,不能满足空闲让进的原则!
(3)Dekker的软件解决方法(一种正确的方法) 初始化:flag[0]=flag[1]=false;turn可以为0或1; Pi: while(true) {flag[i]=true;/*标识想进入临界区的进程*/ while(flag[j]) {if(turn==j) { flag[i]=false; while(turn==j); flag[i]=true; }} 执行csi /*执行临界区代码*/ turn=j;flag[i]=false; …… }
互斥事件PPT演示文稿

及其
发生的概率
江苏如东马塘中学 张伟锋
创设问题:
体育考试的成绩分为4个等级;优、良、中、不及格。某班 50名学生参加了体育考试,结果如下:
优 良 中 不及格
85分以上 9人 75~ 84 15人 60~ 74 21人 60分以下 5人
问题1:在同一次考试中,某一位同学能否既得优又得良? 问题2:从这个班任意抽取一位同学,那么这位同学的测试 成绩为“优”的概率,为“良”的概率,为“优良”(优或 良)的概率分别是多少?
A与A互斥
P(A) 1 P(A)
重要结论:
• 根据对立事件的意义,A+ A 是一个必然 事件,它的概率等于1。 又由于A与 A 互斥,我们得到 P(A+ A )=P(A)+P(A )=1 对立事件的概率的和等于1 P( A )=1-P(A)
例2: 某人射击1次,命中7~10环的概 率如下表所示:
3某地区年降水量(单位:mm)在下列范围 内的概率如下表:
年降 水量 [600,800) [800,1000) [1000,1200) [1200,1400) [1400, 1600) 概率 0.12 0.26 0.38 0.16 0.08
巩固结论:
1个盒内放有10个大小相同的小球,其中有7 个红球,2个绿球,1个黄球,从中任取一个球, 求:
(1)得到红球的概率; (2)得到绿球的概率; (3)得到红球或者绿球的概率。
巩固结论:
1个盒内放有10个大小相同的小球,其中有7 个红球,2个绿球,1个黄球,从中任取一个球, 求:
(1)得到红球的概率; (2)得到绿球的概率; (3)得到红球或者绿球的概率。
例1 、一只口袋内装有大小一样的4只白球和4 只黑球,从中一次任意摸出2只球。记摸出2只 白球为事件A,摸出1只白球和1只黑球为事件 B。问:事件A与B是否为互斥事件?是否为对 立事件?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
R(p1)∩W(p2)∪R(p2)∩W(p1)∪W(p1)∩W(p2)=Φ
4.1.4 程序并发执行的条件
例如,有如下四条语句:
S1: a:=x+y S2: b:=z+1 S3: c:=a-b S4: w:=c+1
End
4.1.5 与时间有关的错误(Cont.)
错误原因之1: 进程执行交叉(interleave);
错误原因之2: 涉及公共变量(x)。
Remarks: 某些交叉结果不正确; 必须去掉导致不正确结果的交叉。
4.2 进程互斥(mutual exclusion)
4.2.1 共享变量与临界区 4.2.2 临界区域与进程互斥 4.2.3 进程互斥的实现
I1
C
P1
I2
C
P2
1
2
4.1.2顺序程序及其特性
4.1.2.2顺序程序特性:
(1)连续性: 指令逐条执行 (2)封闭性: 不受其它程序及外界因素影响 (3)可再现性: 结果与推进速度无关
4.1.3 并发程序及其特性
4.1.3.1 程序的并发执行
(1)内部并发性: 指一个程序内部 的并发性。例:
4.1.5 与时间有关的错误
例:图书借阅系统 (x:某种书册数,设当前x=1.)
终端1:
CYCLE
等待借书者;
IF x>=1 Then
Begin
1
x:=x-1;
借书
3
End
Else 无书
End
终端2:
CYCLE
等待借书者;
IF x>=1 Then
Begin
2
x:=x-1;
借书 4 End
Else 无书
不可再现性的例子
进程P:
进程Q:
A1: N:=0;
B1: PRINT(N);
A2: N:=N+1; B2: N:=0;
A3: GOTO A2; B3: GOTO B1;
并发执行结果不唯一
4.1.3 并发程序及其特性
4.1.3.2 并发程序的特性
(1)间断性:程序交叉执行。 (2)非封闭性:一个进程的运行环境可能
点称为终止结点。 每个结点可以有一个权重(weight),它可以表示该结点所
包含的程序量或计算时间。
4.1并发进程
前趋图的例子
P1→P2,P1→P3,P1→P4,P2→P5, P3→P5,P4→P5,P4→P6,P5→P7, P6→P7
2
1
3
5 7
6
4
4.1.2顺序程序及其特性
4.1.2.1 程序的顺序执行
被其它进程所改变,从而相互影响。 (3)不可再现性:由于交叉的随机性,并
发程序的多次执行可能对应不同的交叉,因 而不能期望重新运行的程序能够再现上次运 行的结果。
4.1.4 程序并发执行的条件
在失去封闭性的条件下,保持可再现性。
R(pi)={a1,a2,…,am}表示程序pi在执行期间所 需读取的所有变量的集合,称为“读集”;
W(pi)={b1,b2,…,bn}表示程序pi在执行期间所 需改变的所有变量的集合,称为“写集”。
若有两条语句c=a+b和v=c-1,则它们的“读集”和 “写集”分别为:
R(c:=a+b)={a,b},R(v:=c-1)={c} W(c:=a+b)={c},W(v:=c-1)={v}
பைடு நூலகம்
4.1.4 程序并发执行的条件
S1:a:=x+2; S2:b:=y+4; 1 S3:c:=a+b; S4:d:=c+6; 2 S5:e:=c-d;
5 3
4
4.1.3 并发程序及其特性
4.1.3.1 程序的并发执行
(2)外部并发性: 指多个程序之间的并发性。
I1
I2
I3
I4
C
C
C
C
1
2
3
4
P1
P2
P3
P4
4.1.3 并发程序及其特性
R(S1)={x,y},R(S2)={z},R(S3)={a,b}, R(S4)={c}
W(S1)={a},W(S2)={b},W(S3)={c}, W(S4)={w}
可见, R(S1)∩W(S2)∪R(S2)∩W(S1)∪W(S1)∩W(S2)= Φ,因而S1和S2可以并发执行;而S1 和S3不能并发 执行,因为W(S1)∩R(S3)={a};S2和S3也不能并 发执行,因为W(S2) ∩R(S3)={b};同样,S3和S4 不能并发执行,因为W(S3)∩R(S4)={c}。
4.2.1 共享变量与临界区域
共享变量(shared variable)
多个进程都需要访问的变量。
临界区域(critical region)
访问共享变量的程序段。
一组公共变量
CR1 CR2 …….
CRn
表示
共享变量: shared <一组变量> 临界区域: region <一组变量> do <语句>
例子:shared B:array[0,..,n-1]of integer;
region B do
region B do
begin
begin
…… (访问B)
有向无环图,图中每个结点表示一个语句、一个计算步骤、 或一个进程。
结点间的有向边表示偏序或前趋(precedence relation) 关系“→” 。
→={(Pi,Pj)| Pj启动之前Pi必须已经完成}。 (Pi,Pj)∈→可记作Pi→Pj, 称Pi是Pj的前趋,Pj是Pi的
后继。 在前趋图中,没有前趋的结点称为初始结点,没有后继的结
第四章 互斥、同步与通讯
并发进程(concurrent processes) 进程互斥(mutual exclusion) 进程同步(synchronization) 进程高级通讯(communication)
4.1并发进程
4.1.1前趋图的定义
前趋图(precedence graph)
(1)内部顺序性:对于一个进程来说,它 的所有指令是按序执行的。
S1:a:=x+y S2:b:=a-z S3:c:=a+b S4:d:=c+5
S
S
S
S
1
2
3
4
4.1.2顺序程序及其特性
(2)外部顺序性:对于多个进程来说,所 有进程的活动是依次执行的。
例: 输入(I)、计算(C)、打印(P)三个活动 构成的进程,每个进程的内部活动是顺序的, 即Ii→Ci→Pi,多个进程的活动也是顺序的。