Upload
caspar
View
72
Download
0
Embed Size (px)
DESCRIPTION
第四章 互斥、同步与通讯. 并发进程 (concurrent processes) 进程互斥 (mutual exclusion) 进程同步 (synchronization) 进程高级通讯 (communication). 4.1 并发进程. 4.1.1 顺序性与并发性 顺序性 内部顺序性: P1: a1,a2,a3; P2: b1,b2,b3 外部顺序性: a1,a2,a3,b1,b2,b3; b1,b2,b3,a1,a2,a3 并发性 内部并发性: P2: b1,b2,b3; P2: b1,b3,b2 - PowerPoint PPT Presentation
Citation preview
软件教研室软件教研室
第四章 互斥、同步与通讯
• 并发进程 (concurrent processes)
• 进程互斥 (mutual exclusion)
• 进程同步 (synchronization)
• 进程高级通讯 (communication)
软件教研室软件教研室
4.1 并发进程• 4.1.1 顺序性与并发性
– 顺序性• 内部顺序性: P1: a1,a2,a3; P2: b1,b
2,b3• 外部顺序性: a1,a2,a3,b1,b2,b3; b1,
b2,b3,a1,a2,a3– 并发性
• 内部并发性: P2: b1,b2,b3; P2: b1,b3,b2
• 外部并发性: a1,b1,b2,a2,a3,b3; b1,b2,a1,b3,a2,a3
软件教研室软件教研室
4.1.2 与时间有关的错误例:图书借阅系统 ( x: 某种书册数,设当前 x=1. )
终端 1 : 终端 2 :CYCLE CYCLE 等待借书者; 等待借书者; IF x>=1 Then IF x>=1 Then Begin Begin x:=x-1; x:=x-1; 借书 借书 End End Else 无书 Else 无书 End End
软件教研室软件教研室
4.1.2 与时间有关的错误 (Cont.)错误原因之 1 :
进程执行交叉 (interleave);
错误原因之 2 : 涉及公共变量 (x) 。Remarks:
某些交叉结果不正确 ;
必须去掉导致不正确结果的交叉。
软件教研室软件教研室
4.2.1 共享变量与临界区域• 共享变量( shared variable )
– 多个进程都需要访问的变量。• 临界区域( critical region )
– 访问共享变量的程序段。 一组公共变量
CR
1
CR
2
CRn…….
软件教研室软件教研室
表示
共享变量 : shared < 一组变量 >
临界区域 : region < 一组变量 > do < 语句>
例子: shared B:array[0,..,n-1]of integer; region B do region B do begin begin …… ( 访问 B ) … .. (访问 B ) . end; end;
软件教研室软件教研室
4.2.2 临界区域与进程互斥定义:多个进程不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误,这种现象称为进程互斥。。
二层涵义:
( 1 )任何时刻最多只能有一个进程处于同一组共享变量的相同的临界区域;
( 2 )任何时刻最多只能有一个进程处于同一组共享变量的不同的临界区域。
Remarks: 互斥是相对于公共变量而言的。
软件教研室软件教研室
嵌套临界区域 shared x1,x2; shared y1,y2;
region x1,x2 do region y1,y2 do begin begin …… ……. region y1,y2 do region x1,x2 do begin begin ……. ……. end end end; end;
软件教研室软件教研室
4.2.3 进程互斥的实现•Framework
Repeat
critical section
remainder section
Until false
entry section
exit section
软件教研室软件教研室
4.2.3 进程互斥的实现• Requirements:
– 互斥访问: 一次只允许一个进程活动在关于同一组公共变量的临界区中;
– 空闲让进 : 临界区空闲时,多个竞争者在有限时间内确定下一个进入者;
– 有限等待 : 一个想要进入临界区的进程在等待有限个进程进入并离开临界区后获得进入临界区的机会。
软件教研室软件教研室
4.2.3.2 进程互斥的硬件实现1. 硬件提供“测试并建立”指令 Function test_and_set(var target:Boolean):Boolean; Begin test_and_set:=target; target:=true End. 对一组公共变量, var lock:Boolean (初始 =false); Pi 进入: While test_and_set(lock)Do skip; Pi 离开: lock:=false;
软件教研室软件教研室
4.2.3.2 进程互斥的硬件实现2. 硬件提供“交换”指令 Procedure swap(var a,b:boolean) var temp: boolean; Begin temp:=a; a:=b; b:=temp End;
对一组公共变量: var lock: boolean( 初始 =false); 对一个进程空间: var key: boolean; Pi 进入: key:=true;
Repeat swap(lock,key) Until key=false; Pi 离开: lock:=false;
软件教研室软件教研室
4.2.3.2 进程互斥的硬件实现Remarks :(1) test_and_set 指令和 swap 指令是原子的,不可中断的。
(2) test_and_set 实际上是:将内存中一个单元的内容取出,再送一个新值。
(3) swap 实际上是:交换内存两个单元的内容。
软件教研室软件教研室
4.2.3.2 进程互斥的硬件实现3. 硬件提供“关中断”和“开中断”指令 关中断 { Critical Region}
开中断Remarks: (1) 开关中断只在单 CPU 系统中有效 ; (2) 影响并发性。
软件教研室软件教研室
4.3 进程同步
4.3.1 进程同步的概念例:司机 - 售票员问题 司机活动: 售票员活动: do{ do{ 启动车辆 关车门 正常行驶 售 票 到站停车 开车门 while(1) while(1)
软件教研室软件教研室
4.3.1 进程同步的概念定义:一组进程,为协调其推进速度,在某些关键点处需要相互等待与相互唤醒,进程之间这种相互制约的关系称为进程同步。
P1:
P2:
synchronize
后
先
软件教研室软件教研室
4.3.2 进程同步机制• 定义:用于实现进程同步的工具称为同
步机制( synchronization mechanism )• 同步机制要求:
– 描述能力够用 ;– 可实现 ;– 高效 ;–使用方便 .
软件教研室软件教研室
典型同步机制
• 信号灯与 PV 操作 (semaphore and PV operations)
• 管程 (monitor)• 会合 (rendezvous)• 条件临界区 (conditional critical region)• 路径表达式 (path expression)• 事件 (traditional UNIX)
软件教研室软件教研室
4.3.3 信号灯与 PV操作E.W.Dijkstra, 1965.
4.3.3.1 信号灯与 PV操作的定义 TYPE semaphore=RECORD value: integer; queue: PCB pointer; END; VAR s: semaphore;Remarks:(1) semaphore is pre-defined data type,(2) s can be declared as needed, eg. var s1,s2:semaphore;
软件教研室软件教研室
信号灯变量
S.valueS.queue
S.valueS.queue PCB PCB PCB
Var S:semaphore;
FIFO
软件教研室软件教研室
P操作原语P操作原语:Procedure P(var s:semaphore) s.value:=s.value-1; If s.value<0 Then asleep(s.queue)End
asleep(s.queue):(1) 执行此操作进程的 PCB 入 s.queue尾(状态改为等待);(2) 转处理机调度程序。
软件教研室软件教研室
V操作原语V操作原语:Procedure V(var s:semaphore) s.value:=s.value+1; If s.value<=0 Then wakeup(s.queue)End
wakeup(s.queue)
s.queue链头 PCB 出等待队列,进入就绪队列(状态改为就绪)。
软件教研室软件教研室
规定和结论• 对于信号灯变量的规定:
– 必须置一次初值且只能置一次,初值 >=0;
– 只能执行 P操作和 V操作。• 几个有用的结论:
– s.value>=0 时, s.queue 为空;– s.value<0 时, |s.value| 为队列 s.queue 的长度;– s.value 初 =1 时,可以实现进程互斥;– s.value 初 =0 时,可以实现进程同步。
软件教研室软件教研室
用信号灯实现进程互斥用信号灯实现进程互斥Var mutex: semaphore; ( 初值 =1 )
shared x,y,z:integer;
CR1 CR2 CRn……
软件教研室软件教研室
用信号灯实现进程互斥Var mutex: semaphore; ( 初值 =1 )
shared x,y,z:integer;
P(mutex) P(mutex) P(mutex)
CR1 CR2 CRn
V(mutex) V(mutex) V(mutex)
……
软件教研室软件教研室
互斥例子:借书系统 (revisited)Var mutex:semaphore; (initial value is 1)
终端 1 : 终端 2 :CYCLE CYCLE 等待借书者; 等待借书者; P(mutex) P(mutex) IF x>=1 Then IF x>=1 Then Begin Begin x:=x-1; x:=x-1; V(mutex) V(mutex) 借书 借书 End End Else V(mutex); 无书 ; Else V(mutex); 无书 ; End End
软件教研室软件教研室
用信号灯实现进程同步
General Case:General Case:
VAR S:semaphore; (initial value 0)VAR S:semaphore; (initial value 0)
P(S)后动作
先动作 V(S)
P1: P2:
软件教研室软件教研室
用信号灯实现进程同步例子:司机 -售票员问题:VAR s1,s2: semaphore; (initial value 0)司机活动: 售票员活动: Repeat Repeat P(S1) 关车门 启动车辆 V(S1) 正常行驶 售 票 到站停车 P(S2) V(S2) 开车门 Until false Until false
软件教研室软件教研室
例 1. 生产者 /消费者问题预备知识:
组合资源:若干相对独立的资源构成的资源集合,其中每个相对独立的资源称为子资源。
同种组合资源:相同类型子资源构成的组合资源。
管理: Var S:semaphore; ( 初值 = 子资源个数)
例子: 2 台打印机 Var S:semaphore; S.value=2; 申请: P ( S ); 释放: V ( S );
软件教研室软件教研室
自动机描述
22 …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 ...
软件教研室软件教研室
例 1. 生产者 /消费者问题
0 1 …… k-1
箱子,容量 k
B:Array[0..k-1]Of item
生产者 消费者
生产物品放入 B 中
B 中取物品消费之
软件教研室软件教研室
环形缓冲区
1
0
K-1
in
(in+1)mod k
out (out+1)mod k
软件教研室软件教研室
问题分析生产者活动: 消费者活动: do{ do 加工一件物品 箱中取一物品 物品放入箱中 消耗这件物品 while(1) while(1)资源:箱子(同种组合) 资源:物品(同种组合)Var S1:semaphore; Var S2:semaphore; S1.value=k; S2.value=0;放前: P ( S1 ) 取前: P ( S2 )放后: V( S2 ) 取后: V( S1 )
软件教研室软件教研室
同步生产者活动: 消费者活动: Repeat Repeat 加工一件物品 P(S2) P(S1) 箱中取一物品 物品放入箱中 V(S1) V(S2) 消耗这件物品 Until false Until false
对 B 和 in,out 的互斥:Var mutex:semaphore; (mutex.value=1)
软件教研室软件教研室
互斥生产者活动: 消费者活动: Repeat Repeat 加工一件物品 P(S2) P(S1) P(mutex) P(mutex) 箱中取一物品 物品放入箱中 V(mutex) V(mutex) V(S1) V(S2) 消耗这件物品 Until false Until false
软件教研室软件教研室
并发性提高策略生产者和消费者:不操作 B 的相同分量
生产者的共享变量:
B[in] , in消费者的共享变量:
B[out] , out
in=out: 满或空 ,
Var mutex1,mutex2:semaphore; (init 1)
软件教研室软件教研室
并发性提高策略生产者活动: 消费者活动: Repeat Repeat 加工一件物品 P(S2) P(S1) P(mutex2) P(mutex1) 箱中取一物品 物品放入箱中 V(mutex2) V(mutex1) V(S1) V(S2) 消耗这件物品 Until false Until false
软件教研室软件教研室
例 2. 读者 /写者问题Problem Statement:
一组公共数据 DB
R1 …… Rm W1 …... Wn要求:( 1 ) R-R 可以同时 ( 2 ) R-W 不可同时 ( 3 ) W-W 不可同时
accessing
软件教研室软件教研室
Solution1: 不考虑 R-R 不互斥Var r_w_w:semaphore; (initial value: 1)Reader : Writer: P ( r_w_w); P(r_w_w) { 读操作 } { 写操作 } V ( r_w_w); V ( r_w_w)
分析:( 1 )写者活动正确;( 2 ) R-R 不能同时。
改进:最先进入的 R 执行 P ;最后离开的 R 执行 V ;
软件教研室软件教研室
Solution2: 考虑 R-R 不互斥Var read_count:integer; (initial value is 0)
Reader:
read_count:=read_count+1;
If read_count=1 Then P(r_w_w);
{ 读操作 }
read_count:=read_count-1;
If read_count=0 Then V(r_w_w);
问题:对 Read_count 操作的互斥问题。
软件教研室软件教研室
Var mutex:semaphore; (initial value is 1) Reader: P(mutex); read_count:=read_count+1; If read_count=1 Then P(r_w_w); V(mutex); { 读操作 } P(mutex); read_count:=read_count-1; If read_count=0 Then V(r_w_w); V(mutex);
软件教研室软件教研室
程序Program readers_writers;Var r_w_w: semaphore; mutex:semaphore; read_count: integer;procedure writer;begin P(r_w_w); { write ops } V(r_w_w)end;
软件教研室软件教研室
程序( Cont. )Procedure reader;begin P(mutex); read_count:=read_count+1; If read_count=1 Then P(r_w_w); V(mutex); { read ops } P(mutex); read_count:=read_count-1; If read_count=0 Then V(r_w_w); V(mutex);end;
软件教研室软件教研室
程序( Cont. )begin read_count:=0; r_w_w.value:=1; mutex.value:=1; cobegin r1: reader; ……; rm: reader; w1: writer; ,,,,,,; wn: writer coendend.
软件教研室软件教研室
例 3 3 台打印机管理Var lp:array[1..3]of (free,used); (initial value is free) S: semaphore; (initial value is 3) mutex: semaphore; (initial value is 1)function require:1..3; procedure return(i:1..3); P(S); P(mutex); P(mutex); lp[i]:=free; for i:=1 to 3 do V(mutex); if lp[i]=free then V(S); break; lp[i]:=used; V(mutex); return(i);
软件教研室软件教研室
4.4 进程高级通讯
• 进程通讯:进程之间的相互作用。• 低级通讯(简单信号)
–进程互斥–进程同步
• 高级通讯(大量信息)
4.4.1 进程通讯概念
软件教研室软件教研室
4.4.2 进程通讯模式
P1
1. 共享内存模式 (shared memory) :
2. 消息传递模式 (message passing) :
P2
OS 提供:( 1 )公共内存( 2 )互斥同步机制
P1 P2Msend
receive
直接:进程 - 进程
间接:进程 - 信箱 - 进程
软件教研室软件教研室
4.4.3 直接方式• 对称形式 (sender and receiver name each other)
– send(R,message)– receive(S,message)
…Send(R,M)
...
…Receive(S,N)
...
S: R:
软件教研室软件教研室
4.4.3 直接方式
…receive(pid,N)
...
…send(R,M1)
...
…send(R,M2)
...
• 非对称形式 (only sender names receiver)– send(R,message)– receive(pid,message)
C/S model
R:
S1:
S2:
软件教研室软件教研室
4.4.3.1 有缓冲途径
PCB
…send(R,M)
…size text
...
PCB
…receive(pid,N)
… ...
M:N:
msg
msg
msg
...
发送者 S: 接收者 R:
软件教研室软件教研室
Message passing, direct,non-symmetric, buffering
Sizetext
senderlink
载有消息的缓冲: 进程消息队列管理: Var Sm:semaphore; (0) 收取消息前: P ( Sm ) ; 消息入队后: V ( Sm);
消息队列互斥: Var m_mutex:semaphore;(1) P(m_mutex); 取 ( 放 ) 动作 ; V ( m_mutex);
软件教研室软件教研室
Buffer pool management
buf buf buf...
Var Sb, b_mutex:semaphore; (k,1)
申请: P(Sb); P(b_mutex); 头缓冲出链 ; V(b_mutex);
释放: P(b_mutex); 缓冲入链头 ; V(b_mutex); V(Sb);
Head :
软件教研室软件教研室
发送 - 接收原语Send(R,M) 根据 R 找接收者; P(Sb); P(b_mutex); 取一空 buf; V(b_mutex); text,size,sender => buf P(m_mutex); 消息入链尾; V(m_mutex); V(Sm);
Receive(pid,N) P(Sm); P(m_mutex); 头消息出链 ; V(m_mutex); text,size => N sender => pid P(b_mutex); 空 buf 入链; V(b_mutex); V(Sb);
软件教研室软件教研室
4.4.4 间接方式
Mailbox
Send_mb(mb,m) Receive_mb(mb,n)
..
.
multi-sender -- multi-receiver;
multi-sender -- one receiver
软件教研室软件教研室
4.4.4.1 信箱属于操作系统空间Type mailbox=record in,out:0..k; s1,s2:semaphore; (k,0) mutex:semaphore; (1) letter:array[0..k-1]of message; end;Var mb:mailbox;create_mb(mb); 系统调用delete_mb(mb); 系统调用
软件教研室软件教研室
信箱通讯Procedure send_mb(var mb:mailbox; m:massage); begin with mb do begin P(s1); P(mutex); letter[in]:=m; in:=(in+1)mod k; V(mutex); V(s2) end; end;
软件教研室软件教研室
信箱通讯Procedure receive_mb(var mb:mailbox; var n:massage); begin with mb do begin P(s2); P(mutex); n:=letter[out]; out:=(out+1)mod k; V(mutex); V(s1) end; end;
软件教研室软件教研室
属于操作系统空间的信箱
…
Var mb: mailbox
create_MB
delete_MB
send_MB
receive_MB
…creat_MB(mb)
…receive_MB(mb,N)
…delete_MB(mb)
…N:
…send_MB(mb,M)
…
…M: