收藏 分享(赏)

进程同步与互斥.ppt

上传人:wspkg9802 文档编号:7979495 上传时间:2019-06-02 格式:PPT 页数:125 大小:1.20MB
下载 相关 举报
进程同步与互斥.ppt_第1页
第1页 / 共125页
进程同步与互斥.ppt_第2页
第2页 / 共125页
进程同步与互斥.ppt_第3页
第3页 / 共125页
进程同步与互斥.ppt_第4页
第4页 / 共125页
进程同步与互斥.ppt_第5页
第5页 / 共125页
点击查看更多>>
资源描述

1、计科系姜云杰,1,进程的互斥 你要,我也要,多道程序设计带来的问题 :并发执行的多个进程可能产生互斥或同步的相互制约关系,不采取措施,可能导致结果的不可再现性。影响系统效率,而且还可以导致系统崩溃。为此,现代操作系统都在内核中设有进程的互斥同步机制,以控制并发执行的诸进程能有效的共享资源和相互合作,同时使并发程序的执行仍具有可再现性。,计科系姜云杰,2,一、 互斥的定义,所谓进程互斥,指的是对某个系统资源,一个进程正在使用它,另外一个想用它的进程就必须等待,而不能同时使用 。 进程互斥是多道程序系统中进程间存在的一种源于资源共享的制约关系,也称间接制约关系,主要是由被共享资源的使用性质所决定的

2、。,计科系姜云杰,3,这种限定进程只能互斥地访问它的资源叫临界资源(指一次仅允许一个进程使用的资源 )。 临界资源限定了使用者只能互斥地使用它。 操作系统也不能中途从抢先者手中把临界资源抢来给其他进程用。 因此,临界资源也是不可剥夺性资源。例:打印机、共享变量等。 计算机系统中可剥夺性使用的资源主要有CPU、内存和磁盘等。,计科系姜云杰,4,5,临界区:进程中访问临界资源的那段程序代码称为临界区或临界段。 使用同一临界资源的不同进程中的临界区称为同类临界区或相关临界区。 为实现对临界资源的互斥访问,应保证诸进程互斥地进入各自的临界区。 但无论采用何种方法,都应遵循临界区的使用原则,即“空则让进

3、,忙则等待,等则有限,等则让权”。,6,二、上锁和开锁原语,现代操作系统用来实现进程的互斥、同步的工具有多种,如上锁与开锁原语、信号灯机制、管程机制等。 上锁与开锁是一种最简单的进程互斥方法,它使用一个锁变量W来表示某种临界资源的状态, W=0表示资源空闲可用 W=1表示资源正被使用,7,1上锁原语:LOCK(W),L1:如果 W=1那 么转向L1; 否则W=1 返回,void lock(锁变量w) test: if (w 为1)goto testelsew=1; /*上锁*/ /* lock(w) */,1.考察锁位的值; 2.如果原来的值为0,将锁位置1; 3.如果为1,则返回第一步再次考

4、察,8,2开锁原语:UNLOCK(W),W=0; 返回,void unlock(锁变量w) w=0; /* 开锁 */ /* unlock(w) */,当进程使用完资源后,它必须将锁位置成“0”,称为开锁操作。,9,三、用上锁和开锁原语可以解决并发进程的互斥,任何欲进入临界区的进程,必须先执行上锁原语。若上锁原语顺利通过,则进程可进入临界区;当完成对临界区资源的访问后再执行开锁原语,以释放该临界资源。 即在相关进程的程序里由上锁和开锁原语紧夹着临界区,就能保证这些进程互斥地进入各自的临界区。,10,例如,甲、乙两进程要访问同一类临界资源,甲进程:其他代码;LOCK(W); 甲进程的临界区;UN

5、LOCK(W);其他代码;,乙进程:其他代码;LOCK(W); 乙进程的临界区;UNLOCK(W);其他代码;,用上锁用上锁原语和开锁原语来实现进程的互斥的确很简单,但处理机效率不高,因为上锁原语中的条件测试操作可能引起CPU“忙等”。,11,信号量机制,荷兰著名科学家,后来的计算机图灵奖获得者,E.W.Dijkstra于1965年提出了用作进程同步工具的信号量(semaphore)机制,这是一种卓有成效的进程互斥同步工具,已被广泛应用于现代计算机系统中。,计科系姜云杰,12,进程的同步(synchronism):,你等我,我也等你,多道程序系统中,许多进程之间可能存在以下两种制约关系: 1.

6、源于资源共享的间接制约关系(互斥) 2.源于合作相互的直接制约关系(同步),后者即一种合作进程在独自并发执行过程中的某些确定的时序点上“你等我,我也等你”的同步约束,前者可视为后者的特例(前面已经介绍)。,计科系姜云杰,13,1.资源共享关系很多进程之间彼此无关,它们并不知道其它进程的存在。例如在分时系统中,系统分别为每个用户(终端)建立一个进程。但这些进程既然同处于一个系统中,也就必然存在着资源共享的关系,如共享CPU和I/O设备等。此时,进程的主要任务,是保证各个进程能互斥地访问临界资源。所以,系统中的资源应该不允许用户进程直接使用,而应该由系统同一分配。例如:在仅有一台打印机的系统中,两

7、个进程提出打印请求 2.相互合作关系 例如输入进程、计算进程、打印进程合作完成一批数据的输入、计算和打印时的关系;中断响应过程;生活中下棋、看病时等化验结果等等。,计科系姜云杰,14,一、 同步的定义,进程同步:指的是两个或多个进程为了合作完成同一个任务,在执行速度或某些个确定的时序点上必须相互协调,即一个进程的执行依赖于另一个进程其合作伙伴的消息,当一个进程到达了某一确定点而没有得到合作伙伴发来的“已完成某些操作”的消息时必须等待,直到该消息到达被唤醒后,才能继续向前推进。,进程同步是多道程序系统中进程之间存在的一种主要源于进程间合作的制约关系,也称直接制约关系。,计科系姜云杰,15,父子进

8、程就是典型的合作进程 :,它们之间的同步关系有时也被形象地称为“生产者与消费者”之间的关系,“产品”(即生产者进程的输出,亦即消费者进程的输入)是它们的纽带,它们在执行过程中的某个或某些确定的时序点上有着固定的前趋后继的同步约束,即先“生产”后“消费”,这是一种“你等我”的关系。而在稍微复杂一点的进程同步问题里,合作进程间的“生产者与消费者”的关系或身份是可以经常转换的,因此,这些合作进程在执行过程中就会出现时而你等我,时而我等你的现象。,计科系姜云杰,16,进程同步和互斥间的关系:,相似处:进程的互斥实际上是进程同步的一种特殊 情况; 进程的互斥和同步统称为进程同步。 差别:进程互斥是进程间

9、共享资源的使用权 ,这种竞争没有固定的必然联系,哪个进程竞争到使用权就归那个进程使用,直到不需要使用时再归还;而进程同步则涉及共享资源的并发进程间有一种必然的联系,当进程必须同步时,即使无进程在使用共享资源时,那么尚未得到同步消息的进程也不能去使用这个资源。,17,信号量机制的基本原理是:,两个或多个进程可以利用彼此间收发的简单的信号来实现“正确的”并发执行,一个进程在收到一个指定信号前,会被迫在一个确定的或者需要的地方停下来,从而保持同步或互斥。,经典的整型信号量经记录型信号量信号量集机制,CPU忙等,造成死锁,不易死锁,可能导致资源利用率低,18,一、 信号量的概念,信号量,也叫信号灯,一

10、般是由两个成员组成的数据结构,是一个确定的二元组(S,Q) S是个具有非负初值的整型变量,表示该信号量的值,且S的值只能由定义在信号量上的P操作原语和V操作原语来改变; Q是个初始状态为空的队列。,19,另一定义:,信号量类型是个复合类型,其一个分量是个整型分量S,另一个分量是个等待队列指针Q (一个是指向PCB的指针,当多个进程都等待同一信号量时,它们就排成一个队列,由信号量的指针项指出该队列的头。),信号量通常可以简单反映出相应资源的使用情况,它与P,V操作原语一起使用可实现进程的同步和互斥。,20,信号量的定义:Type semaphore=RECORDvalue: integer;L:

11、 PCB pointer;END;VAR s: semaphore;,21,信号灯变量,S.value S. L,Var S:semaphore;,FIFO,22,*信号量的整型分量S的值的物理含义:,当S0时,表示某类可用资源的数目,或者说表示可以执行P操作而不会被阻塞的进程的数目; 当S0时,其绝对值表示信号量S的阻塞队列中的进程数,即系统中因请求该类资源而被阻塞的进程的数目,亦即被信号灯挡住的进程数目,这些进程需要别的进程发出相应的信号灯来唤醒。 另外,S的值只能由P、V操作来改变。,二、P(wait)、V(singal)操作原语,P代表荷兰语的proberen,意为“测试”; V代表荷

12、兰语的verhogen,意为“增加”。现在很多国外的文献都使用wait和signal操作(或者down和up操作)代替P、V操作。,计科系姜云杰,24,1定义在信号量S上的P(S)原语操作的算法描述为:,(1)S减1; (2)若S0,则调用P(S)的进程返回,继续执行; (3)若S0,调用者进程调用阻塞原语Block(Q),把自己插入到信号量S的阻塞队列Q中(把相应的PCB连入该信号量队列的末尾,并放弃处理机,进入等待)。,计科系姜云杰,25,P(S)操作的算法描述,26,P(wait)操作原语,Procedure wait(var s:semaphore) begins.value:=s.v

13、alue-1;If s.value0 Thenblock(s.L) End,计科系姜云杰,27,2定义在信号量S上的V(S)原语操作的算法描述为:,(1)S加1; (2)若S0 ,则调用V(S)的进程继续执行, 返回; (3)若S0 ,调用者进程调用唤醒原语Wakeup(S.L) 把信号量S的阻塞队列Q中的队首进程移出并 唤醒,返回。,计科系姜云杰,28,V(S)操作的算法描述,29,V(singal)操作原语,Procedure V(var s:semaphore) begins.value:=s.value+1;If s.value=0 Thenwakeup(s.L) End,计科系姜云杰

14、,30,规定和结论,对于信号灯变量的规定: 必须置一次初值,只能置一次初值,初值=0; 只能执行P操作和V操作,所有其它操作非法。 几个有用的结论: 当s.value=0时,s.queue为空; 当s.value0时,|s.value|为队列s.queue的长度; 当s.value初=1时,可以实现进程互斥; 当s.value初=0时,可以实现进程同步。,31,注意P(S)操作和V(S)操作的物理含义:,P(S)操作表示“等信号”,即测试一个要等的信号是否到达; V(S)操作表示“发信号”。这个信号在实现同步时就是“合作者的伙伴进程已完成前趋任务”,在实现互斥时就是“临界资源可用”。 另外,在

15、互斥问题中,每执行一次P(S)操作的含义,也可理解为进程请求一个单位的S类资源;每执行一次V(S)操作的含义,也可理解为进程释放一个单位的S类资源。,计科系姜云杰,32,三、 用P、V操作原语实现进程的互斥,用P、V操作原语实现进程的互斥也一样简单,只需在相关进程的临界区的前后分别施以P操作和V操作即可,即在相关进程的程序里由P操作和V操作原语紧夹着临界区,就能保证这些进程互斥地进入各自的临界区。 这里所用信号量的初值一般为1,表示临界资源未被占用,且其可用数目为1。 用P、V操作原语实现进程互斥的效率更高一些,因为P操作中引入了阻塞机制,所以消除了CPU忙等现象。,计科系姜云杰,33,计科系

16、姜云杰,34,一个简化的异地售票程序,假设几乎同时两地有两个乘客要购买同一班次的车票各一张,两个终端售票程序都要访问存放该次车票的数据单元Pk 假设它们都要对Pk做如下的访问操作 “若Pk1 ,则将Pk的值减1,卖出一张票,返回 否则打印无票信息,返回” 如果不加任何限制让这两个程序并发执行的话 ,结果可能会导致错误,甚至两地各卖出一张重票的现象,35,例2.1 试用P、V操作实现火车联网订票系统中北京、天津两地的两个终端售票进程发售同一班次车票的过程。,主要步骤是: (1)分析清楚题目涉及的进程间的制约关系。 (2)设置信号量(包括信号量的个数和初值, 对于同步问题还要写出信号量的物理含义)

17、。 (3)给出进程相应程序的算法描述或流程控制,并把P、V操作加到程序的适当处。,计科系姜云杰,36,北京售票终端进程:,根据顾客订票要求找到公共数据单元PK; P(S); 把PK的值读到工作寄存器R1中; 根据顾客订票数修改R1; 将R1的值回写到PK中; V(S); 售出顾客所订的票,返回;,计科系姜云杰,37,天津售票终端进程:,根据顾客订票要求找到公共数据单元PK; P(S); 把PK的值读到工作寄存器R2中; 根据顾客订票数修改R2; 将R1的值回写到PK中; V(S); 售出顾客所订的票,返回;,计科系姜云杰,38,P、V操作也都是配对出现,但对同一个信号量的P、V操作却不是同时出

18、现在每一个进程的程序里,而是分别出现在一个进程和它的合作伙伴的代码中。,二、用P、V操作原语实现进程的同步,39,解答这类进程同步问题的主要步骤也是三大步:,(1)分析清楚题目涉及的进程间的制约关系 (2)设置信号量(包括信号量的个数和初值及其物理含义). (3)给出进程相应程序的算法描述或流程控制,并把P、V操作加到程序的适当处。,计科系姜云杰,40,例2.2 生产者消费者问题,公用缓冲池,有n个缓冲区,一组生产者生产产品,一组消费者取走产品,计科系姜云杰,41,生产者消费者问题是相互合作进程关系的一种抽象,输入计算打印生产者 消费者生产者 消费者系统中使用资源的进程消费者 系统中释放同类资

19、源的进程生产者,42,问题分析:,生产者消费者之间的同步关系表现为:一旦缓冲池中所有缓冲区均装满产品时,生产者必须等待消费者提供空缓冲区;一旦缓冲池中所有缓冲区全为空时,消费者必须等待生产者提供满缓冲区。 生产者消费者之间还有互斥关系:由于缓冲池是临界资源,所以任何进程在对缓冲区进行存取操作时都必须和其他进程互斥进行。,计科系姜云杰,43,问题解答:,所用信号量设置如下: )同步信号量empty,初值为n,表示消费者已把缓冲池中全部产品取走,有n个空缓冲区可用。)同步信号量full,初值为0,表示生产者尚未把产品放入缓冲池,有0个满缓冲区可用。 )互斥信号量mutex,初值为1,以保证同时只有

20、一个进程能够进入临界区,访问缓冲池。,44,用信号量机制解决生产者消费者问题的算法描述如下:,生产者i 消费者j 生产出一产品; P(full); P(empty); P(mutex); P(mutex); 从缓冲区取出一产品; 将该产品放入缓冲区; V(mutex); V(mutex); V(empty); V(full); 消费该产品;,计科系姜云杰,45,思考1:能否将生产者的两个P操作对调?,生产者i 消费者j 生产出一产品; P(full); P(mutex) ; P(mutex); P(empty) ; 从缓冲区取出一产品; 将该产品放入缓冲区; V(mutex); V( mute

21、x) ; V(empty); V( full) ; 消费该产品;,46,思考2:能否将将消费者的两个P操作对?,生产者i 消费者j 生产出一产品; P( mutex); P( empty ) ; P( full); P( mutex ) ; 从缓冲区取出一产品; 将该产品放入缓冲区; V(mutex); V( mutex ) ; V(empty); V( full ) ; 消费该产品;,计科系姜云杰,47,思考3:能否将两个V操作对调?,生产者i 消费者j 生产出一产品; P(full); P(mutex) ; P(mutex); P(empty) ; 从缓冲区取出一产品; 将该产品放入缓冲区

22、; V(mutex); V(full) ; V(empty); V(mutex) ; 消费该产品;,计科系姜云杰,48,例2.3 读者写者问题,该问题描述的是: 一组读者与一组写者循环访问共享的同一个数据对象。 读者:指能对共享数据对象读的进程,写者:指对共享数据对象只要求写的进程。 规定:多个读者可以同时读这个数据对象,但决不允许多个写者同时对这个数据对象进行写操作,也不允许读者、写者同时访问这个数据对象。,计科系姜云杰,49,读者写者问题是共享数据对象的非合作进程关系的一种抽象,如文件管理模块中读文件、写文件等许多操作进程之间 异地售票程序也可看成是写者与写者的问题 读者写者问题是指保证一

23、个写者进程必须与其他写者或读者进程互斥地访问一个共享数据对象的同步问题。,计科系姜云杰,50,问题分析:,读者写者之间的互斥关系: 写者与写者的互斥、写者与读者的互斥。共享的数据对象为临界资源,设一个公用的初值为1的互斥信号量 RW_mutex ? 但是却实现了读者与读者的互斥。 引入一个读者计数器变量RC,来一个读者加1,走一个读者减1 读者读者之间又有了互斥关系:再设一个读者公用的初值为1的互斥信号量R_mutex 实现各个读者间互斥的访问RC,计科系姜云杰,51,问题解答:,所用信号量和其他变量设置如下: )互斥信号量RW_mutex,初值为1,用于实现写者与其他写者或读者互斥地访问共享

24、的数据对象。 )互斥信号量R_mutex,初值为1,用于实现诸读者互斥地访问读者计数器变量。 )整型变量RC,初值为0,用于对读者进行记数。,计科系姜云杰,52,用信号量机制解决读者写者问题的算法描述如下:,读者 写者 P(R_mutex); P(RW_mutex); 若RC=0则 P(RW_mutex);对数据对象进行写操作; RC加1; (RW_mutex); V(R_mutex); 读数据对象; P(R_mutex); RC减1; 若RC=0则 V(RW_mutex);V(R_mutex);,计科系姜云杰,53,例2.4 试用用信号量机制描述两人下象棋的过程。,两人下象棋的过程可以概括为

25、:一开始只能是“红先黑后”,以后两人要循环轮流走子,直至某一方获胜或双方和棋为止。这是个只有一个生产者和一个消费者的生产者消费者问题,是个典型的“你等我,我也等你”的问题。红方是总的前趋任务生产者进程,黑方是总的后继任务消费者进程,但由于下棋过程必须轮流走子,所以红黑双方的生产者消费者身份会轮流改变。棋盘则是生产者与消费者共享的缓冲。,计科系姜云杰,54,二人对弈过程是个纯粹的同步过程,解答: 所用信号量设置如下:)同步信号量hei,初值为1,表示黑方已走子,开始时可使红方先行不受阻。 )同步信号量hong,初值为0,表示红方尚未走子, 开始时可使黑方先行受阻。,计科系姜云杰,55,用信号量机

26、制描述的二人下象棋过程如下:,P(hei); P(hong); 若被黑方将死,则投子认负,结束; 若被红方将死则投子认负,结束; 若同意与黑方作和,则结束; 若同意与红方作和,则结束; 否则,根据棋局思考后走一子; 否则,根据棋局思考后走一子; V(hong); V(hei);,计科系姜云杰,56,例2.5 某小型超级市场,可容纳50人同时购物。入口处有篮子,每个购物者可拿一只篮子入内购物。出口处结帐,并归还篮子(出、入口禁止多人同时通过)。试用信号量和P、V操作写出购物者的同步算法。,这是个典型的进程互斥问题,计科系姜云杰,57,解答:,所用信号量设置如下: )互斥信号量S,初值为50,用以

27、保证最多可以有50个购物者同时进入超市。 )互斥信号量mutex,初值为1,用以保证同时只能有一个购物者进程进入出入口拿起篮子或者结帐后放下篮子。 用信号量机制给出的每个购物者购物过程的算法描述如下:,计科系姜云杰,58,购物者i进程(解法一) 购物者i进程(解法二):,P(S); P(S); P(mutex); P(mutex1); 从入口处进超市,并取一只篮子; 同左; V(mutex); V(mutex1); 进超市内选购商品; 同左 ; P(mutex); P(mutex2); 到出口结帐,并归还篮子; 同左 ; V(mutex); V(mutex2); 从出口离开超市; 同左 ; V

28、(S); V(S); 结 束. 结 束.,计科系姜云杰,59,例2.6 桌上有个只能盛得下一个水果的空盘子。爸爸可向盘中放苹果或桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定:当盘子空时,一次只能放入一个水果供吃者取用。试用信号量和P、V操作实现爸爸、儿子和女儿这三个循环进程之间的同步。,本题属于生产者消费者问题的变形,相当于一个能生产两种产品的生产者(爸爸)向两个消费者(儿子和女儿)提供产品的同步问题。因此,可参考生产者与消费者问题的解法。,计科系姜云杰,60,解答:所用信号量设置如下:,)同步信号量empty,初值为1,表示盘子是空的,即儿子或女儿已把盘中的水果取走。 )同步信号量

29、orange,初值为0,表示爸爸尚未把桔子放入盘中。 )同步信号量apple,初值为0,表示爸爸尚未把苹果放入盘中。,计科系姜云杰,61,使用信号量机制的三个进程的同步描述如下:,爸爸进程(P): 儿子进程(C1): 女儿进程(C2): P(empty); P(orange ); P(apple); 将水果放入盘中; 从盘中取出桔子; 从盘中取出苹果; 若放入的是桔子, V(empty); V(empty); 则V(orange); 吃桔子; 吃苹果; 否则,V(apple);,计科系姜云杰,62,例2.7 设A、B两点之间是一段东西向的单行车道,现在要设计一个AB路段自动管理系统,管理规则如

30、下:当AB间有车辆在行驶时同方向的车可以同时驶入AB段,但另一方向的车必须在AB段外等待;当AB段之间无车辆行驶时,到达AB段的任一方向的车都可进入AB段,但不能从两个方向同时驶入,即只能有一个方向的车驶入;当某方向在AB段行驶的车辆驶出了AB段且暂无车辆进入AB段时,应让另一方向等待的车辆进入AB段行驶。试用信号量和P、V操作管理AB路段车辆的行驶。,计科系姜云杰,63,解答:所用信号量和其他变量设置如下:,)整型变量Car_A,初值为0,用于对从A点(东)驶入AB段的车辆进行记数。 )整型变量Car_B,初值为0,用于对从B点(西)驶入AB段的车辆进行记数。 )互斥信号量mutex,初值为

31、1,用于实现不同方向的第一辆车互斥驶入AB路段。 )互斥信号量ma,初值为1,用于实现东西向的车互斥地访问计数器变量Car_A。 )互斥信号量mb,初值为1,用于实现西东向的车互斥地访问计数器变量Car_B。,计科系姜云杰,64,通过AB路段向西行驶的车辆i 向东行驶的车辆j,P(ma); P(mb); 若Car_A=0则 P(mutex); 若Car_B=0则 P(mutex); Car_A加1; Car_B加1; V(ma); V(mb); 车辆从A点通过AB路段到达B点; 车辆从B点通过AB路段到达A点; P(ma); P(mb); Car_A减1; Car_B减1; Car_A=0则

32、V(mutex); Car_B=0则 V(mutex); V(ma); V(mb);,计科系姜云杰,65,总结上述几个有趣的实例的解题过程,可以得出这样的结论:,实现进程的同步互斥实际就是给进程的并发执行增加一定的限制,以保证被访问的共享数据的完整性和进程执行结果的可再现性。,计科系姜云杰,66,用信号量机制解这类题的三个步骤:,(1)分析进程间的制约关系 (2)设置信号量 (3)实施P、V操作。 第一步是基础、关键,第三步是核心。 掌握实现进程互斥与进程同步的第三步在形式上差异:即P、V操作总是配对出现的。 但P,V在互斥问题中总是出现在同一个进程的代码中,且紧紧夹着临界区;而在同步问题中,

33、却是分别出现在两个合作进程的代码中,需要等消息的一方用P操作,相应的对同一信号量的V操作则在发出此消息的另一方中。,计科系姜云杰,67,练习题:,1、有两个用户进程A和B,在运行过程中都要使用系统中的一台打印机输出计算结果。 试说明A、B两进程之间存在什么样的制约关系? 为保证这两个进程能正确地打印出各自的结果,请用信号量和P、V操作写出各自的有关申请、使用打印机的代码。要求给出信号量的含义和初值。,计科系姜云杰,68,解:(1) A、B两进程之间存在互斥的制约关系。因为打印机属于临界资源,必须一个进程使用完之后另一个进程才能使用。,(2)mutex:用于互斥的信号量,初值为1。进程A 进程B

34、. . P(mutex) P(mutex)申请打印机 申请打印机使用打印机 使用打印机V(mutex) V(mutex) ,计科系姜云杰,69,2、 有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问: (1) 为描述读者的动作,应编写几个程序,设置几个进程? (2) 试用PV操作描述读者进程之间的同步关系。,计科系姜云杰,70,分析: 读者的动作都是一样的:登记进入阅览室,阅读,撤消登记离开阅览室,因此可写一个程序,设n(n100)个进程。 读者共享的资源有阅览室的座位和登记表,因此诸个读者进程之

35、间有两种互斥制约关系,需设2个信号量来实现: seat:用于实现诸读者对阅览室的空闲座位的互斥竞争,初值为100; mutex:用于实现诸读者对登记表的互斥访问,初值为1。下面给出一种解法,当然还有其他解法(比如借鉴经典的读者写者问题的解法,利用读者计数器变量)。,计科系姜云杰,71,解:(1)可写一个程序,设n(n100)个进程 (2)读者进程readeri(i=1,2,3,)描述如下:,P(seat); /*申请空座位*/ P(mutex); /*申请登记*/ 登记; V(mutex) /*允许其他读者登记*/阅读; P(mutex); /*申请撤消登记*/ 撤消登记; V(mutex);

36、 /*允许其他读者撤消登记*/V(seat); /*释放座位,允许他人进入*/,计科系姜云杰,72,2.7进程通信(communication),进程之间的信息交换称为进程通信。 合作进程间所交换的信息量,少则是一个状态或数据,多则成千上万字节的。 按通信所交换的数据量多少进程通信分为低级和高级两种方式。,计科系姜云杰,73,低级通信:在进程间交换数据量少的进程通信方式。一般只传送一个和几个字节的信息,达到控制进程执行速度的作用(例如进程的同步与互斥)。信号量机制就是一种低级通信方式,它作为同步工具是卓有成效的,但作为通信工具则不够理想。(传输效率低。通信对用户不透明) 高级通信:用户可以直接

37、利用操作系统所提供的一组通信命令,高效地传送大量数据的一种通信方式。 (传输效率高。通信过程对用户是透明的),计科系姜云杰,74,目前,三种基本的进程通信方式:,根据通信实施的方式和数据存取的方式,分为: =共享存储器系统包括共享内存变量(如信号量机制)和共享内存区两种通信方式。 =消息传递系统包括消息缓冲和信箱两种通信方式。 =管道通信方式,共享存储器系统,计科系姜云杰,75,P1,P2,OS提供: (1)公共内存 (2)互斥同步机制,消息传递系统,计科系姜云杰,76,P1,P2,M,send,receive,直接:进程-进程 间接:进程-信箱-进程,直接方式,对称形式(sender and

38、 receiver name each other) send(R,message) receive(S,message),S:,R:,直接方式, receive(pid,N) ., send(R,M1) ., send(R,M2) .,非对称形式(only sender names receiver) send(R,message) receive(pid,message),C/S model,R:,S1:,S2:,计科系姜云杰,79,2.7.2 发送和接收原语实现进程通信的基本原语,发送原语(send(接收者进程名,发送区首地址) 接收原语(receive(接收区首地址)send:当要进行

39、消息传递时执行sendreceive:当接收者要接收消息时执行receive这是系统提供给用户实现进程通信的最基本的原语,也是构成一种具体的通信系统的主要内容,用户直接使用这些通信原语一次就能发送成千上万字节的信息。,计科系姜云杰,80,2.7.3 消息缓冲通信方式,消息(message):在计算机网络中又叫报文,指进程之间相互传递的赖以发生相互作用的有结构的数据。,有缓冲途径,PCB, send(R,M) size text .,PCB, receive(pid,N) .,M:,N:,msg,msg,msg,.,发送者S:,接收者R:,Message passing, direct, non

40、-symmetric, buffering,Size text sender link,载有消息的缓冲:,进程消息队列管理: Var Sm:semaphore; (0)收取消息前:P(Sm);消息入队后:V(Sm); 消息队列互斥:Var m_mutex:semaphore;(1)P(m_mutex);取(放)动作;V(m_mutex);,间接方式,Mailbox,Send_mb(mb,m),Receive_mb(mb,n),multi-sender - multi-receiver; multi-sender - one receiver,计科系姜云杰,84,2.7.4 信箱通信方式 (只了

41、解定义),所谓信箱通信方式是指连接两进程之间的一个打开的共享文件,以文件作为缓冲传输介质,一个进程向其写入消息,另一个进程从中读取消息,好象是一个管道,消息从一头流进,从另一头流出的通信方式。,计科系姜云杰,85,2.8 *死锁问题* 你不让,我也不让,在多道程序系统中,多个进程并发运行,共享资源,从而提高了资源的利用率。但是若对资源的管理和使用不当,在一定条件下会导致系统发生一种随机性故障死锁。在一些系统中,比如实时控制系统,系统一旦发生死锁将导致灾难性的后果。死锁问题是E.W.Dijkstra在1965年研究银行家算法时首次提出的,以后又由Havender、Lyach等人研究并发展。,计科

42、系姜云杰,86,2.8.1.死锁的定义,死锁(Deadlock):是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。称此时系统处于死锁状态或系统产生了死锁。 称这些永远在互相等待的进程为死锁进程。 所占用的资源或者需要它们进行某种合作的其它进程就会相继陷入死锁,最终可能导致整个系统处于瘫痪状态。,计算机系统中,如果系统的资源分配策略不当,或者更常见的是程序员写的程序有错误等,则会导致进程因竞争资源不当(往往与进程的推进速度有关)而产生死锁的现象。在计算机系统中有很多独占性的资源,在任一时刻,它们都只能被一个进程使用。常见的有打印机、

43、磁带驱动器等。例如:两个进程同时打印会引起打印混乱。鉴于此,操作系统全都具有授权一进程(临时)独占地访问某一种资源的能力。,计科系姜云杰,88,在很多情形中,需要一个进程独占地访问若干种资源而不是一种。,例如:将一个大文件由磁带拷贝至打印机,进程需要同时访问磁带驱动器和打印机,并且不允许其他进程这时访问它们。在只有一个进程的系统中,该进程可以要求任何它所需要的资源,然后进行工作。但是,在一个多道程序系统中,就有可能出现严重的问题。,计科系姜云杰,89,A、B两个进程准备打印一个大的磁带文件,A,B,R1,R2,打印机,磁带机,计科系姜云杰,90,以哲学家就餐问题为例来说明一下死锁:,该问题的描

44、述如下:有5个哲学家,围坐在圆桌旁,他们的生活方式是交替地进行思考和进餐;圆桌上间隔地摆放着5把叉子和5个装有通心粉的盘子,规定第i号哲学家固定坐在第i把椅子上(i=0,1,2,3,4),且每个哲学家必须两手分别拿起他左右两旁的那两把叉子,才能吃通心粉;假定通心粉的数量足够5个哲学家用的。,假设这5把叉子与椅子相应也按逆时针方向从0开始连续编号,即第i号哲学家左边摆着第i号叉子,右边摆着第(i+1)mod 5)号叉子,这里的mod代表模运算,即整除取余。显然,在这个问题中叉子是哲学家进餐竞争的临界资源,5把叉子应分别用一个初值为1的信号量表示,这5个信号量构成一个信号量数组S.,则第i号哲学家

45、的进餐过程可以描述如下:,哲学家(I0,1,2,3,4) 思考; P(Si); 拿起左边的叉子; P(Si1mod5); 拿起右边的叉子; 吃通心粉; 放下左边的叉子; V(Si); 放下右边的叉子; V(Si1mod5);,这种算法将产生死锁,下面就是一个不会出现死锁的哲学家进餐过程的算法描述。,哲学家(I0,1,2,3,4) 思考; P(mutex); P(Si); 拿起左边的叉子; P(Si1mod5); 拿起右边的叉子; 吃通心粉; 放下左边的叉子; V(Si); 放下右边的叉子; V(Si1mod5); V(mutex),(1)竞争临界资源当系统中供多个进程共享的临界资源(如打印机、

46、公用队列等)的数目不能满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。这个问题在多道程序系统中是无法解决的。 (2)进程推进顺序不当 进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁的产生。这个问题在多道程序系统中是可以解决的。,2.8.2 产生死锁的原因,计科系姜云杰,95,一、竞争资源引起死锁,1资源的分类:可剥夺和非剥夺性资源 可剥夺性资源: CPU和主存例如:优先权高的程可以剥夺低优先权进程的处理机。又如:内存区可由存储器管理程序把进城从一个存储区移至另外一个存储区,即剥夺了该进城原来占有的存储区,甚至可以将一进程从内存调出到外存上。 不可剥夺性资源:磁带机、打印机

47、等当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自动释放。,2竞争非剥夺性资源 两个进程分别准备打印一个非常大的磁带文件(双方都拥有部分资源,同时在请求对方已占有的资源。),3竞争临时性资源 永久性资源:打印机资源输入可顺序重复使用的资源。 临时性资源:由一个进程产生,被另一个进程使用一短暂时间后便无用的资源。,打印机R1,磁带机R2,P1,P2,计科系姜云杰,97,二、进程推进顺序不当引起死锁,资源少也未必一定产生死锁。就如同两个人过独木桥,如果两个人都要先过,在独木桥上僵持不肯后退,必然会因竞争资源产生死锁;但是,如果两个人上桥前先看一看有无对方的人在桥上,当无对方的人在桥上时自己才上桥,那么问题就解决了。所以,如果程序设计得不合理,造成进程推进的顺序不当,也会出现死锁。,

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

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

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


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

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

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