收藏 分享(赏)

操作系统第3章-2 进程的同步与互斥.ppt

上传人:hskm5268 文档编号:7967057 上传时间:2019-05-31 格式:PPT 页数:45 大小:255KB
下载 相关 举报
操作系统第3章-2 进程的同步与互斥.ppt_第1页
第1页 / 共45页
操作系统第3章-2 进程的同步与互斥.ppt_第2页
第2页 / 共45页
操作系统第3章-2 进程的同步与互斥.ppt_第3页
第3页 / 共45页
操作系统第3章-2 进程的同步与互斥.ppt_第4页
第4页 / 共45页
操作系统第3章-2 进程的同步与互斥.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、1,2019/5/31,第3章 进程管理,3.1 进程的引入3.2 进程的结构3.3 进程控制3.4 进程的同步与互斥3.5 进程间通信 3.6 进程调度3.7 死锁3.8 线程,2,2019/5/31,两种制约关系,直接相互制约关系(同步) 间接相互制约关系(互斥) 产生的原因 进程合作 资源共享,3,2019/5/31,进程的同步(1),直接相互制约关系(同步)指系统中一些进程需要相互合作,共同完成一项任务,这种协作进程之间相互等待对方消息或信号的协调关系称为进程同步.具体说,并发进程在一些关键点上可能需要互相等待与互通消息,进程间的相互联系是有意识的安排的。 产生的原因 进程合作,4,2

2、019/5/31,进程的同步(2),一般同步问题有两类 保证一组合作进程按逻辑需要的执行次序执行【例】司机 P1 售票员 P2 REPEAT REPEAT 启动 关门 正常运行 售票 到站停 开门 UNTIL FALSE UNTIL FALSE 保证共享缓冲区(共享数据)的合作进程的同步【例】,5,2019/5/31,进程的互斥,是解决进程间竞争关系(间接制约关系)的手段。 间接相互制约关系(互斥)是指若干个进程同时竞争一个需要互斥使用的资源时,任何时刻最多允许一个进程去使用,其他要使用该资源的进程必须等待,直到该资源被释放。进程间要通过某种中介发生联系,是无意识安排的。 产生的原因 资源共享

3、 互斥是一种特殊的同步 逐次使用互斥资源,也是对进程使用资源次序上的一种协调。,6,2019/5/31,临界资源,临界资源系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量。 硬件临界资源:打印机、磁带机 软件临界资源:只能排它使用的变量、表格、队列,7,2019/5/31,临界资源实例,二人合作存款count=100;PA S1:N=count;S2:N=N+100;S3:count=N;,PB S4:M=count;S5:M=M+200;S6:count=M;,执行情况: (1) PA PB ,PB PA count=400 (2) S1 PBS2S3 cou

4、nt=200 (3) S4 PAS5S6 count=300 因count是一个互斥性使用的变量,是一个临界资源,8,2019/5/31,临界区,临界区(临界段)在进程中访问临界资源的那段代码区。 例子,9,2019/5/31,具有临界资源的进程结构, /*进入区*/critical section; /*临界区*/*退出区*/remainder section; /*剩余区*/,entry section,exit section,10,2019/5/31,访问临界区应遵循的原则,空闲让进当无进程在临界区时,任何有权使用临界区的进程可进入。 忙则等待不允许两个以上的进程同时进入临界区。 有限

5、等待任何进入临界区的要求应在有限的时间内得到满足。 让权等待不能进入临界区的进程应放弃占用CPU。,11,2019/5/31,临界区互斥解决方法,硬件 缺点:成本高 软件 用编程解决 缺点:(1)忙等待(2)实现过于复杂,需要高的编程技巧 信号量机制,12,2019/5/31,信号量机制,信号量只能由P、V操作对其进行操作的变量。 信号量的使用应注意 必须置一次且只能置一次初值。 初值只能为非负整数,实现互斥时初值为1。 只能执行P、V操作。,13,2019/5/31,P、V操作,P(S):表示申请一个资源 。V(S):表示释放一个资源。P、V操作必须成对出现,有一个P操作就一定有一个V操作。

6、,14,2019/5/31,整型信号量,整型信号量 信号量S:整型量,除初始化外仅能通过P、V操作访问 P和V操作原语定义:var S:integer; S=1;P(S): while S 0 do no-opS = S -1;V(S ):S = S +1;,一类资源,抽象成,S(信号量),整型量,15,2019/5/31,利用整型信号量实现进程互斥,P(S),V(S),P1,P2,互斥区,P(S),V(S),16,2019/5/31,记录型信号量,记录型信号量 信号量S:记录型数据结构,一个分量为整型量value,另一个分量为信号量队列 L; 信号量的物理含义当S.value0:表示可用资源

7、个数当S.value0:表示可用资源正好用完当S.value0:表示等待该类资源的进程数,17,2019/5/31,struct semaphore int value;int *L; void P(struct semaphore S); S.value = S.value 1; /* 把信号量减去1 */if S.value 0 then block(S.L);/* 若信号量小于0,则调用P(S)的进 程被置成等待信号量S的状态 */ 物理意义:申请一个资源,如果申请成功,则返回;如果申请不成功,则挂在该资源的等待队列上。void V(struct semaphore S); S.valu

8、e = S.value + 1; /* 把信号量加1 */if S.value = 0 then wakeup(S.L);/* 若信号量小于等于0,则释放一个等待信号量s的进程 */ 物理意义:归还一个资源,如果没有进程等待该资源,则返回;如果有进程在等待,把等待的进程从L上移到就绪队列。,记录型信号量描述,18,2019/5/31,利用记录型信号量实现进程互斥,P(mutex),V(mutex),P1,P2,互斥区,P(mutex),V(mutex),19,2019/5/31,信号量及P、V操作讨论(1),信号量的物理含义: S .value 0: 表示有S .value个资源可用S .va

9、lue =0: 表示无资源可用S .value 0: 则| S .value|表示等待队列中的进程个数 信号量的初值应该大于等于0,20,2019/5/31,P、V操作讨论(2),P(S):表示申请一个资源 V(S):表示释放一个资源。P、V操作必须成对出现,有一个P操作就一定有一个V操作 P、V操作的优点简单,而且表达能力强,可解决任何互斥问题 P、V操作的缺点不够安全,P、V操作使用不当会出现死锁,遇到复杂互斥问题时,实现复杂。,21,2019/5/31,用P、V操作实现互斥,信号量初值为1 对于两个并发进程,互斥信号量的值仅取1、0和-1三个值 : 若mutex.value1表示没有进程

10、进入临界区 若mutex.value0表示有一个进程进入临界区 若mutex.value -1表示一个进程进入临界区,另一个进程等待进入。,22,2019/5/31,利用P、V操作实现两个进程互斥的模板如下:struct semaphore mutex;mutex.value=1; mutex.L=nil;cobeginProcess P1:BeginMP(mutex);临界区1V(mutex);MEnd Process P2:BeginMP(mutex);临界区2V(mutex);MEndcoend,23,2019/5/31,使用PV操作实现互斥应注意,识别临界资源 是否被共享; 是否有排它

11、性使用要求。临界区代码应尽量短小,不能有死循环。 P和V原语应分别紧靠临界区的头尾。 P、V操作在同一进程中必须成对出现。,24,2019/5/31,思考题,用记录型信号量解决二人存款问题,用类C语言编写进程互斥算法。,25,2019/5/31,用P、V操作实现进程的同步,只要信号量初值是一个大于等于0的整数就能达到同步的目的,就可以直接使用P、V操作实现同步 互斥是一种特殊的同步P、V操作既可以实现互斥,也可以实现同步,利用信号量实现进程同步的实例,设有三个并发执行的进程P1、P2、P3,其前趋图如下,试用信号量实现这三个进程同步。设两个同步信号量S1、S2分别表示进程P2、P3能否开始执行

12、 struct semaphore S1,S2=0,0; /*初值均为0*/cobeginP1: V(S1); V(S2); P2: P(S1); ; P3: P(S2); ; coend,P1,P3,P2,27,2019/5/31,使用PV操作实现同步应注意,信号量的设置信号量的初值 PV操作要成对出现,并在不同的进程中,28,2019/5/31,信号量及P、V操作讨论(3),(1) P、V操作必须成对出现,有一个P操作就一定有一个V操作 (2) 当为互斥操作时,它们同处于同一进程当为同步操作时,则不在同一进程中出现 (3) 如果P(S1)和P(S2)两个操作在一起,那么P操作的顺序至关重要

13、。一个同步P操作与一个互斥P操作在一起时,同步P操作在互斥P操作前,而两个V操作无关紧要。,29,2019/5/31,PV操作实现互斥与同步的模板,进程互斥S初值为1P1 P2P(S) P(S)临界区1 临界区2V(S) V(S)在P1与P2中设置相同的P、V操作,进程同步S1初值为n, S2初值为0P1 P2P(S1) P(S2)段1 段2V(S2) V(S1),30,2019/5/31,经典的进程同步问题,生产者/消费者问题 读者/写者问题 哲学家进餐问题,31,2019/5/31,生产者/消费者问题,生产者消费者问题是一种同步问题的抽象描述。计算机系统中的每个进程都可以消费(使用)或生产

14、(释放)某类资源。这些资源可以是硬件资源,也可以是软件资源。当某一进程使用某一资源时,可以看作是消费,称该进程为消费者。而当某一进程释放某一资源时,它就相当于生产者。,32,2019/5/31,生产者/消费者问题(描述),通过一个公用缓冲池可以把一群生产者p1,p2,pm,和一群消费者Q1,Q2,Qn联系起来。如图: 只要缓冲区未满,生产者就可以把产品送入缓冲区; 只要缓冲区未空,消费者就可以从缓冲区中取走物品。,33,2019/5/31,生产者/消费者问题(图示),34,2019/5/31,生产者/消费者问题(分析),为解决生产者消费者问题,应该设两个同步信号量,一个说明空缓冲区的数目,用e

15、mpty表示,初值为缓冲池的大小N,另一个说明已用缓冲区的数目,用full表示,初值为。 由于在此问题中有i个生产者和j个消费者,它们在执行生产活动和消费活动中要对缓冲池进行操作。由于缓冲池是一个临界资源,必须互斥使用,所以,另外还需要设置一个互斥信号量mutex,其初值为。 struct semaphone empty=n, full=0, mutex=1;void buffern-1;int in=, out=0;,35,2019/5/31,生产者/消费者问题(解决),Consumerj:while(1)P(full);P(mutex);从Bufferout取产品;out = (out+1

16、) mod n;V(mutex);V(empty);消费产品; coend;,cobegin procedurei: while(1) 生产产品; P(empty); P(mutex);往Buffer in放产品;in = (in+1) mod n;V(mutex); V(full); ,36,2019/5/31,生产者/消费者问题(思考),在生产者进程和消费者进程中,两个P操作的执行顺序是否能交换?两个V操作的执行顺序是否能交换?,37,2019/5/31,思考题,两个进程合作完成数据计算和打印工作,计算进程未计算完就不可打印,反之也然,双方共用一个缓冲区,写出此算法。,38,2019/5/

17、31,读者/写者问题,有两组并发进程: 读者和写者,共享一个数据文件要求: 允许多个读者同时执行读操作 不允许读者、写者同时操作 不允许多个写者同时操作,39,2019/5/31,读者/写者问题,如果读者来: 1)无读者、写者,新读者可以读 2)有写者等,但有其它读者正在读,则新读者也可以读 3)有写者写,新读者等如果写者来: 1)无读者、写者,新写者可以写 2)有读者,新写者等待 3)有其它写者,新写者等待,40,2019/5/31,读者写者问题的解法,为实现读者和写者、写者和写者之间的互斥,设置一个互斥信号量Wmutex=1 由于“读读”允许,再设置一个整型变量Readcount表示正在读

18、的进程数,初值Readcount=0 由于Readcount是一个可被多个读者进程访问的临界资源 ,所以要为它设置一个互斥信号量Rmutex=1 读者写者算法如下:,读者: P(Rmutex);if readcount=0 then P(Wmutex);Readcount= Readcount+1;V(Rmutex);读P(Rmutex);Readcount= Readcount-1;if Readcount=0 then V(Wmutex);V(Rmutex); ,写者:P(Wmutex);写V(Wmutex);,41,2019/5/31,哲学家就餐问题,有五个哲学家围坐在一圆桌旁,桌中央有

19、一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。 每个哲学家的行为是思考,感到饥饿,取筷子,然后吃通心粉,放筷子,思考。 为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。 筷子是临界资源,要用5个互斥信号量来表示这5只筷子。,42,2019/5/31,哲学家就餐问题解,设fork5为5 个信号量,初值均为1 struct semaphore fork 4;forki:= 1; Philosopheri: While(1) 思考;P(forki); P(fork(i+1) mod 5);进食;V(forki); V(fork(i+1) mod 5)

20、; ,以上解法会出现死锁,为防止死锁发生可采 取的措施: 最多允许4个哲学家同时坐在桌子周围 给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反 仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子(),43,2019/5/31,思考题,桌子上有一只盘子,每次只能放入一只水果。爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个儿子专等吃盘中的桔子,一个女儿专等吃盘中的苹果。请利用P、V操作写出父亲、母亲、儿子、女儿进程的同步算法。,44,2019/5/31,思考题,分析:在本题中,应设置三个信号量s、so、sa, 信号量s表示盘子是否为空,其初值为1; 信号量so表示盘中是否有桔子,其初值为0; 信号量sa表示盘中是否有苹果,其初值为0。同步描述如下:,45,2019/5/31,struct semaphone s=1, so=0, sa=0; cobeginfather ( );mother( );son ( );daughter ( );coend father ( )p(s);将水果放入盘中;v(sa);mother ( )p(s);将水果放入盘中;v(so);,son ( )p(so);从盘中取出桔子;v(s);吃桔子; daughter ( )p(sa);从盘中取出苹果;v(s);吃苹果; ,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报