互斥与同步PPT演示文稿
合集下载
进程同步与互斥PPT
(1)两个进程并发执行 时,能否保证互斥地 使用资源?为什么? (2)如果要使两个进程 交替使用资源,若仍 使用P、V操作来进行 管理,写出应定义的 信号量及其初值。 (3)修改上述程序,使 两个进程能交替使用 资源r。
进程交替使用资源
(1)能保证互斥使用资源。因为在两个进程中, “使用资源 r”都是作为临界区,由P(S)和V(S)操 作保证了互斥执行,S 的初值定义为1,符合要求。 (2)要使两个进程交替使用资源,仅仅保证互斥使 用是不够的,必须要两个进程互相等待互相通知。 为此,必须定义新的信号量。定义两个私有信号 量S1和S2。假定进程X先使用资源,那么进程X 的私有信号量S1的初值定义为1,进程Y的私有信 号量S2的初值定义为0。轮流使用可以保证互斥, 因此信号量S可以不要。 (3) 两个进程可以改写为
读者—写者问题
1、读/写互斥访问 semaphore rmutex=1,rwmutex=1; int count=0; parbegin reader: begin repeat P(rmutex) if (count==0) then P(rwmutex); count:=count+1; V(rmutex) reading; P(rmutex) count:=count-1; if (count==0) then V(rwmutex); V(rmutex) until false; end; parend
writer: begin repeat P(rwmutex) writing; V(rwmutex) until false; end
进程交替使用资源
当进程X和进程Y共享某个资源r,进程并发执行时的 程序如下: begin S:semaphore:=1; Cobegin Process X Begin L1: P(S); 使用资源r; V(S); Goto L1; End; Process Y Begin L2: P(S); 使用资源r; V(S); Goto L2; End; Coend; End;
进程互斥和同步举例73页PPT
谢谢!
36、自己的鞋子,自己知道紧在哪里。——西班牙
37、我们唯一不会改正的缺点是软弱。——拉罗什福科
xiexie! 38、我这个人走得很慢,但是我从不后退。——亚伯拉罕·林肯
进程互斥和同步举例
1、纪律是管理关系的形式。——阿法 纳西耶 夫 2、改革如果不讲纪律,就难以成功。
3、道德行为训练,不是通过语言影响 ,而是 让儿童 练习良 好道德 行为, 克服懒 惰、轻 率、不 守纪律 、颓废 等不良 行为。 4、学校没有纪律便如磨房里没有水。 ——夸 美纽斯
5、教导儿童服从真理、服从集体,养 成儿童 自觉的 纪律性 ,这是 儿童道 德教育 最重要 的部分 。—— 陈鹤琴
39、勿问成功的秘诀为何,且尽全力做你应该做的事吧。——美华纳
40、学而不思则罔,思而不学则殆。——孔子
ห้องสมุดไป่ตู้
第五章互斥与同步-PPT课件
二元信号量的取值仅为“0”或“1”,主要用作互斥 变量; 一般信号量初值为物理资源的总数,用于进程间的 同步问题。
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; …… }
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是否为互斥事件?是否为对 立事件?
及其
发生的概率
江苏如东马塘中学 张伟锋
创设问题:
体育考试的成绩分为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是否为互斥事件?是否为对 立事件?
《进程同步与互斥》课件
消息传递的方式
包括发送和接收消息,以 及处理消息队列。
消息传递的作用
通过发送和接收消息,进 程可以交换信息,协调彼 此的行为,实现进程同步 。
共享内存机制
共享内存定义
多个进程共享同一块内存区域,通过 该区域进行通信。
共享内存的访问规则
共享内存的作用
通过共享内存,进程可以直接读写共 享数据,实现快速的数据交换和同步 。
学家都能进餐。这需要使用同步和互斥机制来控制哲学家进程的执行顺序。
05
进程同步与互斥的案例分析
基于信号量的进程同步案例
总结词
通过使用信号量作为同步机制,实现多个进程对 共享资源的正确访问。
总结词
通过使用信号量来控制进程的执行顺序,保证某 些进程必须先于其他进程执行。
详细描述
一个经典案例是生产者-消费者问题,其中生产者 和消费者共享一个有限的缓冲区。使用信号量来 控制生产者和消费者对缓冲区的访问,确保不会 发生溢出或饥饿现象。
哲学家就餐问题
总结词
哲学家就餐问题是进程同步与互斥问题中的一种经典问题,涉及到五个哲学家围坐在圆 桌旁,思考和进餐的哲学行为。
详细描述
哲学家就餐问题描述了一个场景,其中五个哲学家围坐在圆桌旁,他们有时思考,有时 进餐。餐桌中央有一盘意大利面,每位哲学家之间有一只叉子。如果一个哲学家要进餐 ,他需要同时拿起左右两只叉子。为了防止产生死锁,需要设计一种策略来确保所有哲
读者写者问题
总结词
读者写者问题是另一个经典的进程同步与互 斥问题,涉及到多个读者进程和写者进程对 共享资源的访问。
详细描述
读者写者问题描述了一个场景,其中多个读 者进程可以同时访问共享资源,但写者进程 在修改共享资源时需要独占式的访问。为了 维护数据的一致性和完整性,需要使用同步 和互斥机制来控制读者和写者进程的访问顺 序。
《互斥同步与通讯》PPT课件
26
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)成立。
可能按P1,P2,P0次序进入!
P0:抓到1;
P1:抓到1;
正确次序:P0,P1,P2
P2:抓到2;
29
满足临界区管理原则
互斥性(mutual exclusion)
如果进程pi在临界区内,且进程pk(k<>i)已抓到号number[k]<>0, 则有(number[i],i)<(number[k],k). 进程Pk将在第二个while循环 处等待, 直到pi离开该临界区.
6. While (number[j]<>0)&&
7.
(number[j],j)<(number[i],i) {skip}
8. }
(2)P1抓到1进入临界区
(3)P2抓到2进入临界区
28
Lamport面包店算法(Cont.)
临界区;
number[i]=0;
}while(1); 变量choosing的作用:
23
Dekker互斥算法
P1: do{ flag[1]=1; while flag[0] do if (turn=0){ flag[1]=0; while turn==0 do skip; flag[1]=1;}
24
Dekker互斥算法
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)成立。
可能按P1,P2,P0次序进入!
P0:抓到1;
P1:抓到1;
正确次序:P0,P1,P2
P2:抓到2;
29
满足临界区管理原则
互斥性(mutual exclusion)
如果进程pi在临界区内,且进程pk(k<>i)已抓到号number[k]<>0, 则有(number[i],i)<(number[k],k). 进程Pk将在第二个while循环 处等待, 直到pi离开该临界区.
6. While (number[j]<>0)&&
7.
(number[j],j)<(number[i],i) {skip}
8. }
(2)P1抓到1进入临界区
(3)P2抓到2进入临界区
28
Lamport面包店算法(Cont.)
临界区;
number[i]=0;
}while(1); 变量choosing的作用:
23
Dekker互斥算法
P1: do{ flag[1]=1; while flag[0] do if (turn=0){ flag[1]=0; while turn==0 do skip; flag[1]=1;}
24
Dekker互斥算法
第七讲+进程间的同步与互斥PPT课件
2020/3/26
可编辑
17
进程间通信
进程通信是指进程之间可直接以较高的效率传递 较多数据的信息交换方式。
在进程间传递大量信息需要操作系统提供相应的 机制。
WindowsCE5.0提供的进程间通信机制包括共享 内存、消息传递和管道。
2020/3/26
可编辑
18
管道Pipe
管道 也称共享文件方式,基于文件系统,利 用一个打开的共享文件连接两个相互通 信的进程,文件作为缓冲传输介质。
息队列,消息队列既可以作为在进程之间传递数 据的工具,也可以作为进程之间同步工具。 只占用很小的内存。
2020/3/26
可编辑
24
2.2.5.2 点对点消息队列
Point-to-Point Message Queues,常用的系统模块之间进 行通信的方式
一个先进先出的队列结构
特色
消息可为任意类型的数据 消息队列可用来进行同步 严格按照先进先出的方式 基于点对点的操作,不能进行广播
除了物理设备外,许多变量、数据、表格、 队列等也可以由若干个进程共享使用,但 每时刻仅允许一个进程使用,这些资源也 属于临界资源。
2020/3/26
可编辑
7
临界区critical section
临界区 针对同一临界资源进行操作的程序段,也称 为互斥段。
任一共享进程一旦对临界资源开始操作,则 在该操作结束之前,其它进程就不能对该临 界资源进行处理。也就是说,执行这些操作 的程序段必须是互斥执行的。
运行效率比内核同步对象高
2.2.4.4 Critical Section
应用程序分配的一个数据结构
用来把一段代码标记为临界区,从而保证此区域内部代 码的访问是串行的
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
5.2 临界区
(2)临界区(critical section,也称临界段) ➢ 临界区:是指进程地址空间中访问临界资源的
那段代码。 ➢ 进入区:是指临界区之前,检查临界资源闲忙
标志的那段代码。 ➢ 退出区:在临界区后面,将临界资源释放的那
段代码。
5
5.2 临界区
如:while true
{…
进入区
15
5.4 信号量
1.信号量概念 信号量是荷兰计算机科学家Dijkstra于1965年
提出的一种有效的进程同步工具,从实现机制 上可分为:整型信号量 、记录型信号量 、信 号量集等。 2.二元信号量和一般信号量
➢ 二元信号量的取值仅为“0”或“1”,主要用作互斥 变量;
➢ 一般信号量初值为物理资源的总数,用于进程间的 同步问题。
12
2.互斥的硬件解决方法
例:用TS硬件指令方法实现互斥
while(true) {while(TS(lock)); 执行csi lock=false; ……}
硬件指令要求在一个指令周期内完成,因此,公共数据的完 整性和正确性不会受到中断的影响。但该类指令存在“忙等待” 的缺点。
13
2.互斥的硬件解决方法
例:假设两个进程P1,P2分别在C1和C2两个处理机上运行,异步 地对公共变量X进行加1操作。假设两个进程的推进顺序如下:
(1)P1:…,R1=X;R1=R1+1;X=R1;…
P2:….
R2=X;R2=R2+1;X=R2;…
(2) P1:…,R1=X;R1=R1+1;X=R1;…
P2:…, R2=R2+1;X=R2;…
R2=X;
问:设X的初值为V,求以上两种情况下,X的最后值分别是多少?
(1):V+1;(2):V+2; 对公共变量的读写操作必须互斥地进行。
3ቤተ መጻሕፍቲ ባይዱ
5.2 临界区
1.基本概念
进程同步的主要任务就是保证多个并发执行的进 程之间能互相合作,有效地共享系统资源,使程序 的执行具有可再现性。
(1)临界资源
临界资源是指在一段时间内只允许一个进程访问 的资源。它可是某个变量或某种硬件资源(如:打 印机,公共变量等。)
▪}
强制在两个进程之间轮换,不能满足空闲让进的原则! 9
(3)Dekker的软件解决方法(一种正确的方法) 初始化:flag[0]=flag[1]=false;turn可以为0或1;
Pi:
while(true)
{flag[i]=true;/*标识想进入临界区的进程*/
while(flag[j])
7
问:该方法是否遵循“忙则等待”的原则?
系统中的进程之间的关系可概括为:同步与互斥。同步是指 异步事件能按照要求的时序进行,以使各合作进程协调 一致地工作。互斥实际上也是一种同步。
1.互斥的软件解决方法 (1) 用标志位flag[i]来标识进程Pi是否在临界区中执行。
Pi: while(true) {… while(flag[j]);/*执行空语句等待*/ flag[i]=true; 执行csi /* 进程Pi的临界区*/
临界区 (如例中P1,P2对X的访问的:R=X; R=R+1;X=R;)
退出区
…
}
6
5.2 临界区
2.进程同步遵循的原则 ➢ 空闲让进:任何时候临界区内只能有一个进程。 ➢ 忙则等待。 ➢ 有限等待:等待有限时间,避免“死等”发生。 ➢ 让权等待:当正在执行的进程自己不能进入临
界区时,应立即释放CPU。
(1)中断屏蔽方法(为什么?)
当一个进程正在执行临界区代码时,屏蔽中 断,当前进程离开临界区后,再开中断。
优点:简单有效 缺点: ➢限制了处理器交叉执行指令的能力 ➢只适应单处理机系统,why?
11
2.互斥的硬件解决方法
(2)硬件指令的方法
➢TS(Test-and Set)指令 bool founction TS (bool flag) { TS =flag; flag=true;/*关闭临界区*/ }
16
5.4 信号量
3.整型信号量 整型信号量是通过定义一个整型变量,如s ,和
两个标准的原子操作wait(s)和 signal(s)来 对s进行减1和增1操作,以实现对临界资源的 访问控制。这两个原子操作习惯上分别被称为 P操作和V操作。 两种实现方式:忙等待与阻塞等待。
17
5.4 信号量
(1)一般整型信号量的忙等待同步原语
➢Swap指令 Void swap(bool a,b)
{ bool temp; temp=a; a=b; b=temp; }
14
2.互斥的硬件解决方法
例:用Swap指令方法实现互斥
while(true) { key=true; do Swap(lock,key); while(key==false) 执行csi lock=false; ……}
Semaphore s=N;/*N为同类资源的总数*/
Wait(s): while (s≤0);//忙等待
s=s-1; Signal(s): s=s+1;
18
5.4 信号量
(2)二元整型信号量的忙等待同步原语: Semaphore s=1; Wait(s): while (s==0);//忙等待 s=s-1; Signal(s): s=s+1;
flag[i]=false;/*释放临界资源*/ …}
8
5.3 互斥
(2)用一个turn来指示哪个进程应该进入临界 区,turn=i表示pi可以进入临界区。
▪ Pi: ▪ While(true) ▪ {… ▪ while(turn!=i); /*执行空语句等待*/ ▪ 执行csi; /*临界区*/ ▪ turn=j; /* (j!=i) 释放临界资源*/ ▪…
第五章 并行性:互斥与同步
5.1 概论 5.2 临界段 5.3 互斥 5.4 信号量 5.5 进程间的通信 5.6 案例:UNIX的进程同步与通信
1
5.1 概述
系统中诸进程之间的关系
➢进程间互相协作的关系 ➢进程间的共享关系(软资源:文件和数据) ➢进程间的互斥关系(临界资源)
2
5.2 临界区
{if(turn==j)
{ flag[i]=false;
while(turn==j);
flag[i]=true;
}}
执行csi /*执行临界区代码*/ turn=j;flag[i]=false;
……
}
10
2.互斥的硬件解决方法 中断是单处理机系统中当前运行进程释放 对CPU控制权的唯一原因。
5.2 临界区
(2)临界区(critical section,也称临界段) ➢ 临界区:是指进程地址空间中访问临界资源的
那段代码。 ➢ 进入区:是指临界区之前,检查临界资源闲忙
标志的那段代码。 ➢ 退出区:在临界区后面,将临界资源释放的那
段代码。
5
5.2 临界区
如:while true
{…
进入区
15
5.4 信号量
1.信号量概念 信号量是荷兰计算机科学家Dijkstra于1965年
提出的一种有效的进程同步工具,从实现机制 上可分为:整型信号量 、记录型信号量 、信 号量集等。 2.二元信号量和一般信号量
➢ 二元信号量的取值仅为“0”或“1”,主要用作互斥 变量;
➢ 一般信号量初值为物理资源的总数,用于进程间的 同步问题。
12
2.互斥的硬件解决方法
例:用TS硬件指令方法实现互斥
while(true) {while(TS(lock)); 执行csi lock=false; ……}
硬件指令要求在一个指令周期内完成,因此,公共数据的完 整性和正确性不会受到中断的影响。但该类指令存在“忙等待” 的缺点。
13
2.互斥的硬件解决方法
例:假设两个进程P1,P2分别在C1和C2两个处理机上运行,异步 地对公共变量X进行加1操作。假设两个进程的推进顺序如下:
(1)P1:…,R1=X;R1=R1+1;X=R1;…
P2:….
R2=X;R2=R2+1;X=R2;…
(2) P1:…,R1=X;R1=R1+1;X=R1;…
P2:…, R2=R2+1;X=R2;…
R2=X;
问:设X的初值为V,求以上两种情况下,X的最后值分别是多少?
(1):V+1;(2):V+2; 对公共变量的读写操作必须互斥地进行。
3ቤተ መጻሕፍቲ ባይዱ
5.2 临界区
1.基本概念
进程同步的主要任务就是保证多个并发执行的进 程之间能互相合作,有效地共享系统资源,使程序 的执行具有可再现性。
(1)临界资源
临界资源是指在一段时间内只允许一个进程访问 的资源。它可是某个变量或某种硬件资源(如:打 印机,公共变量等。)
▪}
强制在两个进程之间轮换,不能满足空闲让进的原则! 9
(3)Dekker的软件解决方法(一种正确的方法) 初始化:flag[0]=flag[1]=false;turn可以为0或1;
Pi:
while(true)
{flag[i]=true;/*标识想进入临界区的进程*/
while(flag[j])
7
问:该方法是否遵循“忙则等待”的原则?
系统中的进程之间的关系可概括为:同步与互斥。同步是指 异步事件能按照要求的时序进行,以使各合作进程协调 一致地工作。互斥实际上也是一种同步。
1.互斥的软件解决方法 (1) 用标志位flag[i]来标识进程Pi是否在临界区中执行。
Pi: while(true) {… while(flag[j]);/*执行空语句等待*/ flag[i]=true; 执行csi /* 进程Pi的临界区*/
临界区 (如例中P1,P2对X的访问的:R=X; R=R+1;X=R;)
退出区
…
}
6
5.2 临界区
2.进程同步遵循的原则 ➢ 空闲让进:任何时候临界区内只能有一个进程。 ➢ 忙则等待。 ➢ 有限等待:等待有限时间,避免“死等”发生。 ➢ 让权等待:当正在执行的进程自己不能进入临
界区时,应立即释放CPU。
(1)中断屏蔽方法(为什么?)
当一个进程正在执行临界区代码时,屏蔽中 断,当前进程离开临界区后,再开中断。
优点:简单有效 缺点: ➢限制了处理器交叉执行指令的能力 ➢只适应单处理机系统,why?
11
2.互斥的硬件解决方法
(2)硬件指令的方法
➢TS(Test-and Set)指令 bool founction TS (bool flag) { TS =flag; flag=true;/*关闭临界区*/ }
16
5.4 信号量
3.整型信号量 整型信号量是通过定义一个整型变量,如s ,和
两个标准的原子操作wait(s)和 signal(s)来 对s进行减1和增1操作,以实现对临界资源的 访问控制。这两个原子操作习惯上分别被称为 P操作和V操作。 两种实现方式:忙等待与阻塞等待。
17
5.4 信号量
(1)一般整型信号量的忙等待同步原语
➢Swap指令 Void swap(bool a,b)
{ bool temp; temp=a; a=b; b=temp; }
14
2.互斥的硬件解决方法
例:用Swap指令方法实现互斥
while(true) { key=true; do Swap(lock,key); while(key==false) 执行csi lock=false; ……}
Semaphore s=N;/*N为同类资源的总数*/
Wait(s): while (s≤0);//忙等待
s=s-1; Signal(s): s=s+1;
18
5.4 信号量
(2)二元整型信号量的忙等待同步原语: Semaphore s=1; Wait(s): while (s==0);//忙等待 s=s-1; Signal(s): s=s+1;
flag[i]=false;/*释放临界资源*/ …}
8
5.3 互斥
(2)用一个turn来指示哪个进程应该进入临界 区,turn=i表示pi可以进入临界区。
▪ Pi: ▪ While(true) ▪ {… ▪ while(turn!=i); /*执行空语句等待*/ ▪ 执行csi; /*临界区*/ ▪ turn=j; /* (j!=i) 释放临界资源*/ ▪…
第五章 并行性:互斥与同步
5.1 概论 5.2 临界段 5.3 互斥 5.4 信号量 5.5 进程间的通信 5.6 案例:UNIX的进程同步与通信
1
5.1 概述
系统中诸进程之间的关系
➢进程间互相协作的关系 ➢进程间的共享关系(软资源:文件和数据) ➢进程间的互斥关系(临界资源)
2
5.2 临界区
{if(turn==j)
{ flag[i]=false;
while(turn==j);
flag[i]=true;
}}
执行csi /*执行临界区代码*/ turn=j;flag[i]=false;
……
}
10
2.互斥的硬件解决方法 中断是单处理机系统中当前运行进程释放 对CPU控制权的唯一原因。