最新【考研计算机专业课】武汉大学操作系统PPT课件 第3章 进程同步与通信1(共108张PPT课件)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法 4的描述 (suàn fǎ)
enum boolean {false,true};
boolean flag[2] ={false,false}; int turn;
P0:{
do {
flag[0]=true;
turn=1;
while (flag[1] && turn = = 1);
进程(jìnchéng)P0的临界区代码CS0 ;
while(true) }
第十六页,共一百零八页。
算法2存在 的问题 (cúnzài)
此算法解决了空闲让进的问题,但有可 能两个进程同时进入临界区。
当两个进程都未进入临界区时,它们各 自的访问标志值都为false,若此时(cǐ 刚 shí) 好两个进程同时都想进入临界区,并且 都发现对方标志值为false,于是两个进 程同时进入了各自的临界区,这就违背 了临界区的访问原则忙则等待。
第十页,共一百零八页。
算法 1的描述 (suàn fǎ)
int turn=0; P0:{
do { while (turn!=0); 进程(jìnchéng)P0的临界区代码CS0
; turn=1 ; 进程P0的其他代码;
} while (true) }
第十一页,共一百零八页。
算法(suàn fǎ)1的描述(续)
第二十页,共一百零八页。
算法3存在 的问题 (cúnzài)
该算法可以有效地防止两个进程同时进 入临界区,但存在两个进程都进不了临 界区的问题。
当两个进程同时想进入临界区时,它们 分别将自己的标志位设置(shèzhì)为true,并 且同时去检查对方的状态,发现对方也 要进入临界区,于是双方互相谦让,结 果谁也进不了临界区。
用Swap指令实现(shíxiàn)进程互斥
为每个临界资源设置一个共享布尔变量lock表示临界资源 状态;再设置一个局部布尔变量key用于与lock交换(jiāohuàn)信 息。算法如下: ┆
key=true;
while(key!=false)Swap(&lock,&key);
进程的临界区代码CS ; lock=false ;
进程P0的其他代码;}
while(true) }
第十九页,共一百零八页。
算法(suàn fǎ)3的描述(续)
P1:{ do { flag[1]=true; while (flag[0]); 进程P1的临界(lín jiè)区代码CS1
; flag[1]=false; 进程P1的其他代码;}
while(true) }
第十七页,共一百零八页。
算法 3的思想 (suàn fǎ)
本算法仍然设置标志数组flag[ ],但标志 用来表示进程是否希望(xīwàng)进入临界区。
在每个进程访问临界资源之前,先将自 己的标志设置为真,表示进程希望进入 临界区,然后再检查另一个进程的标志 。若另一个进程的标志为真,则进程等 待;否则进入临界区。
第二十一页,共一百零八页。
算法 4的思想 (suàn fǎ)
本算法的基本思想是算法3和算法1的结 合。是一个正确的算法。
标志数组flag[ ]表示进程(jìnchéng)是否希望进 入临界区或是否正在临界区中执行。
还设置了一个turn变量,用于指示允许进 入临界区的进程标识。
第二十二页,共一百零八页。
flag[0]=false ;
进程P0的其他代码;}
while (true) }
第二十三页,共一百零八页。
算法(suàn fǎ)4的描述(续)
P1:{
do {
flag[1]=true;
turn=0;
while (flag[0] && turn = = 0);
进程P1的临界(lín jiè)区代码CS1 ;
许多计算机中提供了专门的硬件指令, 实现对字节(zìjié)内容的检查和修改或交换 两个字节(zìjié)内容的功能。
使用这样的硬件指令就可以解决临界区 互斥的问题。
第二十九页,共一百零八页。
TS(Test-and-Set)指令(zhǐlìng)
TS指令(zhǐlìng)的功能可描述如下: boolean TS(boolean *1ock) { boolean old; old=*lock; *lock=true; return old; }
互斥的实现既有硬件方法也有软件(ruǎn 方 jiàn) 法,下面将对进程互斥的一些实现方法进 行介绍。
第八页,共一百零八页。
3.2.1 互斥算法(suàn fǎ)
有两个进程P0和P1互斥地共享某个临界 资源。
P0和P1是循环进程,它们执行一个(yī 无 ɡè) 限循环程序,每次使用该资源一个(yī 有 ɡè) 限的时间间隔。
第三十四页,共一百零八页。
上锁 原语 (shànɡ suǒ)
lock(w) { while(w==1); w = 1; }
第三十五页,共一百零八页。
开锁原语
unlock(w) { w = 0; }
第三十六页,共一百零八页。
用锁机制(jīzhì)实现互斥
进程 P
(jìnchéng) 1
┆
lock(w);
临界区;
unlock(w);
┆
进程P2 ┆ lock(w); 临界区;
unlock(w); ┆
第三十七页,共一百零八页。
自旋 锁 (zìxuán)
自旋锁是专为防止多处理器并发而引入的一种锁,它在 内核中大量应用于中断处理等部分,因为中断处理程序 中不允许睡眠。
┆
第二十七页,共一百零八页。
开关 中断方法的不足 (kāiguān)
限制了处理机交替(jiāotì)执行程序的能力, 因此执行的效率将会明显降低;
将关中断的权力交给用户进程则很不明 智,若一个进程关中断之后不再开中断 ,则系统可能会因此终止。
第二十八页,共一百零八页。
硬件 指令方法 (yìnɡ jiàn)
第十八页,共一百零八页。
算法 3的描述 (suàn fǎ)
enum boolean {false,true}; boolean flag[2]={false,false}; P0:{
do {
flag[0]=true;
while (flag[1]);
进程P0的临界(lín jiè)区代码CS0 ;
flag[0]=false;
码称为临界区,又称临界段。 同类临界区:所有与同一临界资源相关
联的临界区。
第二页,共一百零八页。
共享变量 例 (biànliàng)
A:
B:
R1=x;
R2=x;
R1=R1+1;
R2=R2+1;
x=R1;
x=R2;
如果先执行A再执行B,则x值增加2。
若按顺序R1=x;R2=x;R1=R1+1;x=R1 ;R2=R2+1;x=R2;则x值增加1。这种错
进程的其他代码;
┆
第三十三页,共一百零八页。
3.2.3 锁机制(jīzhì)
锁是一个代表资源状态的变量,通常用0表 示资源可用(开锁),用1表示资源已被占 用(关锁)。
在使用临界资源前需先考察锁变量的值, 如果值为0则将锁设置为1(关锁),如果 值为1则回到第一步重新(chóngxīn)考察锁变量的 值。当进程使用完资源后,应将锁设置为0 (开锁)。
哲学家进餐问题描述有五个哲学家他们的生活方式是交替地进行思考和进餐哲学家们共用一张圆桌分别坐在周围的五张椅子上在圆桌上有五个碗和五支筷子平时哲学家进行思考饥饿时便试图取其左右最靠近他的筷子只有在他拿到两支筷子时才能进餐用五支筷子的信号量构成信号量数组
第3章 进程同步与通信(tōng xìn)
在多道程序系统中,进程之间的相互制 约关系体现在如下两个方面:
直接制约关系:合作(hézuò)进程之间产生的制 约关系。
间接制约关系:共享资源产生的制约关系。
第一页,共一百零八页。
3.1 同步 与互斥的概念 (tóngbù)
3.1.1 临界资源与临界区 临界资源:一段时间内仅允许(yǔnxǔ)一个进
程使用的资源称为临界资源。 如:打印机、共享变量。 临界区:进程中访问临界资源的那段代
P1:{ do { while (turn!=1); 进程P1的临界(lín jiè)区代码CS1
; turn=0 ; 进程P1的其他代码;
} while (true) }
第十二页,共一百零八页。
算法1存在 的问题 (cúnzài)
此算法(suàn fǎ)可以保证互斥访问临界资源, 但两个进程必须以交替次序进入临界区 。
同步例:计算进程与打印进程共享一个单 缓冲区。
C
缓冲区
P
第六页,共一百零八页。
互斥
当一个进程正在使用某资源时,其他希 望(xīwàng)使用该资源的进程必须等待,当该 进程用完资源并释放后,才允许其他进 程去访问此资源,我们称进程之间的这 种相互制约关系为互斥。
第七页,共一百零八页。
3.2 互斥的实现 方法 (shíxiàn)
当进程执行临界区代码时,要防止其他 进程进入其临界区访问,最简单的方法 是禁止中断。
禁止中断能保证当前运行进程将临界区 代码顺利执行完,从而保证百零八页。
用禁止中断 方法实现互斥 (zhōngduàn)
┆ 关中断
; (zhōngduàn) 临界区; 开中断;
误称为(chēnɡ wéi)“与时间有关的错误”,产生的原 因是没有互斥使用共享变量。
第三页,共一百零八页。
临界资源访问 过程 (fǎngwèn)
进入区
临界区
退出 区
(tuìchū)
剩余区
第四页,共一百零八页。
访问临界资源(zīyuán)应遵循的原则
空闲让进:若无进程处于临界区时,应允
在退出临界区时修改本进程临界区标志 为假。
第十四页,共一百零八页。
算法 2的描述 (suàn fǎ)
enum boolean {false,true};
boolean flag[2]={false,false};
P0:{ do {
while (flag[1]);
flag[0]=true;
进程P0的临界(lín jiè)区代码CS0 ;
flag[1]=false ;
进程P1的其他代码;}
while (true) }
第二十四页,共一百零八页。
3.2.2 硬件 方法 (yìnɡ jiàn)
用硬件方法实现互斥的主要思想是保证 (bǎozhèng)检查操作与修改操作不被打断。
第二十五页,共一百零八页。
禁止中断 方法 (zhōngduàn)
第三十一页,共一百零八页。
Swap指令(zhǐlìng)(或Exchange指 令)
Swap指令(zhǐlìng)的功能可描述如下: Swap(boolean *a,boolean *b) { boolean temp; temp=*a; *a=*b; *b=temp; }
第三十二页,共一百零八页。
flag[0]=false ; 进程P0的其他代码;} while(true) }
第十五页,共一百零八页。
算法(suàn fǎ)2的描述(续)
P1:{ do { while ( flag[0]); flag[1]=true; 进程P1的临界区代码(dài mǎ)CS1
; flag[1]=false ; 进程P1的其他代码;}
第九页,共一百零八页。
算法 1的思想 (suàn fǎ)
设置一个公用整型变量turn,用来(yònɡ 指 lái) 示允许进入临界区的进程标识。
若turn为0,则允许进程P0进入临界区; 否则循环检查该变量,直到turn变为本进 程标识;
在退出区,修改允许进入进程的标识为1 。进程P1的算法与此类似。
许一个进程进入(jìnrù)临界区。
忙则等待:当已有进程进入临界区,其他进
程必须等待。
有限等待:应保证要求进入临界区的进程在
有限时间内进入临界区。
让权等待:当进程不能进入自己的临界区时,应
释放处理机。
第五页,共一百零八页。
3.1.2 同步 与互斥 (tóngbù)
同步:多个相互(xiānghù)合作的进程在一些关 键点上可能需要互相等待或互相交换信息 ,这种相互(xiānghù)制约关系称为进程同步。
第三十页,共一百零八页。
用TS指令(zhǐlìng)实现进程互斥
为每个临界资源(zīyuán)设置一个共享布尔变 量lock表示资源的两种状态:true表示正 被占用,false表示空闲。算法如下: ┆ while TS(&lock); 进程的临界区代码CS ; lock=false ; 进程的其他代码; ┆
此算法不能保证实现空闲让进准则。
第十三页,共一百零八页。
算法 2的思想 (suàn fǎ)
设置标志数组flag[ ]表示进程是否(shì 在 fǒu) 临界区中执行,初值均为假。
在每个进程访问临界资源之前,先检查 另一个进程是否在临界区中,若不在则 修改本进程的临界区标志为真并进入临 界区,