第四章 互斥、同步与通讯

58
软软软软软 软软软软软 第第第 第第 第第第第第 第第第第 (concurrent processes) 第第第第 (mutual exclusion) 第第第第 (synchronization) 第第第第第第 (communication)

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

Transcript of 第四章 互斥、同步与通讯

Page 1: 第四章  互斥、同步与通讯

软件教研室软件教研室

第四章 互斥、同步与通讯

• 并发进程 (concurrent processes)

• 进程互斥 (mutual exclusion)

• 进程同步 (synchronization)

• 进程高级通讯 (communication)

Page 2: 第四章  互斥、同步与通讯

软件教研室软件教研室

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

Page 3: 第四章  互斥、同步与通讯

软件教研室软件教研室

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

Page 4: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.1.2 与时间有关的错误 (Cont.)错误原因之 1 :

进程执行交叉 (interleave);

错误原因之 2 : 涉及公共变量 (x) 。Remarks:

某些交叉结果不正确 ;

必须去掉导致不正确结果的交叉。

Page 5: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.2.1 共享变量与临界区域• 共享变量( shared variable )

– 多个进程都需要访问的变量。• 临界区域( critical region )

– 访问共享变量的程序段。 一组公共变量

CR

1

CR

2

CRn…….

Page 6: 第四章  互斥、同步与通讯

软件教研室软件教研室

表示

共享变量 : shared < 一组变量 >

临界区域 : region < 一组变量 > do < 语句>

例子: shared B:array[0,..,n-1]of integer; region B do region B do begin begin …… ( 访问 B ) … .. (访问 B ) . end; end;

Page 7: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.2.2 临界区域与进程互斥定义:多个进程不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误,这种现象称为进程互斥。。

二层涵义:

( 1 )任何时刻最多只能有一个进程处于同一组共享变量的相同的临界区域;

( 2 )任何时刻最多只能有一个进程处于同一组共享变量的不同的临界区域。

Remarks: 互斥是相对于公共变量而言的。

Page 8: 第四章  互斥、同步与通讯

软件教研室软件教研室

嵌套临界区域 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;

Page 9: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.2.3 进程互斥的实现•Framework

Repeat

critical section

remainder section

Until false

entry section

exit section

Page 10: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.2.3 进程互斥的实现• Requirements:

– 互斥访问: 一次只允许一个进程活动在关于同一组公共变量的临界区中;

– 空闲让进 : 临界区空闲时,多个竞争者在有限时间内确定下一个进入者;

– 有限等待 : 一个想要进入临界区的进程在等待有限个进程进入并离开临界区后获得进入临界区的机会。

Page 11: 第四章  互斥、同步与通讯

软件教研室软件教研室

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;

Page 12: 第四章  互斥、同步与通讯

软件教研室软件教研室

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;

Page 13: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.2.3.2 进程互斥的硬件实现Remarks :(1) test_and_set 指令和 swap 指令是原子的,不可中断的。

(2) test_and_set 实际上是:将内存中一个单元的内容取出,再送一个新值。

(3) swap 实际上是:交换内存两个单元的内容。

Page 14: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.2.3.2 进程互斥的硬件实现3. 硬件提供“关中断”和“开中断”指令 关中断 { Critical Region}

开中断Remarks: (1) 开关中断只在单 CPU 系统中有效 ; (2) 影响并发性。

Page 15: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.3 进程同步

4.3.1 进程同步的概念例:司机 - 售票员问题 司机活动: 售票员活动: do{ do{ 启动车辆 关车门 正常行驶 售 票 到站停车 开车门 while(1) while(1)

Page 16: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.3.1 进程同步的概念定义:一组进程,为协调其推进速度,在某些关键点处需要相互等待与相互唤醒,进程之间这种相互制约的关系称为进程同步。

P1:

P2:

synchronize

Page 17: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.3.2 进程同步机制• 定义:用于实现进程同步的工具称为同

步机制( synchronization mechanism )• 同步机制要求:

– 描述能力够用 ;– 可实现 ;– 高效 ;–使用方便 .

Page 18: 第四章  互斥、同步与通讯

软件教研室软件教研室

典型同步机制

• 信号灯与 PV 操作 (semaphore and PV operations)

• 管程 (monitor)• 会合 (rendezvous)• 条件临界区 (conditional critical region)• 路径表达式 (path expression)• 事件 (traditional UNIX)

Page 19: 第四章  互斥、同步与通讯

软件教研室软件教研室

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;

Page 20: 第四章  互斥、同步与通讯

软件教研室软件教研室

信号灯变量

S.valueS.queue

S.valueS.queue PCB PCB PCB

Var S:semaphore;

FIFO

Page 21: 第四章  互斥、同步与通讯

软件教研室软件教研室

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) 转处理机调度程序。

Page 22: 第四章  互斥、同步与通讯

软件教研室软件教研室

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 出等待队列,进入就绪队列(状态改为就绪)。

Page 23: 第四章  互斥、同步与通讯

软件教研室软件教研室

规定和结论• 对于信号灯变量的规定:

– 必须置一次初值且只能置一次,初值 >=0;

– 只能执行 P操作和 V操作。• 几个有用的结论:

– s.value>=0 时, s.queue 为空;– s.value<0 时, |s.value| 为队列 s.queue 的长度;– s.value 初 =1 时,可以实现进程互斥;– s.value 初 =0 时,可以实现进程同步。

Page 24: 第四章  互斥、同步与通讯

软件教研室软件教研室

用信号灯实现进程互斥用信号灯实现进程互斥Var mutex: semaphore; ( 初值 =1 )

shared x,y,z:integer;

CR1 CR2 CRn……

Page 25: 第四章  互斥、同步与通讯

软件教研室软件教研室

用信号灯实现进程互斥Var mutex: semaphore; ( 初值 =1 )

shared x,y,z:integer;

P(mutex) P(mutex) P(mutex)

CR1 CR2 CRn

V(mutex) V(mutex) V(mutex)

……

Page 26: 第四章  互斥、同步与通讯

软件教研室软件教研室

互斥例子:借书系统 (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

Page 27: 第四章  互斥、同步与通讯

软件教研室软件教研室

用信号灯实现进程同步

General Case:General Case:

VAR S:semaphore; (initial value 0)VAR S:semaphore; (initial value 0)

P(S)后动作

先动作 V(S)

P1: P2:

Page 28: 第四章  互斥、同步与通讯

软件教研室软件教研室

用信号灯实现进程同步例子:司机 -售票员问题:VAR s1,s2: semaphore; (initial value 0)司机活动: 售票员活动: Repeat Repeat P(S1) 关车门 启动车辆 V(S1) 正常行驶 售 票 到站停车 P(S2) V(S2) 开车门 Until false Until false

Page 29: 第四章  互斥、同步与通讯

软件教研室软件教研室

例 1. 生产者 /消费者问题预备知识:

组合资源:若干相对独立的资源构成的资源集合,其中每个相对独立的资源称为子资源。

同种组合资源:相同类型子资源构成的组合资源。

管理: Var S:semaphore; ( 初值 = 子资源个数)

例子: 2 台打印机 Var S:semaphore; S.value=2; 申请: P ( S ); 释放: V ( S );

Page 30: 第四章  互斥、同步与通讯

软件教研室软件教研室

自动机描述

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 ...

Page 31: 第四章  互斥、同步与通讯

软件教研室软件教研室

例 1. 生产者 /消费者问题

0 1 …… k-1

箱子,容量 k

B:Array[0..k-1]Of item

生产者 消费者

生产物品放入 B 中

B 中取物品消费之

Page 32: 第四章  互斥、同步与通讯

软件教研室软件教研室

环形缓冲区

1

0

K-1

in

(in+1)mod k

out (out+1)mod k

Page 33: 第四章  互斥、同步与通讯

软件教研室软件教研室

问题分析生产者活动: 消费者活动: 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 )

Page 34: 第四章  互斥、同步与通讯

软件教研室软件教研室

同步生产者活动: 消费者活动: Repeat Repeat 加工一件物品 P(S2) P(S1) 箱中取一物品 物品放入箱中 V(S1) V(S2) 消耗这件物品 Until false Until false

对 B 和 in,out 的互斥:Var mutex:semaphore; (mutex.value=1)

Page 35: 第四章  互斥、同步与通讯

软件教研室软件教研室

互斥生产者活动: 消费者活动: Repeat Repeat 加工一件物品 P(S2) P(S1) P(mutex) P(mutex) 箱中取一物品 物品放入箱中 V(mutex) V(mutex) V(S1) V(S2) 消耗这件物品 Until false Until false

Page 36: 第四章  互斥、同步与通讯

软件教研室软件教研室

并发性提高策略生产者和消费者:不操作 B 的相同分量

生产者的共享变量:

B[in] , in消费者的共享变量:

B[out] , out

in=out: 满或空 ,

Var mutex1,mutex2:semaphore; (init 1)

Page 37: 第四章  互斥、同步与通讯

软件教研室软件教研室

并发性提高策略生产者活动: 消费者活动: Repeat Repeat 加工一件物品 P(S2) P(S1) P(mutex2) P(mutex1) 箱中取一物品 物品放入箱中 V(mutex2) V(mutex1) V(S1) V(S2) 消耗这件物品 Until false Until false

Page 38: 第四章  互斥、同步与通讯

软件教研室软件教研室

例 2. 读者 /写者问题Problem Statement:

一组公共数据 DB

R1 …… Rm W1 …... Wn要求:( 1 ) R-R 可以同时 ( 2 ) R-W 不可同时 ( 3 ) W-W 不可同时

accessing

Page 39: 第四章  互斥、同步与通讯

软件教研室软件教研室

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 ;

Page 40: 第四章  互斥、同步与通讯

软件教研室软件教研室

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 操作的互斥问题。

Page 41: 第四章  互斥、同步与通讯

软件教研室软件教研室

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);

Page 42: 第四章  互斥、同步与通讯

软件教研室软件教研室

程序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;

Page 43: 第四章  互斥、同步与通讯

软件教研室软件教研室

程序( 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;

Page 44: 第四章  互斥、同步与通讯

软件教研室软件教研室

程序( Cont. )begin read_count:=0; r_w_w.value:=1; mutex.value:=1; cobegin r1: reader; ……; rm: reader; w1: writer; ,,,,,,; wn: writer coendend.

Page 45: 第四章  互斥、同步与通讯

软件教研室软件教研室

例 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);

Page 46: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.4 进程高级通讯

• 进程通讯:进程之间的相互作用。• 低级通讯(简单信号)

–进程互斥–进程同步

• 高级通讯(大量信息)

4.4.1 进程通讯概念

Page 47: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.4.2 进程通讯模式

P1

1. 共享内存模式 (shared memory) :

2. 消息传递模式 (message passing) :

P2

OS 提供:( 1 )公共内存( 2 )互斥同步机制

P1 P2Msend

receive

直接:进程 - 进程

间接:进程 - 信箱 - 进程

Page 48: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.4.3 直接方式• 对称形式 (sender and receiver name each other)

– send(R,message)– receive(S,message)

…Send(R,M)

...

…Receive(S,N)

...

S: R:

Page 49: 第四章  互斥、同步与通讯

软件教研室软件教研室

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:

Page 50: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.4.3.1 有缓冲途径

PCB

…send(R,M)

…size text

...

PCB

…receive(pid,N)

… ...

M:N:

msg

msg

msg

...

发送者 S: 接收者 R:

Page 51: 第四章  互斥、同步与通讯

软件教研室软件教研室

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);

Page 52: 第四章  互斥、同步与通讯

软件教研室软件教研室

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 :

Page 53: 第四章  互斥、同步与通讯

软件教研室软件教研室

发送 - 接收原语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);

Page 54: 第四章  互斥、同步与通讯

软件教研室软件教研室

4.4.4 间接方式

Mailbox

Send_mb(mb,m) Receive_mb(mb,n)

..

.

multi-sender -- multi-receiver;

multi-sender -- one receiver

Page 55: 第四章  互斥、同步与通讯

软件教研室软件教研室

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); 系统调用

Page 56: 第四章  互斥、同步与通讯

软件教研室软件教研室

信箱通讯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;

Page 57: 第四章  互斥、同步与通讯

软件教研室软件教研室

信箱通讯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;

Page 58: 第四章  互斥、同步与通讯

软件教研室软件教研室

属于操作系统空间的信箱

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: