926411-计算机操作系统教程-04第四章 互斥同步与通讯(2)

合集下载

04 进程的同步与通信

04 进程的同步与通信


}
}
1.P0和P1不能同时进入临界区,满足忙则等待。
2.P0必须先进入临界区,退出后P1才能进入,不满足空闲让进条件。
21
3.若P0在运行到turn=1;前任一位置失败,P1永久阻塞,不满足有限等待条件。
算法2


void P(int i) {
while(true) {

flag[i]=false, i=0,1
25
算法4


void P(int i) {
while(true) {

flag[i]=ture; turn=j; while(flag[j] && turn=j) { do nothing; } critical section; flag[i]=false; non- critical section;
操作系统原理
第四章 进程的同步与通信
1
本章教学目标

了解各种调度算法; 熟悉临界资源、信号量及PV操作的定义与 意义、进程通信的类型与方法; 掌握进程互斥与进程同步的关系及区别, 用信号量机制解决各种互斥同步问题的方 法。

2
学习重点、难点

临界资源、进程互斥与进程同步的概念;
用信号量机制解决各种互斥同步问题的方 法

由于两个进程都是在得到对方的消息后才去使用共 享的缓冲器,所以不会出现记录的丢失和记录的重 复处理现象。
16
4.1.3 进程同步与进程互斥间的关系

进程的同步与进程的互斥都涉及到并发进程共 享资源的问题,进程的互斥实际上是进程同步 的一种特殊情况。
若干个进程互斥使用资源时,一个等待使用资 源的进程在得到占用资源的进程发出“归还资 源”的消息后,它就可去使用该资源。因此, 互斥使用资源的进程之间实际上也存在一个进 程依赖另一个进程发出消息的制约关系。所以, 有时也把进程的互斥与进程的同步统称为进程 的同步。

操作系统中的进程同步与互斥

操作系统中的进程同步与互斥

操作系统中的进程同步与互斥进程同步和互斥是操作系统中重要的概念和技术。

在多道程序环境中,多个进程同时运行,但它们之间存在着共享资源、互相依赖等情况,因此需要进行同步和互斥处理。

本文将从互斥与同步的定义、需求、常用的同步与互斥机制等方面进行论述。

一、互斥与同步的定义互斥是指某个资源同时只允许一个进程访问,其他进程需要等待。

同步是指一组相关进程在执行过程中需要相互合作,按照一定顺序执行。

二、互斥与同步的需求1. 互斥:当多个进程同时访问一个共享资源时,若不进行互斥处理,可能会引发数据不一致、竞争条件等问题。

例如,多个进程同时对一个文件进行写操作,可能导致文件内容错乱。

因此,需要通过互斥来保证每个进程访问共享资源的独占性,避免冲突。

2. 同步:在某些情况下,多个进程需要按照一定顺序执行,以满足某种逻辑关系或条件。

例如,生产者-消费者问题中,生产者需要在缓冲区未满时才能生产,消费者需要在缓冲区非空时才能消费。

因此,需要通过同步来协调进程的执行顺序。

三、常用的同步与互斥机制1. 互斥机制:常用的互斥机制包括信号量、互斥锁和临界区等。

a) 信号量:是一种用于控制对共享资源的访问的机制。

通过定义一个信号量,以保证同一时间只有一个进程可以访问共享资源。

典型的信号量包括二进制信号量和计数信号量。

b) 互斥锁:是一种用于协调多个进程访问共享资源的机制。

通过对共享资源加锁,只有持有锁的进程才能访问该资源,其他进程需要等待。

常见的互斥锁有互斥量(Mutex)和读写锁(ReadWrite Lock)等。

c) 临界区:是指一段在并发执行环境中,对某种共享资源进行操作的代码段。

在进入临界区之前,进程需要获取临界区的访问权限,执行完临界区代码后,释放访问权限。

通过临界区机制,可以保证同一时间只有一个进程在执行临界区的代码。

2. 同步机制:常用的同步机制包括信号量、条件变量和屏障等。

a) 信号量:除了用于互斥机制,信号量也可以用于同步机制。

操作系统教程第5版第4章【同步通信死锁】

操作系统教程第5版第4章【同步通信死锁】
进程执行的并发性:一组进程的执行在时间上是重叠的。 并发性举例:有两个进程A(a1、a2、a3)和B(b1、b2、b3)
并发执行。
a1、a2、a3、b1、b2、b3 顺序执行
a1、b1、a2、b2、a3、b3 并发执行
从宏观上看,并发性反映一个时间段中几个进程都在同一 处理器上,处于运行还未运行结束状态。
进程同步:为完成共同任务的并发进程基于某个 条件来协调它们的活动,因为需要在某些位置上 排定执行的先后次序而等待、传递信号或消息所 产生的协作制约关系。
进程互斥关系是一种特殊的进程同步关系,即 逐次使用互斥共享资源,是对进程使用资源次 序上的一种协调。
18
4.2 临界区管理
4.2.1 互斥与临界区 4.2.2 实现临界区管理的几种尝试 4.2.3 实现临界区管理的软件方法 4.2.4 实现临界区管理的硬件设施
P: …… while(not turn); 临界区 turn=false; ……
Q: …… while(turn); 临界区 turn=ture; ……
若P想进临界区,由于turn=false;进不了; 同时Q进程始终不准备进临界区,即使临界区一直没有进程, 但P一直无法进入临界区 该方法,违反了使用临界区的原则
14
3、与时间有关的错误(例子4 )
(永远等待)主存管理问题
申请和归还主存资源问题
int X=memory;//memory为初始主存容量
void borrow(int B) {
void return(int B) {
while(B>X) 1
X=X+B;
{进程进入等待主存资源队列}; {修改主存分配表};
临界区
free=false;

第四章互斥同步与通讯

第四章互斥同步与通讯
exit section remainder section Until false
进程互斥的软件实现算法: Lamport面包店算法 Eisenberg算法
两种算法均假定系统中进程的个数有限,如n个
mport面包店算法
面包店算法的基本思想来源于顾客在面包店 购买面包时的排队原理。顾客进入面包店前,首先 抓一个号码,然后按号码由小到大的次序依次进 入面包店购买面包。这里假定:
为便于面包店算法的描述,引入下述表记法:
<1> 设(a,b): Pi,(c,d): Pj,则 (a,b)<(c,d) iff (a<c)or(a=c and b<d)
<2> max(a0,…,an-1)=k: 对所有的i, 0in-1, k≥ai, k为正整数。
算法4.1 Lamport面包店算法
进程互斥的实现就是实现对临界区的管理。
对临界区的管理应满足如下管理原则: (进程互斥的Requirements)
(1)正确性原则(correctness):mutual exclusion 一次只允许一个进程活动在关于同一组公共 变量的临界区中。 即任意时刻最多只能有一个进程处于关于同 一组共享变量的临界区中;
进程互斥有两层含义: (1)不容许多个进程同时进入关于同一组共享 变量的相同的临界区; (2)不容许多个进程同时进入关于同一组共享 变量的不同的临界区。
注意:进程互斥是相对于共享变量而言的。
当然,若容许多个进程同时进入关于同一组 共享变量的临界区,也不是一定会发生错误。 是否会发生错误与进程并发执行时的推进速度 有关。
CYCLE 等待借书者;
IF x>=1 Then Begin
1
IF x>=1 Then Begin

操作系统原理进程管理进程同步互斥与通信、死锁

操作系统原理进程管理进程同步互斥与通信、死锁
同步
多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系。
互斥
多个进程在同一时刻只有一个进程能进入临界区。
信号量与PV操作
信号量
一个整型变量,可以对其执行P操作和V操作,常用于 实现进程同步与互斥。
PV操作
对信号量的操作,P操作表示申请资源,V操作表示释 放资源。
实现原理
通过信号量的增减来控制进程的执行顺序,实现同步 与互斥。
经典同步问题解析
生产者消费者问题
生产者生产产品放入缓冲区,消 费者从缓冲区取出产品消费,需 要保证生产者和消费者的同步与 互斥。
哲学家进餐问题
五个哲学家围坐在一张圆桌旁, 做思考和进餐两件事情,需要保 证每个哲学家在拿起左右两只筷 子时不会发生死锁。
读者写者问题
允许多个读者同时读文件,但只 允许一个写者写文件,需要保证 读者和写者之间的同步与互斥。
03
进程通信
进程通信方式
01
共享内存
允许多个进程访问同一块内存空 间,进程间通过读写共享内存中 的数据进行通信。
消息传递
02
03
管道通信
进程间通过发送和接收消息进行 通信,消息可以包含数据、控制 信息等。
管道是一种半双工的通信方式, 数据只能单向流动,通常用于父 子进程间的通信。
消息传递机制
直接通信方式
信。
共享内存
共享内存允许多个进程访问同一块内存空间,进程间通过读写共享内存中的数据进行通 信。使用共享内存进行通信时,需要注意同步和互斥问题,以避免数据不一致和竞争条
件等问题。
04
死锁问题
死锁概念及产生原因
死锁概念
死锁是指两个或两个以上的进程在执行 过程中,由于竞争资源或者由于彼此通 信而造成的一种阻塞的现象,若无外力 作用,它们都将无法向前推进。

计算机操作系统 第四章

计算机操作系统 第四章

操 作 系 统
操 作 系 统 操 作 系 统 操 作 系 统 操 作 系 统
二十一世纪计算机本科教育
• 第四次尝试
这是一个“礼让为先”的算法,每个进程设置好自 己的flag标志,表明希望进入临界区。但也准备重置flag, 以表示谦让。算法如下: Process P (1) Process P (2) Begin begin …… …… Flag[1] = true; Flag[2] = true; While (Flag[2]) do While (Flag[1]) do {flag[1]=false; {flag[2]=false; flag[1]=true}; flag[2]=true}; Critical section; Critical section; Flag[1] = false; Flag[2] = false; …… …… end. end.
操 作 系 统
4
操 作 系 统 操 作 系 统 操 作 系 统 操 作 系 统
5
二十一世纪计算机本科教育
算法如下: Process P (1) Begin …… While (Flag[2]) do skip; Flag[1] = true; Critical section; Flag[1] = false; …… end.
•第三次尝试 第三次尝试
在第二次尝试的基础上,将其中的两个语句顺序交换,形 成了新的算法如下: Process P (1) Process P (2) Begin begin …… …… Flag[1] = true; Flag[2] = true; While (Flag[2]) do skip; While (Flag[1]) do skip; Critical section; Critical section; Flag[1] = false; Flag[2] = false; …… …… end. end.

操作系统进程互斥及同步互斥PPT课件

操作系统进程互斥及同步互斥PPT课件
39共享缓冲区的计算进程与打印进程的同步计算进程cp和打印进程iop公用一个单缓冲缓冲区bufiopcp10直接制约直接制约一组在一组在异步环境异步环境下下的并发进程的并发进程各自各自的执行结果的执行结果互为对方的执行条件互为对方的执行条件从从而而限制限制各进程的执行速度的过程称为各进程的执行速度的过程称为并发进程间的并发进程间的直接制约直接制约
负值)。
第15页/共38页
P 操作
P 操作的定义 对信号灯s的 p操作记为 p(s)。p(s)是一
个不可分割的原语操作,即取信号灯值 减1,若相减结果为负,则调用p(s)的进 程被阻,并插入到该信号灯的等待队列 中,否则可以继续执行。
第16页/共38页
4
P 操作的实现
入口
S-1 → S
≥0 S≥0 ?
第28页/共38页
互斥举例1:
x代表某航班机座号,pa和pb两个售票 进程,售票工作是对变量x加1。试用 信号灯的P、V操作实现这两个进程的 互斥。
第29页/共38页
5
设:mutex为互斥信号灯,初值为1。
pa( ) {
p(mutex);
x:=x+1 ; v(mutex);
}
pb( ) {
p(mutex);
•⑵.给出一个购票者进程的算法。
•⑶.给出当购票者最多不超过n (设n>20)个时, 信号量可能的变化范围。
35
第35页/共38页
算法描述
⑴.主函数算法:
⑵.购票者i的算法:
main()
Pi()
{
{
int mutex=20;
P(mutex);
cobegin
购票;
P1(); …Pi();…Pn();

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

3、第四章 互斥、同步与通讯
为了保证临界资源的正确使用,我们可把临界资源的访 问过程分成四部分:
a、进入区:检查可否进入临界区;可进 入,设置响应的标志,阻止其他进程。 b、临界区:进程中访问临界资源的一段 代码。 c、退出区:将访问标志清除。 d、剩余区:清除代码中的其余部分。 剩余区
进入区 临界区 退出区
1)单标志算法
4.2.3.1 进程互斥的软件实现
通过平等协商方式实现进程互斥的最初方法就 是软件方法。 其基本思想就是在进入区检查和设置一些标识, 如果已有进程在临界区,则在进入区通过循环 检查进行等待;在退出区修改标识。
其中主要问题是设置什么标识和如何检查标识。
4.2.3.1 进程互斥的软件实现
Flag[i]=True; Turn=j; While (Flag[j]=False&&Turn=j) 临界区
Flag[i]=False; 剩余区
算法4可完全正常工作,但是当进程多时,进入区的修改 检查工作就显得麻烦了。
软件实现的缺点
忙等待 实现过于复杂,需要较高的编程技巧
4.2.3.2 进程互斥的硬件实现
4.3 进程同步
前节种种方法解决临界区调度问题的缺点: 1)对不能进入临界区的进程,采用忙式等待测试 法,浪费CPU时间。 2)将测试能否进入临界区的责任推给各个竞争的 进程会削弱系统的可靠性,加重了用户编程负 担。 1965 年 E.W.Dijkstra( 荷 ) 提 出 了 新 的 同 步 工 具——信号量和P(荷兰语的测试 Proberen )、 V操作(荷兰语的增量Verhogen)。
间接作用:进程间要通过某种中介发生联系, 是无意识的安排的,可发生在相交进程之间, 也可发生在无关进程之间。
进程间的联系:竞争与协作

Os-04-1_2同步与互斥

Os-04-1_2同步与互斥
37
经典的生产者─消费者问题
生产者 消费者
38
经典的生产者─消费者问题(续1)
同步问题: P进程不能往“满”的缓冲区中放产 品,设置信号量为Sempty Q进程不能从“空”的缓冲区中取产 品,设置信号量Sfull
39
经典的生产者─消费者问题(续2)
deposit(data) : while (true) { 生产一个产品; P(Sempty) ; 送产品到缓冲区; V(Sfull); }; remove(data) : while (true) { P(Sfull); 从缓冲区取产品; V(Sempty); 消费产品; };
19
测试并设置‖指令方法的缺点
等待要耗费CPU时间,空转,不能实现“让权等 待”; 每次获得CPU都要重新测试 可能“饥饿”:从等待进程中随机选择一个进入 临界区,有的进程可能一直选不上,不公平
20
上锁原语
Lock ( x ) { if( x==true) {保护现行进程的CPU现场; 现行进程进入x的等待队列; UnLock ( x ) { if (x等待队列不空) { 移出队列首元素; 将进程放入就绪队列;
3 单生产者 单消费者 多缓冲区
4 多生产者 多消费者 多缓冲区
互斥:生产者<>消费者 (对缓冲区队列) 同步:生产者>消费者 消费者>生产者 互斥:生产者<>消费者 (对缓冲区队列) 生产者<>生产者 消费者<>消费者 同步:生产者>消费者 消费者>生产者
41
(1)为互斥设置一个公用信号量Mutex,初值为1 (2)为同步设置两个私用信号量Sempty,初值为n; Sfull,初值为0;

第四章 互斥与同步

第四章 互斥与同步
使用打印机
exit code
exit code
4.2 临界区(critical section)
一、基本概念
进程同步与互斥的主要任务就是保证多个并发执 行的进程之间能有效地合作并共享系统资源,使程 序的执行具有可再现性。
1.临界资源(critical resource)
临界资源是指在一段时间内只允许一个进程访问 的资源。它可是某个变量或某种硬件资源(如:打 印机,公共变量等。)
Parbegin
A(amount){//存款 disableInterrupt(); R1=balance; R2=amount; R1=R1+R2; balance=R1; enableInterrupt(); }; B(amount) {//取款 disableInterrupt(); R1=balance; R2=amount; R1=R1-R2; balance=R1; enableInterrupt(); };
(5)二元整型信号量的忙等待同步原语:
int S=1;//定义一个信号量 Wait(S): while (S==0); //执行空语句等待 S=S-1; Signal(S): S=S+1;
S为一二元整型信 号量 S初值为1
整型信号量机制是一种“忙等待”方式,存在较大的CPU浪 费!Why?如何改进!!
27、进行P0和P1的共享变量定义及其初值为( D ) 答案:D。 则并发执行进程P0和P1时产生的情况是: boolean flag[2]; A:不能保证进程互斥进入临界区,会出现“饥饿”现象 int turn=0; B:不能保证进程互斥进入临界区,不会出现“饥饿”现象 flag[0]=FALSE;flag[1]=FALSE; C:能保证进程互斥进入临界区,会出现“饥饿”现象 若进行P0和P1访问临界资源的类C代码实现如下: D:能保证进程互斥进入临界区,不会出现“饥饿”现象

操作系统原理进程管理进程同步互斥与通信死锁

操作系统原理进程管理进程同步互斥与通信死锁
信号量通信方式 信号量是一种用于控制多个进程对共享资源的访问的计数器,通过P、V操作实现进程间的同步与互斥。 信号量通信方式适用于解决并发进程间的同步问题,但不适用于大量数据的交换。
共享内存通信方式
01
共享内存的优势
02
共享内存允许多个进程直接读写同一块内存空间,避免了 数据的复制和传输,提高了数据交换的效率。
消息传递通信方式具有较好的灵活性和可靠性,可以满 足不同进程间异步或同步的通信需求。
通过定义一组通信协议和数据格式,实现发送和接收消 息的功能。常见的消息传递系统有管道、队列、信号量 等。
在消息传递通信中,也需要引入同步和互斥机制,以确 保消息的正确传递和处理。
06
实例分析
银行家算法实例分析
总结词
信号量机制与PV操作
信号量机制
信号量机制是一种用于实现进程同步和互斥的机制,它提供了一组PV操作(P操作和V 操作)来控制进程对共享资源的访问。
PV操作
PV操作是信号量机制中的两个基本操作,P操作表示进程请求资源,V操作表示进程释 放资源。当多个进程同时访问共享资源时,通过PV操作可以实现进程的同步和互斥,
银行家算法是一种避免死锁的资源分配策略,通过确 保系统在任何时候都处于安全状态来避免死锁。
详细描述
银行家算法以银行借贷系统的原理为基础,对资源的分 配进行严格控制。在操作系统中,当一个进程请求资源 时,系统会检查是否满足其请求而不导致死锁。如果满 足,则分配资源;如果不满足,则暂时不分配资源,直 到资源被释放并能够满足请求。
03
进程同步与互斥
进程同步的概念与实现
进程同步的概念
进程同步是操作系统中实现多个进程协 同工作的机制,通过同步机制,使得各 个进程能够按照一定的顺序和规则执行 ,以达到共同完成一项任务的目的。

04第四章互斥同步与通讯11

04第四章互斥同步与通讯11

0
i
turn
n-1
先于i
先于i
Eisenberg/Mcguire算法
Pi进入: do{
do{ flag[i]=want_in; j=turn; While (j!=i) if (flag[j]!=idle) {j=turn}; else {j=(j+1)% n}; flag[i]=in_cs; j=0; While ((j<n)&&(j==i ∣∣flag[j]!=in_cs)) j++; }while(j!=n);
临界资源:一次只允许一个进程使用的资源
例子:shared x1,x2;
region x1,x2 do {
region x1,x2 do{
……
……
(访问B)
(访问B)
……
……
}
}
4.2.2 临界区域与进程互斥
定义:多个进程不能同时进入关于同一组共享变量的临 界区域,否则可能发生与时间有关的错误,这种现象称 为进程互斥。
Lamport面包店算法
算法需要以下两个数据结构
int choosing[n]; int number[n]; 前者表示进程是否正在抓号choosing[i]=1表示
进程正在抓号,否则为0,其初值为0.后者用 来表示进程抓到号码,初值也为0. 算法描述方便需要定义以下表示方法
(a,b)<(c,d),如果 a<c or(a=c and b<d)成立。
访问共享变量的程序段。
一组公共变量
CR1 CR2 …….
CRn
4.2.1 共享变量与临界区域
临界区是于1965年首先提出的。在上例中的 CR1和CR2。临界区可能有多个。为了清晰起 见,通常把临界区与所对应的共享变量联系起 来,称为关于某一组共享变量的临界区。如上 例CR1和CR2是关于共享变量x的临界区。

操作系统第四章4

操作系统第四章4

操作系统第四章4在当今数字化的时代,操作系统作为计算机系统的核心组成部分,其重要性不言而喻。

今天,让我们深入探讨一下操作系统的第四章第 4 节所涵盖的关键内容。

首先,我们来谈谈进程的同步与互斥。

在多进程的环境中,多个进程可能会同时访问和操作共享资源。

如果不加以妥善管理,就可能导致数据的不一致性、错误甚至系统崩溃。

进程的同步就是为了协调多个进程的执行顺序,确保它们在合适的时机访问共享资源,以实现正确的结果。

而互斥则是确保在某一时刻,只有一个进程能够访问特定的共享资源,从而避免冲突。

举个简单的例子,假设有一个打印机,多个进程都需要使用它来打印文件。

如果没有同步和互斥机制,可能会出现两个进程同时向打印机发送打印指令,导致打印结果混乱。

为了实现进程的同步和互斥,操作系统通常采用信号量、锁等机制。

信号量就像是一个计数器,用于控制对共享资源的访问权限。

当一个进程想要访问共享资源时,它需要先获取信号量。

如果信号量的值大于0,进程可以获取资源并将信号量的值减1;如果信号量的值为0,进程就需要等待,直到其他进程释放资源并增加信号量的值。

锁则是一种更为直接的互斥机制。

当一个进程获取到锁时,其他进程就无法访问被锁保护的资源,直到持有锁的进程释放锁。

接下来,我们说一说死锁。

死锁是操作系统中一个比较棘手的问题。

当多个进程相互等待对方所持有的资源,而导致所有进程都无法继续前进时,就发生了死锁。

死锁的发生通常需要四个必要条件:互斥使用资源、占有并等待资源、不可剥夺资源以及循环等待资源。

为了预防死锁,可以通过破坏这四个条件中的一个或多个来实现。

比如,采用资源预分配策略来避免占有并等待的情况;或者规定资源不可剥夺的条件不成立,允许强行剥夺进程已占有的资源。

检测死锁也是操作系统的一项重要任务。

常见的死锁检测算法有资源分配图算法等。

一旦检测到死锁,操作系统就需要采取相应的措施来解除死锁。

解除死锁的方法包括剥夺资源、撤销进程等。

再来讲讲线程。

第4节 操作系统进程之间同步及互斥

第4节  操作系统进程之间同步及互斥

s
pb pc *∕ *∕ pb pa
pc
f pb( ) { p(sb); } p c( ) { p(sc); }
一分支一个信号灯,初 值为0
关于信号量的值
如果信号量是用来表示一个或者多个事件发生的,那么该
信号量的初始值通常赋为0; 如果信号量用于对共享资源的访问,那么该信号量的初始 值应赋1; 如果信号量用来表示运行任务访问n个相同的资源,那么该 信号量的初始值应赋为n,并把该信号量作为一个可计数的 信号量使用。
v(empty); v(sb); 消费一个产品;
同步举例
• 生产者消费者问题 • 合作进程
合作进程的执行次序表示
进程流图
s p1 p2 p5 p4 p5 s p6 p9 p7 f f p8 s
p3
p10
p6 f
main( ) { int sb=0; ∕* int sc=0; ∕* cobegin pa( ); pb( ); pc( ); coend } pa ( ) { v(sb); v(sc); }
返回
并发进程之间有两种制约关系
间接制约关系(互斥) 直接制约关系(同步)
互斥相关概念
临界资源 必须互斥使用的资源称为临界资源。
硬件:如输入机、打印机、磁带机等
软件:如公用变量、数据、表格、队列等 临界区 临界区是进程中对临界资源使用的程 序段,称为相对于该临界资源的临界 区。
进程P1 csa { x := x+1; csb {
什么是信号灯 信号灯是一个确定的二元组(s,q),s是一个具有非负初值 的整型变量,q是一个初始状态为空的队列。 创建信号灯时,应准确说明信号灯的初值 ,且这个初 值绝不能为负值 信号灯的操作由操作系统内核提供的原语操作,这个操作 称为P、V操作

第4章互斥同步与通信

第4章互斥同步与通信

0
i
turn
n-1
先于i
计算机操作系统教程(第2版)
先于i
17
Eisenberg/Mcguire算法
Pi进入:
Do { do {
flag[i] = want_in; 我要进入
j=turn;
取令牌
While (j!=i)
令牌是我的?
忙等待
If (flag[j]!=idle) j=turn; 不是,有令牌的要进?
临界区调度原则: !临界区空闲,想进入的应能进入; !临界区不空闲,进程应等待; !进程离开临界区时,应能唤醒等待进入的进程。
计算机操作系统教程(第2版)
12
4.2.3.1 进程互斥的软件实现
➢ 完全用程序实现,不需特殊硬件指令支持。 ➢ 可用于单CPU和多CPU环境中。 ➢ 有忙式等待问题。
计算机操作系统教程(第2版)
P1:
P2:
synchronize 先

计算机操作系统教程(第2版)
28
4.3.1 进程同步的概念
➢ 定义:一组进程,如果它们单独不能正常进行, 但并发可以正常进行,称这种现象为进程的合作 (cooperation)。
参与合作的进程称为合作进程(cooperating process) 如:司机与售票员是合作进程。
二层涵义:
(1)不容许多个进程同时进入关于同一组共享变 量的相同的临界区域;
(2)不容许多个进程同时进入关于同一组共享变 量的不同的临界区域。
Remarks: 互斥是相对于公共变量而言的。
计算机操作系统教程(第2版)
9
嵌套临界区域
临界区可以嵌套: shared x;
region x do{ …… ① region y do { ……. }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

会合引入背景—分布系统
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
F
会合结束,调用者继续
T 选择语句后有<语句序列>
F
执行
有else部分
T
F
建立异常条件
执行else部分
4.3.6.2 会合例子--客栈问题
master
活动: (1)接受猎物 (2)接受面包 (3)做三明治 (4)给探险家
限制:
一份猎物

一份面包

一份三明治
一位客人
...
explorers
bakery hunter
读者-写者问题
when write_count=0 =>
accept start_write do while read_count > 0 do accept finish_read do read_count:= read_count -1; end finish_read end while
4.4.2 进程通讯模式
1. 共享内存模式(shared memory):
P1
公共 内存
OS提供: (1)公共内存
P2
(2)互斥同步机制
2. 消息传递模式(message passing):
P1 send M receive P2
直接:进程-进程 间接:进程-信箱-进程
4.4.3 直接方式
对称形式(sender and receiver name each
other)
send(R,message)
receive(S,message)
S:
R:
… Send(R,M)
...
… Receive(S,N)
(Rendezvous)
会合:两个并发执行流汇集到一处
并发执行流
调用 接受
均发生,握手,同步。
会合引入背景—分布系统
PV操作问题:
P1:
… P(S) CR1 V(S) …
共享变量 (被动)
Semaphore s;
P2:

P(S) CR2 V(S) …
共享变量与访问进程在同一存储区,不适合分布环境。
2. 接受语句 accept<入口名称>[<形参表>] [do<语句序列>end<入口名称>]
Accept语句
T 有调用者 F 等待
选取第一个
会合开始
调用者等待
T
F
有in参数
取in参数
T 有语句序列 F
会 合
执行之

T 有out参数 F 送out参数
会合结束 调用者继续
例子--单一资源管理
task single_resource is entry acquire; entry return;
计算所有布尔表达式 为’真’者对应<accept>标记开放
F
有else部分
T
执行else部分
有开放的<accept>
F
T
有被调用的开放的<accept>
F 等待
T
任取一开放且被调用的<accept>
会合开始,调用者等待
取 in 参数
T 有 in 参数
执行语句序列 T
F
有语句序列
送 out 参数
F
T 有 out 参数
客栈问题
explorer:
loop
探险
进客栈
取三明治
入 口
出客栈
吃三明治
end loop
hunter:
loop
狩猎
进客栈
送猎物 出客栈
入 口
end loop
bakery:
loop
做面包
进客栈 送面包
入 口
出客栈
end loop
客栈问题
procedure Adalodge is task type explorer; task hunter; task bakery; task master is entry deliverbread; //面包师送面包 entry delivermeat; //狩猎者送猎物 entry lodge; //探险家取三明治 end master;
Ada同步语句(cont.)
3. 选择语句
select [when <布尔表达式> =>] <接受语句> [<语句序列>] {or [when <布尔表达式> =>] <接受语句> [<语句序列>] } [else <语句序列>]
end select
4.3.6.1 会合的描述(Cont.)
select 语句流程
end start_write; write_count:=write_count+1; or when write_count>0 =>
accept finish_write do write_count:=write_count-1;
end finish_write; end select End loop; End readers_writers
or when (count>0) => accept getout(item:out integer) do item:=b(op); end getout; op:=(op+1)mod k; count:=count-1;
end select end loop end boundedbuffer;
客栈问题
begin bread:=0; meat:=0; sandwich:=0; loop select when bread=0 => accept deliverbread(br: in food) do bread:=br; end deliverbread; or when meat=0 => accept delivermeat(mt: in food) do meat:=mt; end delivermeat;
end hunter;
客栈问题
task body bakery is rolls:food; begin loop bake(rolls); master.deliverbread(rolls) end loop
end bakery;
客栈问题
task body master is bread, meat, sandwich: food; procedure makesandwich is begin cook(meat); sandwich:=bread+meat; bread:=0; meat:=0; end makesandwich;
4.4.1 进程通讯概念
进程通讯:进程之间的相互作用。
低级通讯(简单信号)
进程互斥 进程同步
高级通讯(大宗信息)
高级通讯
memory sharing vs. message passing direct vs. indirect symmetric vs. non-symmetric buffering vs. non-buffering
作业 #4
1. 用Ada语言中的会合解决读者/写者问题,要求写 者优先。即编写一个任务,其中有如下四个入口: start_read; finish_read, start_write, finish_write. 提示:可以使用嵌套的accept语句。
读者-写者问题
Task readers_writers is entry start_read; entry finish_read; entry start_write; entry finish_write;
null; end Adalodge;
Bounded buffer problem
task boundedbuffer is entry putin; entry getout;
相关文档
最新文档