《操作系统原理》第三章进程间的并发控制和死锁课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《操作系统原理》第三章进程间的并发控制和死锁课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统原理 操作系统 原理 第三 进程 并发 控制 死锁 课件
- 资源描述:
-
1、第三章进程之间的并发控制和死锁进程通信进程通信进程的状态是进程的状态是基于一定的原因基于一定的原因和和条件条件而变而变化的,而这些原因和条件又常常是由于进化的,而这些原因和条件又常常是由于进程之间的相互制约关系引起的。系统中诸程之间的相互制约关系引起的。系统中诸进程之所以有这种关系,是由进程之所以有这种关系,是由两方面原因两方面原因引起的:引起的:各并发进程对资源的共享各并发进程对资源的共享系统中存在若干协作进程系统中存在若干协作进程1、各并发进程对资源的共享 互斥关系:通过共享资源而使进程之间产生的关系叫间接制约关系,又叫互斥关系。可用“进程资源进程”来描述。例:进程P1和P2在运行中都要使
2、用打印机,为了使各进程输出的完整性,打印机的使用必须独占。一旦系统将打印机分配给进程P1,那么进程P2必须等待,等待P1使用完打印机并释放后,才能使用。2、系统中存在若干协作进程 同步关系:同步关系:通常,一个用户作业涉及一组并发进程(输入、计算和输出进程),这些进程须相互协作完成这项任务。在运行过程中,这些进程可能要在某些同步点上等待协作者发来信息后才能继续运行。进程之间的这种制约关系叫直接制约关系。又叫同步关系。可用“进程进程”来描述进程通信:进程通信:是指进程的上述相互依赖关系。进程之间的这种相互依赖又相互制约、相互合作又相互竞争的关系,也即进程的同步与互斥关系。互斥是同步的一个特例。进
3、程之间的这种关系就叫进程的低级通信。一、进程之间的互斥一、进程之间的互斥(进程的互斥是由于共享资源而引起的)共享资源:慢速的硬件设备,如打印机、磁带机等资源软件资源,如共享变量、共享文件等临界资源(critical resource):就是一次仅允许一个进程使用的资源。如:打印机临界区(critical section):就是并发执行的进程访问临界资源的那个必须互斥执行的程序段程序程序1Y=Y+1output程序程序2Y=Y+2output内存共享区内存共享区Ypcb1pcb2 为了正确而有效地使用临界资源,系统中的并发进程需要遵循如下四个准则四个准则:空闲让进空闲让进无进程在临界区就允许进入
4、忙则等待忙则等待有进程在临界区,则等待有限等待有限等待多进程要求进入临界区是,应该让某一个进入,而不能无限等待都不让进让权等待让权等待等待的进程必须释放CPU1、关中断二、解决进程之间互斥的方法二、解决进程之间互斥的方法解决思想在临界区中防止发生进程调度保证临界区操作的完整性方法分析用户控制系统中断是非常危险的本方法对多个CPU系统将失去作用2、在原语里设置一个公共变量代表临界资源的状态。x=x=使用临界资源必须做如下三步:1、检查锁的设置2、进入临界区,访问临界区3、释放临界资源,开锁资源可用资源正在使用011,0,1x关锁:资源可用继续测试资源正在使用二、解决进程之间互斥的方法二、解决进程
5、之间互斥的方法锁机制框图测试x=0?Lockx,x=1进入临界区退出临界区Unlockx,x=0返回继续测试x=1x=0返回三、进程之间的同步三、进程之间的同步同步原因:同步原因:一组进程要合作完成一项任务。例:两个用户进程通过共享缓冲区完成其计算和打印任务。计算进程负责将计算结果送入共享缓冲区,打印进程从缓冲区取数据打印。当缓冲区空时,不允许取数据,满时不允许送数据。否则,将出现错误。计算进程与打印进程这种制约关系,不是由于两个进程同时访问共享缓冲区,而是由于它们访问缓冲区时的速度不匹配造成的。为了使进程同步,需要引入信号量机制。四、信号量四、信号量1965年,荷兰学者Dijkstra提出的
6、。基本原理:两个或多个进程可以通过简单的信号进行合作,一个进程可以被迫在某一位置停止,直到它接收到一个特定的信号。任何复杂的合作需求通过适当的信号结构得到满足。为此,需要使用一个称作为信号量的特殊变量,以便通过信号量传送信号。信号量是一个数据结构定义如下:struct semaphore int value;Pointer_PCB queue;对信号量S的操作只允许执行P、V操作。其中P/V操作由原语组成,执行过程中不可分割。P P操作原语操作原语P(S)P(S)1)S:=S 1 /请求一个资源2)If S=0,go on;if S0,go on;if Sready,go on /表示在信号链
7、表,仍有等待该资源的进程,调用唤醒原语。显然,P、V操作的引入,克服了加锁操作的忙等待现象,有效提高了系统的效率操作系统正是利用信号量的状态对进程和资源进行管理和控制的。从物理意义上理解,P操作相当于申请资源;V操作相当于释放资源。1 1、利用信号量实现进程之间的互斥引入一个互斥信号量,用mutex表示。对于互斥使用的资源,其信号量的初值为1欲进入临界区执行的进程须先对互斥信号量mutex执行P操作若已有进程占有临界资源,进程必须等待,直到临界资源空闲为止;若无进程占用,可使用它进程完成临界区操作(即临界资源使用完)后,通过执行V操作释放临界资源,供其它进程使用P/VP/V操作实现进程间互斥输
8、入进程输入进程AP(s)读消息到缓冲区读消息到缓冲区V(s)输出进程输出进程BP(s)从缓冲区取走消息从缓冲区取走消息V(s)用信号量可以方便地解决n个进程互斥地使用临界区的问题。信号量的取值范围是+1(1-n)。信号量的值为负时,说明一个进程正在临界区执行,其它的正排在信号量等待队列中等待,等待的进程数等于信号量值的绝对值例:若P、V操作的信号量初值为1,当前值为-3,则表示3个等待进程。2 2、利用信号量实现进程之间的同步、利用信号量实现进程之间的同步是指相互合作的一组共行进程,各自以独立的,不可预知的速度向前推进,在前进过程中彼此之间需要相互协调步伐,才能更好地完成统一项任务。这些进程互
9、相合作,在一些关键点上可能需要互相等待或互通消息。为了解决进程的同步,同样也可以引入信号量P/VP/V操作实现进程间同步操作实现进程间同步用信号量实现计算进程与打印进程之间的同步过程。假定计算进程和打印进程共同使用。当时,计算的结果没有送入缓冲区,打印进程不能执行打印操作。一旦计算机把计算结果送入缓冲区后,就应给打印进程打印进程收到该信号后,便可从缓冲区取出计算结果进行打印。在,计算进程也不能把下一次的计算结果送入缓冲区。只有在打印进程打印完缓冲区中的内容,计算进程才能将下一次的计算结果送入缓冲区。因此,计算进程和打印进程也是同步的。为此,引入两个同步信号量s1和s2。S1:表示缓冲区是否空,
10、s1的初值为1;S2:表示缓冲区中是否有可供打印的计算结果,其初始值为0。计算进程计算进程(Pc)(Pc)和打印进程打印进程(Pp)(Pp)之间的同步算法如下:intint s1,s2;s1,s2;s1=1;s2=0;s1=1;s2=0;void void Pc()/Pc()/*计算进程计算进程*/while(TRUEwhile(TRUE)computer next number computer next number p(s1);p(s1);add the number to buffer add the number to buffer v(s2);v(s2);void Pp()/voi
11、d Pp()/*打印进程打印进程 */while(TRUEwhile(TRUE)p(s2);p(s2);take next number from buffer take next number from buffer v(s1);v(s1);print the number print the number void main()void main()parbegin(Pc,Ppparbegin(Pc,Pp););两个经典的同步两个经典的同步/互斥问题互斥问题-生产者和消费者问题假定有一组生产者和一组消费者进程,通过假定有一组生产者和一组消费者进程,通过一个有界缓冲区发生联系一个有界缓冲区发
12、生联系。正常情况下,生产者将生产的产品放入缓冲区,消费者从缓冲区取用产品。当缓冲区满时,生产者要等消费者取走产品后才能向缓冲区放下一个产品;当缓冲区空时,消费者要等生产者放一个产品入缓冲区后才能从缓冲区取下一个产品。inout01n-1同步问题:同步问题:生产者进程不能往生产者进程不能往“满满”的缓冲区中放置产品的缓冲区中放置产品 消费者进程不能从消费者进程不能从“空空”的缓冲区中取产品的缓冲区中取产品 设有界缓冲区的容量为设有界缓冲区的容量为n n。为了正确地存取缓冲区,要求各生产者与消费者进程互斥地使用缓冲区互斥地使用缓冲区。为此,要设两个同步两个同步信号量信号量分别标识生产者进程和消费者
13、进程能否正确前进的标志。用empty表示空缓冲个数,初值为n;用full表示装满产品的缓冲个数,初值为0。再设置一个互斥使用临界区的信号量mutex,初值为1。两者的同步算法如下:生产者消费者算法生产者消费者算法-1-1var mutex,empty,full:semaphore;mutex:=1;实现互斥访问的互斥信号量empty:=n;full:=0;空缓冲区和装满产品的缓冲区的个数buffer:array0.n-1 of product;环形队列缓冲区in,out,goods:integer in:=0;out:=0;指向空缓冲区和装满产品的缓冲区begin cobegin 并发进程 p
14、roducer和consumer producer;consumer;coend end生产者消费者算法生产者消费者算法-2-2procedure producer;生产者 begin while true do beginproduce next product;生产一个产品productP(empty);请求将产品存入空的缓冲区P(mutex);请求独占使用缓冲区资源buffer(in):=product;产品送入空缓冲区in:=(in+1)mod n;in指针移动到下一个空缓冲区V(mutex);释放使用缓冲区资源V(full);有产品的缓冲区增加一个 endend;生产者消费者算法生产
15、者消费者算法-3-3procedure consumer;消费者进程 begin while true do beginP(full);请求消费缓冲区中的资源P(mutex);请求独占使用缓冲区资源goods:=buffer(out);将out所指向的缓冲区产品送goodsout:=(out+1)mod n;out移动到下一个装满产品的缓冲区V(mutex);释放使用缓冲区资源V(empty);空缓冲区增加一个consume product;endend;P P、V V操作的次序问题操作的次序问题无论是生产者还是消费者,的顺序是重要的。应该将互斥使用的信号量的P操作放在紧挨临界区的位置,如果把
16、生产者进程中的两个P操作,当缓冲区时,生产者欲向缓冲区放产品时,将在P(empty)上等待,但它已得到了使用缓冲区的权力。若此后,消费者欲取产品时,由于申请使用缓冲区不成功,它将在P(mutex)上等待。从而导致生产者等待消费者取走产品,而消费者却在等待生产者释放缓冲区,这种相互等待是无休止的,从而造成。一般来说,所以,但P原语则不然,如果次序混乱,将会造成进程之间的死锁。两个经典的同步两个经典的同步/互斥问题互斥问题读者与写者问题 有一个许多进程共享的数据区,对共享资源的读写操作,任一时刻“写者”最多只允许一个,而“读者”则允许多个:若一个写进程正在写,禁止任何进程读。一次只有一个写进程可以
17、往数据区中写;任意多的读进程可以同时读这个数据区;解决读者解决读者/写者问题,需设置两个信号量:写者问题,需设置两个信号量:(1)读互斥信号量rmutex,用于使读者互斥地访问共享变量count,这里count是记录有多少读者正在读;(2)写互斥信号量wmutex,用于实现读写互斥和写写互斥地访问共享文件。读者、写者问题算法读者、写者问题算法1 1varvar rmutexrmutex,wmutex:semaphorewmutex:semaphore;rmutexrmutex:=1;:=1;wmutexwmutex:=1:=1count:integercount:integercount:=0
18、count:=0beginbegin cobegincobegin 并发进程并发进程 readerreader和和writerwriter reader;reader;writer;writer;coendcoend endend 读者、写者问题算法读者、写者问题算法2 2procedure reader;procedure reader;beginbegin P(rmutexP(rmutex););count:=count+1;count:=count+1;if count=1 then if count=1 then P(wmutexP(wmutex););第一个读者开始访问就禁止写者第一
19、个读者开始访问就禁止写者访问访问 V(rmutexV(rmutex););读文件;读文件;P(rmutexP(rmutex););count:=count-1;count:=count-1;if count=0 then if count=0 then V(wmutexV(wmutex););没有读者访问就允许写者访问没有读者访问就允许写者访问 V(rmutexV(rmutex)endend 读者、写者问题算法读者、写者问题算法3 3procedure writer;procedure writer;beginbegin P(wmutexP(wmutex););写文件;写文件;V(wmutex
20、V(wmutex););endend五、管程五、管程(monitor)(monitor)用信号量可实现进程间的同步,但由于信号量的控制分布在整个程序中,其正确性分析很困难。管程是管理进程间同步的机制,它保证进程互斥地访问共享变量,并方便地阻塞和唤醒进程。管程可用函数库的形式实现。相比之下,管程比信号量好控制。信号量同步的缺点信号量同步的缺点同步操作分散:同步操作分散:信号量机制中,同步操作分散在各个进程中,使用不当就可能导致各进程死锁(如P、V操作的次序错误、重复或遗漏)易读性差:易读性差:要了解对于一组共享变量及信号量的操作是否正确,必须检查整个系统或者并发程序;不便于维护和修改:不便于维护
展开阅读全文