当前位置:首页 >> 工学 >>

操作系统第二章进程同步与通信(第二部分)


第二章

进程管理

1

本章讨论的 主要问题
1、如何控制和协调并发进程异步执行 的时序? 的时序?

进程的同步机制
2、进程之间如何互相联系,传递信息? 进程之间如何互相联系,传递信息?

进程的通信
2

§2.4 进程同步的概念(一)
一、并发进程间的约束关系 并发执行的进程之间,通常有两种关系: 并发执行的进程之间,通常有两种关系: 进程之间彼此无关, ? 互斥关系 进程之间彼此无关,但是由于竞争使用同一 共享资源而产生了相互约束的关系。 共享资源而产生了相互约束的关系。这种因共享资源而 产生的制约关系称为进程的互斥 进程的互斥。 产生的制约关系称为进程的互斥。— 间接相互制约关系 多个并发执行的进程, ? 同步关系 多个并发执行的进程,在共同协作完成一项 任务的过程中,相互约束 约束, 任务的过程中,相互约束,如一个进程在没有获得合作 进程提供的必要信息之前,不能超越某个执行点。 进程提供的必要信息之前,不能超越某个执行点。进程 之间通过在执行时序上的某种限制而达到相互合作的这 进程的同步 种约束关系称为进程的 种约束关系称为进程的同步 — 直接相互制约关系

3

§2.4 进程同步的概念(二)
一、并发进程间的约束关系 ? 同步问题
A进程 B进程

键盘

缓冲区

计算

A进程只有当缓冲区为空时,才能将数据输入缓冲区, 进程只有当缓冲区为空时,才能将数据输入缓冲区, 进程只有当缓冲区有数据时,才能从缓冲区取数进行计算。 B进程只有当缓冲区有数据时,才能从缓冲区取数进行计算。 进程的同步与互斥虽然是两个既有区别又有联系的概念, 进程的同步与互斥虽然是两个既有区别又有联系的概念, 但从本质上看并发进程的异步执行都必须按一定的相互约束 的时序进行,因此统称为“进程同步” 的时序进行,因此统称为“进程同步”。 显然,必须解决好进程的同步问题, 显然,必须解决好进程的同步问题,才能保证并发进程 的正常执行。 的正常执行。
4

§2.4 进程同步的概念(三)
二、临界资源 (criticalsection) criticalsection) 1。什么是临界资源 凡是以互斥方式使用的共享资源都称为临界资源 临界资源。 凡是以互斥方式使用的共享资源都称为临界资源。临界 资源具有一次只允许一个进程使用的属性。 2。临界区 (critical section) ) 每个进程 互斥访问临界资源的那段代码称为临界区。代 互斥访问临界资源的那段代码称为临界区 临界资源的那段代码称为临界区。 码构成如下: repeat entry section 进入区 —申请进入临界区 申请进入临界区 critical section 临界区 —访问临界资源 访问临界资源 exit section 退出区 —退出对临界资源的访 退出对临界资源的访 问 剩留区 — 进程的其他代码 remainder section 5 until false

§2.4 进程同步的概念(四)
三、进程的同步机制 进程的同步机制就是要解决在进程异步运行时, 进程的同步机制就是要解决在进程异步运行时,在时 间上施加某些限制,使其共享资源的操作与时间无关。 间上施加某些限制,使其共享资源的操作与时间无关。 或称在执行时序上施加某种限制,达到彼此间的合作。 或称在执行时序上施加某种限制,达到彼此间的合作。 1、同步机制的准则 空闲让进 忙则等待 有限等待 让权等待 无进程处于临界区内时,可让一个申请进入 无进程处于临界区内时, 该临界区的进程进入。 该临界区的进程进入。 临界区内有进程时, 临界区内有进程时,申请进入临界区的进程 必须等待。 必须等待。 进程进入临界区的请求, 进程进入临界区的请求,必须在有限的时间 内满足。 内满足。 等待进入临界区的进程,必须立即释放CPU CPU。 等待进入临界区的进程,必须立即释放CPU。
6

§2.4进程同步的概念(五) 2.4进程同步的概念
2.硬件同步机制 2.硬件同步机制 进程的同步机制可以用软件实现,也可以用硬件实现。 进程的同步机制可以用软件实现,也可以用硬件实现。 实现的基本思想是: 临界资源“加锁” 实现的基本思想是:对临界资源“加锁” est—and and—S (1)用Test and Set 指令实现互斥 TS指令执行过程不可分割。 TS指令执行过程不可分割。 指令执行过程不可分割 LOCK: 为临界资源设置一个布尔量 LOCK: LOCK = { false true 没有进程在临界区 有进程进入临界区

TS指令的形式: TS指令的形式: 指令的形式 ts( lock:boolean):boolean; ):boolean function ts(var lock:boolean):boolean; begin ts:=lock; ts:=lock; lock:=true; lock:=true; end; end;

7

§2.4 进程同步的概念(六)
以两进程P1、P2并发执行为例,如果P1先执行: 以两进程P1、P2并发执行为例,如果P1先执行: P1 并发执行为例 P1先执行
p1 p2

调用TS指令 调用 指令 Y
TS=true TS=true

调用TS指令 调用 指令 Y
TS=true TS=true

N 进入P1临界区 进入 临界区 Lock:=false Lock:=false : 进入剩余区

N 进入P2临界区 进入 临界区 Lock:=false : 进入剩余区

若P1先进入临界区,则P2循环执行TS指令,直到P1退出临界区。 P1先进入临界区, P2循环执行TS指令,直到P1退出临界区。 先进入临界区 循环执行TS指令 P1退出临界区
8

§2.4 进程同步的概念(七)
如果P2先执行: P2先进入临界区, P1循环执行TS指令, 如果P2先执行:若P2先进入临界区,则P1循环执行TS指令,直 P2先执行 先进入临界区 循环执行TS指令 P2退出临界区 退出临界区。 到P2退出临界区。
p1 p2

调用TS指令 调用 指令 Y
TS=true TS=true

调用TS指令 调用 指令 Y
TS=true TS=true

N 进入P1临界区 进入P2临界区 进入 临界区 Lock:=false : 进入剩余区

N 进入P2临界区 进入P1临界区 进入 临界区 Lock:=false Lock:=false : 进入剩余区

结论: 结论: TS指令有效实现互斥 空闲让进、忙则等待) 指令有效实现互斥( ① TS指令有效实现互斥(空闲让进、忙则等待) 循环测试,处于“忙等待” 未让权等待) ② 循环测试,处于“忙等待”(未让权等待)

9

§2.5 信号量机制及P、V操作(一) 信号量机制及P 一。什么是信号量 并发进程间的相互制约关系从本质上说是由于争夺和共 信号量( 享资源而产生的。将资源抽象为信号量 Semaphore), 享资源而产生的。将资源抽象为信号量(Semaphore), 引 入在信号量基础上的同步操作原语: 操作、 操作。 入在信号量基础上的同步操作原语: P操作、V操作。是一种 TS指令更加完善的同步机制 比TS指令更加完善的同步机制。 定义: 定义: type semaphore=record value:integer; value:integer; 信号量值 l:list of process 信号量等待队列指针 end; end; 其中: 其中: 表示某种资源的数量。 信 号 量 值 —表示某种资源的数量。 表示某种资源的数量 等待队列指针—当信号量值为负时 表示该类资源已分配完, 当信号量值为负时, 等待队列指针 当信号量值为负时,表示该类资源已分配完, 等待该类资源的进程排在等待队列中。 等待该类资源的进程排在等待队列中。L为指向该信号量等待 队列的指针。 队列的指针。 10

信号量机制及P §2.5 信号量机制及P、V操作 (二) 二。P、V操作原语 定义: Semaphore; 定义:VAR S:Semaphore; 1。P操作(wait 原语) 操作( 原语) 每作一次P操作,申请分配一个单位的资源。 每作一次P操作,申请分配一个单位的资源。 对信号量S 进行P操作。 P(S)— 对信号量S 进行P操作。 ① S.value := S.Value - 1; ; 进程继续执行。 ② 若 S.Value ≥ 0 进程继续执行。 进程阻塞,并进入等待队( 若 S.Value < 0 进程阻塞,并进入等待队(L)。 操作(Signal原语 原语) 2。V操作(Signal原语) 对信号量S 进行V操作,释放一个单位的资源。 V(S)— 对信号量S 进行V操作,释放一个单位的资源。 1; ① S.value := S.Value + 1; 进程继续执行。 ② 若 S.Value > 0 进程继续执行。 则释放S 若 S.Value ≤ 0 则释放S等待队列中的一个进程 , 11 使之转为就绪状态。 使之转为就绪状态。

信号量机制及P §2.5 信号量机制及P、V操作 (三) P、V操作的算法描述 P 操作 P( Procedure P(s); s:semaphore; Var s:semaphore; begin s.value: s.values.value:= s.value-1 block(s.L) if s.value < 0 then block(s.L) end; end; V操作 V( Procedure V(s); s:semaphore; Var s:semaphore; begin s.value: s.value:= s.value+1 wakeup(s.L) if s.value ≤ 0 then wakeup(s.L) end; end;

12

信号量机制及P §2.5 信号量机制及P、V操作

( 四)

说明: 说明: 其值表示某类资源可用数量。 ① S.Value > 0 时,其值表示某类资源可用数量。 S.Value ≤ 0 时,其绝对值表示在信号量队列中等待 该资源的进程数。 该资源的进程数。 操作有严格的不可分割性;执行过程不允许中断; ② P、V操作有严格的不可分割性;执行过程不允许中断; ③ P、V操作成对出现。 操作成对出现。 ?问题? 问题? 如何使用P、V操作实现同步机制? 如何使用P 操作实现同步机制? (根据同步机制的原则,分析P、V操作的特点,) 根据同步机制的原则,分析P 操作的特点,) 考虑: 如何控制互斥地使用临界资源? 考虑:? 如何控制互斥地使用临界资源? ? 如何控制进程并发执行的时序? 如何控制进程并发执行的时序? 实现同步机制基本思想是: 实现同步机制基本思想是:加锁、解锁 基本思想是
13

信号量机制及P §2.5 信号量机制及P、V操作 (五) 三。信号量的应用 1。实现进程互斥 — 以两个进程并发执行为例 初值: 设 mutex —公共互斥信号量 公共互斥信号量 初值:mutex.Value = 1 利用P 利用P、V操作实现互斥的模型 进程P1 进程P2 进程P1 进程P2 . . . . . . P(mutex); 值0 ① mutex); 进入P1临界区; P1临界区 进入P1临界区; V(mutex); 值0 ③ mutex); . . . P(mutex); 值-1② mutex); 进入P2临界区; P2临界区 进入P2临界区; V(mutex); ( ); . . .

进程P1先执行 mutex);进程P1进入临界区; );进程P1进入临界区 进程P1先执行 P(mutex);进程P1进入临界区; P1 进程P2 P2开始执行 mutex);进程P2阻塞,插入阻塞队列。 );进程P2阻塞 进程P2开始执行 P(mutex);进程P2阻塞,插入阻塞队列。 若进程P1 P1再次执行 mutex); );mutex.Value=0 释放资源。 若进程P1再次执行 V(mutex);mutex.Value=0 释放资源。
14

信号量机制及P §2.5 信号量机制及P、V操作 (六) 三、信号量的应用 1、实现进程互斥 设 mutex —公共互斥信号量 初值: mutex.Value = 1 公共互斥信号量 初值: 利用P 利用P、V操作实现互斥的模型
进程P1 进程P1 进程P2 进程P2

. . . mutex); P(mutex); 值0 ① 进入P1临界区; P1临界区 进入P1临界区; V(mutex); 值0 ③ ( ); . . . 设先执行进程P1 先执行进程P1 进程

. . . mutex); P(mutex); 值-1 ② 进入P2临界区; P2临界区 进入P2临界区; V(mutex); ( ); . . .
15

信号量机制及P §2.5 信号量机制及P、V操作 (七) 三、信号量的应用 1、实现进程互斥 设 mutex —公共互斥信号量 公共互斥信号量 初值: 初值: mutex.Value = 1

利用P 利用P、V操作实现互斥的模型
进程P1 进程P1 进程P2 进程P2

. . . mutex); P(mutex); 值-1② 进入P1临界区; P1临界区 进入P1临界区; V(mutex); ( ); . . . 设先执行进程P2 先执行进程P2 进程

. . . mutex); P(mutex); 值0 ① 进入P2临界区; 进入P2临界区; P2临界区 V(mutex);值0 ③ ( ); . . .
16

P、V操作实现进程同步机制 1。实现进程互斥 定义公共的互斥信号量: 初值: 定义公共的互斥信号量:mutex 初值: mutex.Value = 1 执行过程中mutex.Value 的值, 之间变化。 执行过程中mutex.Value 的值,在 1,0,-1 之间变化。 Process 2:begin Var mutex : semaphore:=1; repeat begin P (mutex); parbegin critical section; process 1: begin V (mutex); repeat remainder section; P (mutex); until false critical section; end V (mutex); parend remainder section; End. until false end 为了实现进程互斥地进入临界区,只须把临界区CS置于 为了实现进程互斥地进入临界区,只须把临界区 置于 17 P (mutex)和V (mutex)之间。 之间。 和 之间

§2.5 信号量机制及P、V操作 (八) 信号量机制及P 2、实现进程同步 实例: 打印进程与计算进程的同步问题。 实例: 打印进程与计算进程的同步问题。
计算进程 计算 打印进程

SB

缓冲区

SA

打印机

分析:打印进程与计算进程之间有两个约束: 分析:打印进程与计算进程之间有两个约束: 计算进程只有当缓冲区为空时,才能放入计算结果。 1)计算进程只有当缓冲区为空时,才能放入计算结果。 打印进程只有当缓冲区有结果时, 2)打印进程只有当缓冲区有结果时,才能从缓冲区取 计算结果打印。 计算结果打印。 用于控制这两个约束: 定义两个信号量:SA、 定义两个信号量:SA、SB ,用于控制这两个约束: 控制打印进程从缓冲区取计算结果打印。 SA — 控制打印进程从缓冲区取计算结果打印。 控制计算进程向缓冲区送计算结果。 SB — 控制计算进程向缓冲区送计算结果。 SA、 表示缓冲区为空。 设:SA、 SB 初值为 0 — 表示缓冲区为空。 表示可以打印 当 SA ≥ 0 18 表示可以放入计算结果 放入计算结果。 当 SB = 0 表示可以放入计算结果。

§2.5 信号量机制及P、V操作 (九) 信号量机制及P 2。实现进程同步 实例: 实例: 打印进程与计算进程的同步问题
计算进程 计算 打印进程

SB

缓冲区

SA

打印机

设:SA — 打印进程的私有信号量,初值为0, 打印进程的私有信号量,初值为0 时表示可以打印。 当SA ≥ 0 时表示可以打印。 计算进程的私有信号量,初值为0 SB — 计算进程的私有信号量,初值为0, 表示可以放入计算结果 放入计算结果。 当SB = 0 时表示可以放入计算结果。 思考题 操作实现计算进程与打印进程同步的模型。 请给出用 P、V操作实现计算进程与打印进程同步的模型。
19

§2.5 信号量机制及P、V操作 (十) 信号量机制及P 计算进程与打印进程同步的模型
计算进程CP 计算进程CP
? ? ?

打印进程IOP 打印进程IOP ? ? ?

计算结果放入缓冲区; 计算结果放入缓冲区; SA); T2: V(SA); L1: P(SB); SB);
? ? ?

T1: L2:

P(SA); ( ); 从缓冲区取结果; 从缓冲区取结果; V(SB); ( );
? ? ?

初值为0 SA ,SB 初值为0 显然,进程CP与进程IOP相互制约: CP与进程IOP相互制约 显然,进程CP与进程IOP相互制约: 只有CP CP执行到 T2,IOP才能执行T1。( 才能执行T1。(T2 ① 只有CP执行到 T2,IOP才能执行T1。(T2 只有IOP执行到L2 CP才能执行L1。 IOP执行到L2, 才能执行L1 ② 只有IOP执行到L2,CP才能执行L1。 (L2

T1) T1) L1) L1)
20

P、V操作实现进程同步机制 2。实现进程同步 以打印进程与计算进程的同步问题为例,count—总计算量 总计算量, 以打印进程与计算进程的同步问题为例,count 总计算量, 设初值为n Sa、 同步信号量, 设初值为n,Sa、Sb —同步信号量,初值为0。 同步信号量 初值为0 Var sa,sb:semaphore:=0,0; IOP : begin begin repeat parbegin T1: P (sa); CP: begin take from buffer; repeat V (sb); computer next number ; L2: print last number; add to buffer; if count = 0 then count := count-1; destroy (IPO IPO); IPO T2: V (sa) ; until false L1: P (sb) ; end if count=0 then Parend destroy(cp); cp); end until false end
T2 T1 L2 L1
21

信号量机制及P §2.4 信号量机制及P、V操作

讨论题

从输入设备上不断读数据, 有三个进程 ,进程 get 从输入设备上不断读数据,并 存入buffer1 buffer1; 不断将buffer1 buffer1的内容复制到缓冲 存入buffer1;进程 copy 不断将buffer1的内容复制到缓冲 buffer2,进程put 则不断将buffer2 buffer2的内容在打印机上输 区buffer2,进程put 则不断将buffer2的内容在打印机上输 三个进程并发执行,协调工作。 出。三个进程并发执行,协调工作。 写出该三个进程并发执行的同步模型。 写出该三个进程并发执行的同步模型。
get S1 S2 copy S4 put S3

buffer1

buffer2

提示: 个信号量: , , , 提示:设4个信号量:S1,S2,S3,S4 个信号量 其中: 、 分别表示 是否为空; 其中: S1、S4 分别表示 buffer1 和 buffer2 是否为空; S2 、S3分别表示 buffer1 和 buffer2 是否装满数据。 是否装满数据。 分别表示
22

三个进程同步模型
get 初值: 初值: S1=1; ; S2=0; ; S1 S2 copy S4 put S3 初值: 初值: S3=0; ; S4=1;

buffer1
进程copy
。 。 。

buffer2
进程put

进程get
。 。 。

P(S1); ( 从输入设备读数据 存入buffer1; ; 存入 V(S2); (
。 。 。

P(S2); ( p(S4); ( 将 buffer1的内容 的内容 复制到 buffer2; ; V(S1); ( V(S3); (
。 。 。

。 。 。 P(S3); ( 将 buffer2的 buffer2的 内容打印输出; 内容打印输出;
V(S4); ( 。 。 。
23

§2.5 经典的进程同步问题 生产者—消费者问题 消费者问题( 一。 生产者 消费者问题(producer—consumer problems) )

问 题?
P1,P2, Pk) 一组生产者进程 P i(P1,P2,… Pk) Cm) 一组消费者进程 C i(C1,C2,… Cm) C1,C2, 互斥使用由n个缓冲区组成的缓冲池。 互斥使用由n个缓冲区组成的缓冲池。
Ci

out
Pi

in
24

生产者—消费者问题 一 、生产者 消费者问题 分析 1、同步关系: 、同步关系: 当缓冲池放满产品时生产者必须等待。 当缓冲池放满产品时生产者必须等待。 定义生产者进程同步信号量: 表示空闲缓冲区数。 定义生产者进程同步信号量: empty — 表示空闲缓冲区数。 n; 0 ≤ empty ≤ n empty 初值为 当缓冲池空时,消费者进程必须等待。 当缓冲池空时,消费者进程必须等待。 定义消费者进程同步信号量 : full — 表示有产品的缓冲区 数。 0 ; 0 ≤ full ≤ n full 初值为 out 互斥关系:两组进程中的每个进程 2、互斥关系:两组进程中的每个进程 Ci 必须互斥的使用缓冲区。 必须互斥的使用缓冲区。 Pi 定义公共互斥信号量: mutex初值为 定义公共互斥信号量: mutex初值为 1 3、定义: in ,out 定义: 分别表示首空 缓冲区序号及首满缓冲区序号。 缓冲区序号及首满缓冲区序号。 in
25

§2.6 经典的进程同步问题
消费者问题( 一、生产者—消费者问题(producer consumer 生产者 消费者问题 producer—consumer out
Ci Pi

problems) problems)

in

empty — 表示空闲缓冲区数。 初值为 n 表示空闲缓冲区数。 empty = 0 缓冲区全满,生产者进程不能工作。 缓冲区全满,生产者进程不能工作。 full — 表示有产品的缓冲区数。 初值为 0 表示有产品的缓冲区数。 full = 0 缓冲区全空,消费者进程不能工作。 缓冲区全空,消费者进程不能工作。
26

§2.6 经典的进程同步问题
消费者问题( 一、生产者—消费者问题(producer consumer 生产者 消费者问题 producer—consumer out
Ci

problems) problems)

Pi

in empty — 表示空闲缓冲区数。 初值为 n 表示空闲缓冲区数。 empty = 0 缓冲区全满,生产者进程不能工作。 缓冲区全满,生产者进程不能工作。 full — 表示有产品的缓冲区数。 初值为 0 表示有产品的缓冲区数。 full = 0 缓冲区全空,消费者进程不能工作。 缓冲区全空,消费者进程不能工作。
27

§2.6 经典的进程同步问题
消费者问题( 一、生产者—消费者问题(producer consumer 生产者 消费者问题 producer—consumer
Ci

problems) problems)

out

in

Pi

empty — 表示空闲缓冲区数。 初值为 n 表示空闲缓冲区数。 empty = 0 缓冲区全满,生产者进程不能工作。 缓冲区全满,生产者进程不能工作。 full — 表示有产品的缓冲区数。 初值为 0 表示有产品的缓冲区数。 full = 0 缓冲区全空,消费者进程不能工作。 缓冲区全空,消费者进程不能工作。
28

生产者—消费者问题算法: 生产者 消费者问题算法: 消费者问题算法
Var mutex,empty,full:semaphore :=1, n , 0; , , : ; buffer:array [0 . .n-1] of message; : in, out : 0..n-1:= 0,…0
生产者进程: 生产者进程: 生产一个产品 m ; 检查缓冲区中是否有产品8 . 检查缓冲区中是否有产品8 消费者进程: 消费者进程: P ( full); );

检查缓冲区中有无进程8 P ( mutex ); 检查缓冲区中有无进程 P(empty);检查有否空缓冲区 ( ); w检查有否空缓冲区 从缓冲区取产品m; 从缓冲区取产品 ; P(mutex);检查缓冲区中有无进程 ( ); w检查缓冲区中有无进程 out :=(out+1) mod n ; ( ) 放入缓冲区; 将产品 m放入缓冲区; 放入缓冲区 in :=(in +1) mod n ; ( ) 释放缓冲区8 释放缓冲区 V (mutex);w释放缓冲区 ); 通知生产者进程使用8 通知生产者进程使用8 V( full); w通知消费者进程使用
29

. .

V (mutex); ); V (empty); );

生产者—消费者问题算法: 生产者 消费者问题算法: 消费者问题算法
生产者进程: 生产者进程: 生产一个产品 m ; . . . P(empty); ( ); P(mutex); ( ); 将产品 m放入缓冲区; 放入缓冲区; 放入缓冲区 in :=(in +1) mod n ; ( ) V (mutex); ); V( full); ( ); 消费者进程: 消费者进程: P ( full); ); P ( mutex ); 从缓冲区取产品m; 从缓冲区取产品 ; out :=(out+1) mod n ; ( ) V (mutex); ); V (empty); );

问 题

操作?能否交换两个V 操作?为什么? 1。能否交换两个 P操作?能否交换两个V 操作?为什么? 如果缺少操作: ( 2。如果缺少操作:P(empty)或 P ( full), 结果如何? ) ) 结果如何?
30

进程通信( §2.8 进程通信(一)
进程通信(communication)是指进程间交换信息。 进程通信(communication)是指进程间交换信息。 显然,进程同步也是一种简单的通信方式, 显然,进程同步也是一种简单的通信方式,但交换的信 息量少,通信效率低,称为低级通信方式。 息量少,通信效率低,称为低级通信方式。 本节讨论的是高效传递大量信息的高级通信方式。 本节讨论的是高效传递大量信息的高级通信方式。

讨论以下问题 进程通信的类型 直接与间接通信

消息缓冲队列通信机制
31

一、进程通信的类型 1. 共享存储区系统(Shared- Memory System) 共享存储区系统( ) 进程间通过共享某些数据结构或者存储区,进行通信。 进程间通过共享某些数据结构或者存储区,进行通信。 2. 消息传送系统(Message Passing System) 消息传送系统( ) 它的实现需要操作系统提供多方面的支持。一般分为: 它的实现需要操作系统提供多方面的支持。一般分为: 直接通信 发送进程直接将消息发送给接受进程的消 息缓冲区。 息缓冲区。 发送进程将消息发送到电子邮箱, 间接通信 发送进程将消息发送到电子邮箱,接受进 程再从中取出消息。 程再从中取出消息。 3. 管道通信 所谓管道是一个连接读、写进程的共享文件, 所谓管道是一个连接读、写进程的共享文件,如UNIX 系统中的Pipe文件。以字符流的形式传送。 文件。 系统中的 文件 以字符流的形式传送。
写端 读端

Pipe文件 文件

32

二、直接通信方式
该通信方式要求发送进程和接收进程以显式方式提供目标进程 的标识符。通信进程要使用两条原语: 的标识符。通信进程要使用两条原语: Send(receiver,message); ( , ); Receive(sender,message); ( , ); 以消息缓冲队列通信机制为例: 以消息缓冲队列通信机制为例: 1. 数据结构 消息缓冲区 type message buffer = record sender :发送进程标识 size : 消息长度 text : 消息正文 next : 指向下一消息的指针 end; ; PCB块中通信数据 PCB块中通信数据 type eprocess control bloke = record mg 消息队列首指针 :消息队列首指针 mutex :消息队列互斥信号 sm :消息队列资源信号量
.

. ; end;
33

§2.8 进程通信(三) 2. 消息缓冲通信模型
进程A 进程A 进程 进程 PCB(B) 进程B 进程

send(B,a)

mq mutex sm
第一消息缓冲区

receive(b)

发 送 区

a

sender:A size:5 text:Hello

sender:A size:5 text:Hello next :0

sender:A size:5 text:Hello
34

接 收 区

b

§2.8 进程通信(四) 3. 发送原语 Procedure send (receiver,a); , ); begin 根据a.Size申请缓冲区 根据 申请缓冲区 getbuf(a.size,i); ( , ); i.sender:=a.sender; : ; 将发送区a中的信息复 将发送区 中的信息复 i.size:=a.size; : ; 制到消息缓冲区i中 制到消息缓冲区 中。 i.text:=a.text; : ; i. next:=0; : ; 获得接收进程的 getID(PCB set,receiver,j); ( , , ); 内部标识 j P(j.mutex); ( ); 将消息缓冲区插入消息队列 insert(j.mq,i); ( , ); V(j.mutex); ( ); V(j.sm); ( end; ;
35

§2.8 进程通信(五) 4. 接收原语 Procedure receiver (b); ); begin J为接收进程的内部标识 为接收进程的内部标识 j:=internal name; : ; P(j.sm) ( ) P(j.mutex); ( ); 将消息队列中的队首消息移出 remove(j.mq.i); ( ); V(j.mutex); ( ); b.sender:=i.sender; : ; 将消息缓冲区i中中的 将消息缓冲区 中中的 b.size:=i.size ; : 信息复制到接收区b。 信息复制到接收区 。 b.text:=i.text ; : end; ;
36

§2.8 进程通信(六) 三、间接通信方式 间接通信方式常常以“信箱”作为中间实体, 间接通信方式常常以“信箱”作为中间实体,进行实时 或非实时通信。系统提供了创建、撤消信箱的原语, 或非实时通信。系统提供了创建、撤消信箱的原语,进程的 通信使用相应的发送和接收原语实现; 通信使用相应的发送和接收原语实现; send(mailbox,message); ( , ); receive(mailbox,message); ( , );
发送 进程

deposit

邮箱头 ...邮箱体 ...邮箱体

remove(m) )

接收 进程

其中: 其中: 邮箱头描述邮箱名、大小及拥有该邮箱的进程名等。 邮箱头描述邮箱名、大小及拥有该邮箱的进程名等。 邮箱体主要用于存放消息。 邮箱体主要用于存放消息。
37


赞助商链接
相关文章:
第三章进程同步与通信作业习题与答案
第三章进程同步与通信作业习题与答案 - 第三章 一.选择题(50 题) 1.以下_B__操作系统中的技术是用来解决进程同步的。 A.管道 B.管程 C.通道 D.DMA 2...
操作系统 第二章作业本(含答案)
操作系统平时作业和答案! 第二章作业第一次作业: 1. 进程有哪三种基本状态?...7. (选做)简述 linux 的管道通信机制、共享存储器通信机制、消息缓冲通 信...
第三章进程同步与通信作业习题与答案
第三章进程同步与通信作业习题与答案 - 第三章 一.选择题(50 题) 1.以下_B__操作系统中的技术是用来解决进程同步的。 A.管道 B.管程 C.通道 D.DMA 2...
李建伟版实用操作系统第二版最新习题 3 进程同步与通信
李建伟版实用操作系统第二版最新习题 3 进程同步与通信_电脑基础知识_IT/计算机_专业资料。最新版,李建伟,实用操作系统教程,第二版,课后习题参考答案,清华大学出版...
操作系统之进程(生产者---消费者)实验报告
信号量及 PV 操作的定义与物理意义; 2、了解进程通信的方法; 3、掌握进程互斥与进程同步的相关知识; 4、掌握用信号量机制解决进程之间的同步与互斥问题; 5、...
第二章 练习题
第二章 练习题 - 操作系统第二章 练习题 一、选择题 1.临界区是指( )。 A.并发进程中用于实现进程互斥的程序段 B.并发进程中用于实现进程同步的程序段 C....
操作系统部分课后习题答案
操作系统部分课后习题答案_理学_高等教育_教育专区。第一章 1.设计现代 OS 的...(2)进程同步:为多个进程(含线程)的运行进行协调(3)进程通信:用 来实现在...
操作系统-进程同步习题答案(22)
操作系统-进程同步习题答案(22)_理学_高等教育_教育专区。第二章 进程同步 一...操作系统4进程同步与通信... 8页 2下载券 计算机操作系统进程同步... 27...
操作系统 第二章部分答案
操作系统 第二章部分答案_计算机软件及应用_IT/计算机_专业资料。操作系统 ...使用信号量机制对这三个进程同步算法描述如下: Semaphore empty,SW1,SW2; /...
第二章 操作系统进程(练习题答案)
第二章 操作系统进程(练习题答案)_计算机软件及应用...输入输出设备 17.下面关于进程同步的说法中,错误的...某一固定时间间隔内 41.在进程通信中,常C 通过...
更多相关标签: