进程并发与互斥.ppt
《进程并发与互斥.ppt》由会员分享,可在线阅读,更多相关《进程并发与互斥.ppt(107页珍藏版)》请在三一办公上搜索。
1、1,3.5 进程并发与互斥,3.5.1 互斥算法3.5.2 信号量(semaphore)3.5.3 同步算法3.5.4 经典的进程互斥同步问题,2,3.5.1 互斥算法,临界资源临界区的访问过程同步机制应遵循的准则,3,3.5.1.1 临界资源,进程间资源访问冲突共享变量的修改冲突(空间)操作顺序冲突(时间),在多道程序环境下各进程之间存在资源共享,进程的运行时间和空间将会受影响,进程间的制约关系 间接制约:进行竞争独占分配到的部分或全部共享资源,“互斥”直接制约:进行协作等待来自其他进程的信息,“同步”,4,共享变量的修改冲突,5,操作顺序冲突,有3个进程:get,copy和put,它们对4
2、个存储区域f、s、t和g进行操作。,6,有6种可能的操作顺序,只有一种结果是正确的。,7,互斥:指多个进程不能同时使用同一个资源,为保证系统正常工作,多个并发进程在对共享的硬件或软件(如外设、共享代码段、共享数据结构)进行访问时(关键是进行写入或修改),必须互斥地进行。有些共享资源可以同时访问,如只读数据。,系统资源中每次只允许一个进程使用,而不能由多个进程同时共享的资源称为临界资源。,8,3.5.1.2 临界区的访问过程,临界区,临界资源(Critical Resources):一种一次只能为一个进程服务的资源。临界区(Critical Section):进程中访问临界资源的程序。每个使用该
3、资源的进程都要包含一个临界区。,9,临界区(critical section):进程中访问临界资源的一段代码。进入区(entry section):在进入临界区之前,检查可否进入临界区的一段代码。如果可以进入临界区,通常设置相应“正在访问临界区”标志退出区(exit section):用于将“正在访问临界区”标志清除。剩余区(remainder section):代码中的其余部分。,10,。两个进程不能同时进入访问同一临界资源的临界区,这称为进程互斥。,11,3.5.1.3 互斥机制应遵循的准则,空闲则进:当没有进程在临界区时,任何需要进入临界区的进程都允许立即进入。忙则等待:在共享同一对象的
4、所有进程中,一次只能有一个进程进入临界区。其它要求进入临界区的进程只能等待。有限等待:任何一个进程经有限时间等待后都能进入临界区,不允许出现进程“死等”的情况。让权等待:当一个进程不能进入临界区时要立即阻塞自己,释放处理机让其它进程使用,避免“忙等”。,12,1、进程互斥的软件方法,算法:加锁法,设立一个公用整型变量 key:描述允许进入临界区的标志进程在进入区循环检查是否允许进入临界区:key为1时,进程P可进入(否则是无限等待);加锁(置key为0),进入临界区;进程P退出临界区时解锁,在退出区修改允许进入标识key为1;,缺点:多个进程可能同时进入临界区。,13,算法如下:Process
5、 P(1)Process P(2)Begin begin While(key=0)do skip;While(key=0)do skip;key=0;key=0;Critical section;Critical section;key=1;key=1;end.end.,14,2、进程互斥的硬件方法,为保证第一步和第二步执行不可分离。有些机器在硬件中设置了“测试与设置”指令,,Test-and-Set指令(TS指令),该指令读出标志后设置为TRUEboolean TS(boolean*lock)boolean old;old=*lock;*lock=TRUE;return old;lock表示
6、资源的两种状态:TRUE表示正被占用,FALSE表示空闲,15,互斥算法(TS指令),利用TS实现进程互斥:每个临界资源设置一个公共布尔变量lock,初值为FALSE在进入区利用TS进行检查:有进程在临界区时,重复检查;直到其它进程退出时,检查通过;,16,Swap指令(或Exchange指令),交换两个字(字节)的内容void SWAP(int*a,int*b)int temp;temp=*a;*a=*b;*b=temp;,17,互斥算法(Swap指令),利用Swap实现进程互斥:每个临界资源设置一个公共布尔变量lock,初值为FALSE。每个进程设置一个私有布尔变量key,18,优点适用于
7、任意数目的进程,在单处理器或多处理器上更显其优越简单,容易验证其正确性可以支持进程内存在多个临界区,只需为每个临界区设立一个布尔变量缺点等待要耗费CPU时间,即“忙等”,不能实现“让权等待”可能产生“饿死”现象:有的进程可能永远执行不了,19,试考虑以下进程PA和PB反复使用临界区的情况:PAA:lock(key)unlock(key)Goto APBB:lock(key)unlock(key)Goto B,20,3.5.2 信号量(semaphore),3.5.2.1 信号量和P、V原语3.5.2.2 利用信号量实现互斥,多数互斥算法缺乏公平性,只有获得处理机的进程才可进行进入临界区的测试,
8、且测试结果具有偶然性。需要一个地位高于进程的管理者来解决公有资源的使用问题。OS可从进程管理者的角度来处理互斥的问题,信号量就是OS提供的管理公有资源的有效手段。信号量代表可用资源实体的数量。,21,3.5.2.1 信号量和P、V原语,为了实现进程的互斥和同步,操作系统中引进了信号量(Semaphore)的概念。信号量具有以下特性:(1)信号量是一个整形变量。2)每一个信号量表示一种系统资源的状况,其值表示该资源当前可用的数量,初值为非零。(3)每一个信号量都对应一个空或非空的等待队列。该队列就是信号量所代表的资源的等待队列。4)对信号量只能实施P、V操作,只有P、V操作原语才能改变其值。,2
9、2,信号量只能通过初始化和两个标准的原语来访问作为OS核心代码执行,不受进程调度的打断初始化资源信号量为指定一个非负整数值,表示空闲资源总数若为非负值表示当前的空闲资源数,若为负值其绝对值表示当前等待临界区的进程数,23,1P操作原语 procedure P(var s:semaphore)begin s:=s-1;if s0 then W(s);end,24,w(s)表示将调用P操作原语的进程置成等待信号量s的状态。进程执行P操作时,首先将信号量s减1,其结果若so,则该进程继续运行;若结果so则阻塞该进程,并把它插入到信号量s的等待队列中。,25,2V操作原语Procedure V(var
10、 s:semaphore)begin s:=s+1;if s0 then R(s);end,26,R(s)表示从信号量s的等待队列中释放一个进程。进程执行V操作时,首先将信号量s加1,如果so,则该进程继续执行。如果s0则释放s信号量等待队列中队首的进程,解除其阻塞状态。调用V操作的当前进程继续执行。,27,P、V操作的物理意义:执行P操作:,s:=s-1意味着把s对应的一个资源分配给调用P操作的进程,资源的数量减少一个。若s减一后其值为0,表示此类资源已全部分配给各个进程了。,28,在此之后若又有进程请求该资源,在该进程调用P操作时,s减1后成为负值,则执行W(s),该进程将转换为阻塞态并进
11、入信号量s对应的等待队列中。当信号量s为负值时,它的绝对值表示在该信号量等待队列中的进程数目。,29,执行V操作时:s:=s+1意味着调用V操作的进程释放了一个信号量s对应的资源。s加一后,若s为负值,表明s对应的等待队列中仍有等待该资源的阻塞进程,则调用R(s)释放等待队列中的一个进程。,30,被释放的进程是在执行P操作时因资源不足而进入阻塞态的,由于V操作释放了它所需的资源,它就转换为就绪态可以继续执行。,31,记录型信号量,每个信号量 s 除一个整数值s.count(计数)外,还有一个进程等待队列s.queue,其中是阻塞在该信号量的各个进程的标识,32,1.P 原语wait(s),-s
12、.count;/表示申请一个资源;if(s.count 0)/表示没有空闲资源;调用进程进入等待队列 s.queue;阻塞调用进程;,33,2.V 原语signal(s),+s.count;/表示释放一个资源;if(s.count=0)/表示有进程处于阻塞状态;从等待队列s.queue中取出一个进程P;进程P进入就绪队列;,V原语通常唤醒进程等待队列中的头一个进程,34,3.5.2.2 利用信号量实现互斥,在实现进程互斥时,信号量的初值设为1,表示中只允许一个进程进入临界区。在进程执行过程中,当进入临界区时执行P操作,在离开临界区时执行V操作,使临界区位于对同一个信号量的P操作和V操作之间。,
13、35,mutex为互斥信号量,其初值为1;在每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间必须成对使用P和V原语:遗漏P原语则不能保证互斥访问,遗漏V原语则不能在使用临界资源之后将其释放(给其他等待的进程);P、V原语不能次序错误、重复或遗漏,36,在进程互斥中使用的信号量,每个进程都可以对它实施P操作,这样的信号量又称为公用信号量。,37,s:semaphore;s:=1;进程A 进程B P(s);P(s);临界区CRA;临界区CRB;V(s);V(s);,用信号量实现两并发进程的互斥,38,s=1 0-1 0 1进程 s:=s-1 CRA s:=s+1 R(s)A P
14、(s)V(s)进程 s:=s-1 W(s)阻塞等待 CRB s:=s+1 B P(s)V(s)-t1-t2-t3-t4-,39,3.5.3 进程同步1、同步概念,直接制约 一组并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程消息(事件)进程互相给对方进程发送执行条件已经具备的信号同步 一组并发进程,因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步,40,PC(计算进程):A:计算得到计算结果Buf 计算结果GotoA,PP(打印进程):B:打印 Buf中的数据清除 Buf中的数据GotoB,41,一般来说,可以把各进程
15、之间发送的消息作为信号量看待。与进程互斥时不同的是,这里的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关。因此,称该信号量为私用信号量(Private Semaphvre)。,42,2、同步的实现方法利用信号量来描述前趋关系,前趋关系:并发执行的进程P1和P2中,分别有代码C1和C2,要求C1在C2开始前完成;为每个前趋关系设置一个信号量 S12,其初值为0,43,s1,s2:semaphore;s1=1,s2=0;cobegin repeat T1;repeat T2;coend;,设定两个信号量s1和s2,s1的初值为1,s2的初值为0。,如上例,有两个进程T1和T2,要求T1
16、和T2同步运行,则,44,procedure T1:procedure T2:begin begin P(s1);P(s2);m1;m2;V(s2);V(s1);end;end;,45,只能由一个进程对其实施P操作的信号量称为该进程的私有信号量。s1是T1的私有信号量,s2是T2的私有信号量。在两个进程相互推进的运行过程中,哪个进程的私有信号量为1,就表示它可以向前推进。,46,3.5.4 经典互斥同步问题,生产者消费者问题(the producer-consumer problem),问题描述:若干进程通过有限的共享缓冲区交换数据。其中,“生产者”进程不断写入,而“消费者”进程不断读出;共享
17、缓冲区共有N个;任何时刻只能有一个进程可对共享缓冲区进行操作。,47,生产者进程不断生产产品并把它们放入缓冲区内,消费者进程不断从缓冲区中取走产品进行消费。当缓冲区中产品已经放满时,表示生产速度高于消费而出现了供过于求。这时,生产者进程不能再生产而必须等待产品被消费。,当缓冲区取空时,表示消费速度高于生产而出现了供不应求。这时,消费者进程不能再消费而必须等待产品的生产。生产和消费的进程必须达到同步运行,才能使供需平衡。,48,缓冲区是一个临界资源,两个进程访问缓冲区必须互斥地执行。设一个公用信号量mutex,其初值为1。,设生产者进程的私有信号量为empty,表示缓冲区中空闲位置的数目,即可以
18、容纳产品的数目,初值为n。设消费者进程的私有信号量为full,表示缓冲区内已有产品的数目,其初值为0。,49,mutex,empty,full:semaphore;mutex:=1;empty:=n;full=0;cobegin producer:begin L1:produce a product;P(empty);P(mutex);Add to buffer;V(full);V(mutex);goto L1;end;,50,consumer:begin L2:P(full);P(mutex);take one from buffer;V(empty);V(mutex);consume pr
19、oduct;goto L2;end;coend;,51,采用信号量机制:full是“满”数目,初值为0,empty是“空”数目,初值为N。实际上,full和empty是同一个作用,始终有full+empty=Nmutex用于访问缓冲区时的互斥,初值是1 每个进程中各个P操作的次序是重要的:先检查资源数目,再检查是否互斥否则可能死锁(为什么?),52,无论是生产者进程还是消费者进程,其中V操作的次序是无关紧要的,但P操作的次序不能颠倒。,53,读者写者问题(the readers-writers problem),问题描述:对共享资源的读写操作,任一时刻“写者”最多只允许一个,而“读者”则允许多
20、个“读写”互斥,“写写”互斥,“读读”允许,54,采用信号量机制:mutex互斥信号量:实现读者与写者、写者与写者之间的互斥,初值是1。Rcount读者共享的变量:表示“正在读”的进程数,初值是0;Rmutex表示对Rcount的互斥操作,初值是1。,55,哲学家用餐问题,在该问题中设想有5位哲学家,他们共同坐在一张餐桌前用餐,用餐过后开始思考问题。他们的生活方式可描述为一个单调的循环:思考-饥饿-用餐-再思考。已知餐桌上摆的是面条,每个人必须左右手各拿到一把叉子才可以开始进餐。而餐桌上只有5把叉子,任两个哲学家之间有一把,见图所示。,56,第i位哲学家的行为过程可描述为下面的形式。Proce
21、ss Philosopher(i)Begin While(true)Begin Thinking();P(mutexi);/请求左叉子 P(mutexi+1 mod 5);/请求右叉子 Eating();/用餐过程 V(mutexi);/释放左叉子 V(mutexi+1 mod 5);/释放右叉子 End;End;,57,附:信号量集,一段处理代码需要同时获取两个或多个临界资源可能死锁:各进程分别获得部分临界资源,然后等待其余的临界资源,“各不相让”基本思想:在一个原语中,将一段代码同时需要的多个临界资源,要么全部分配给它,要么一个都不分配。称为Swait(Simultaneous Wait)
22、。在Swait时,各个信号量的次序并不重要,虽然会影响进程归入哪个阻塞队列,但是由于是对资源全部分配或不分配,所以总有进程获得全部资源并在推进之后释放资源,因此不会死锁。,信号量集用于同时需要多个资源时的信号量操作,1.AND型信号量集,AND型信号量集用于同时需要多种资源且每种占用一个时的信号量操作;,58,Swait(S1,S2,Sn)/P原语;while(TRUE)if(S1=1,59,Ssignal(S1,S2,Sn)for(i=1;i=n;+i)+Si;/释放占用的资源;for(each process P waiting in Si.queue)/检查每种资源的等待队列的所有进程;
23、从等待队列Si.queue中取出进程P;if(判断进程P是否通过Swait中的测试)/注:与signal不同,这里要进行重新判断;/通过检查(资源够用)时的处理;进程P进入就绪队列;else/未通过检查(资源不够用)时的处理;进程P进入某等待队列;,60,2.一般“信号量集”,一次需要N个某类临界资源时,就要进行N次wait操作低效又可能死锁基本思想:在AND型信号量集的基础上进行扩充:进程对信号量 Si 的测试值为 ti(用于信号量的判断,即 Si ti,表示资源数量低于ti时,便不予分配),占用值为 di(用于信号量的增减,即Si=Si-di和Si=Si+di)Swait(S1,t1,d1
24、;.;Sn,tn,dn);Ssignal(S1,d1;.;Sn,dn);,一般信号量集用于同时需要多种资源、每种占用的数目不同、且可分配的资源还存在一个临界值时的处理,61,一般“信号量集”的几种特定情况:Swait(S,d,d)表示每次申请d个资源,当少于d个时,便不分配;Swait(S,1,1)表示互斥信号量;Swait(S,1,0)作为一个可控开关当S=1时,允许多个进程进入临界区;当S=0时,禁止任何进程进入临界区;一般“信号量集”未必成对使用Swait和Ssignal如:一起申请,但不一起释放;,62,独木桥问题:某一条河上有一座独木桥,有人从北向南过桥,有人自南向北过桥,由于独木桥
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 并发

链接地址:https://www.31ppt.com/p-5320206.html