第三章进程同步问题习题答案教学内容
- 格式:docx
- 大小:13.36 KB
- 文档页数:2
第三章进程同步与通信作业习题与答案第三章一.选择题(50题)1.以下_B__操作系统中的技术是用来解决进程同步的。
A.管道B.管程C.通道D.DMA2.以下_B__不是操作系统的进程通信手段。
A.管道B.原语C.套接字D.文映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。
A.3B.2C.1D.04.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V操作管理时信号量S的可能取值是_C__。
A.3,2,1,0,-1B.2,1,0,-1,-2C.1,0,-1,-2,-3D.4,3,2,1,05.下面有关进程的描述,是正确的__A__。
A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误D.P、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__。
A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B__。
A.没有进程进入临界区B.有1个进程进入了临界区C.有2个进程进入了临界区D.有1个进程进入了临界区并且另一个进程正等待进入8.信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__。
A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C.信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10.并发是指_C__。
A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11.临界区是_C__。
A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__。
第三章一.选择题(50题)1.以下_B__操作系统中的技术是用来解决进程同步的。
A.管道B.管程C.通道D.DMA2.以下_B__不是操作系统的进程通信手段。
A.管道B.原语C.套接字D.文件映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。
A.3B.2C.1D.04.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V 操作管理时信号量S的可能取值是_C__。
A.3,2,1,0,-1B.2,1,0,-1,-2C. 1,0,-1,-2,-3D.4,3,2,1,05.下面有关进程的描述,是正确的__A__。
A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V 操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误D.P、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__。
A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B_ _。
A.没有进程进入临界区B.有1个进程进入了临界区C. 有2个进程进入了临界区D. 有1个进程进入了临界区并且另一个进程正等待进入8. 信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__。
A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C. 信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10. 并发是指_C__。
A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11. 临界区是_C__。
A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__。
操作系统习题讲解进程的同步与互斥(三)赵俊峰P 、V 题的一般分析过程1问题的分析确定有哪些进程y1.问题的分析,确定有哪些进程;2y2.确定各个进程之间的同步互斥关系;y3.信号量的设计(初值以及用来实现哪些进程间的同步互斥、是否需要一般变量的辅助)辅助);y4、实现(避免出现不公平现象比如饥饿、避免出现死锁如P 操作的次序问题)。
同学们的问题1有几个进程进程的划分?y:有几个进程,进程的划分?y 2:if 判断语句与P/V 之间的区别?多余的判断?y 3:每个进程的行为划分?对于行为的控制?该谁去控制?触发行为的条件及被触发的行为?y 5:触发行为的条件及被触发的行为?y 6:需要全面考虑题目要求需要全面考虑题目要求y 7:什么时候需要计数?共享变量需要互斥使用y 8:共享变量需要互斥使用进程同步与互斥习题(四)请用信号量解决以下问题y 把学生和监考老师都看作进程, 学生有N 人, 考场门口每次只能进出个人教师1人. 考场门口每次只能进出一个人, 进考场原则是先来先进. 当N 个学生都进入考场后, 教师才能发卷子. 学生交卷后可以离开考场. 教师要等收上来全部卷子并封装卷子后才能离开考场.(1)(1)问共需设置几个进程?(2) 试用P 、V 操作解决上述问题中的同步和互斥关系.进程同步与互斥习题(四)共享资源:考场门口请用信号量解决以下问题y 把学生和监考老师都看作进程, 学生有N 人, 考场门口每次只能进出个人教师1人. 考场门口每次只能进出一个人, 进考场原则是先来先进.c 当N 个学生都进入考场后, 教师才能发卷子. 学生交卷后可以离开考场. d 教师要等收上来全部卷子并封离同步行为:c d 装卷子后才能离开考场.(1) ?()问共需设置几个进程(2) 试用P 、V 操作解决上述问题中的同步和互斥关系.信号量及其他变量的设置需设置以下的信号量S_Door = 1//能否进出门;S St d tR d 0学生是否到齐S_StudentReady = 0//学生是否到齐;S_Mutex1 = 1//互斥信号量;S M t 21互斥信号量S_Mutex2 = 1//互斥信号量;S_ExamBegin = 0//开始考试;S E O 0考试结束所有试卷S_ExamOver = 0//考试结束,所有试卷已交;int nStudentNum 0;int nStudentNum = 0;int nPaperNum = 0;student(){学生进程P(S_Door);进门;V(S Door);V(S_Door);P(S_Mutex1);// 增加学生的个数nStudentNum ++;if(nStudentNum N)V(S StudentReady);if(nStudentNum == N) V(S_StudentReady);V(S_Mutex1);P(S_ExamBegin);//等老师宣布考试开始考试;交卷;P(S Mutex2);P(S_Mutex2);//增加试卷的份数nPaperNum ++;if(nPaperNum == N) V(S_ExamOver);V(S Mutex2);V(S_Mutex2);P(S_Door);出门;V(S_Door);}Teacher()教师进程(){P(S_Door);进门进门;V(S_Door);P(S StudentReady);//P(S_StudentReady); 最后一个进来学生把老师唤醒;发卷子;for(i=1; i <= N; i++)(;;)V(S_ExamBegin);//开始考试;P(S_ExamOver);//等待考试结束;封装卷子P(S_Door);出门;V(S_Door);}进程同步与互斥习题(五)某商店有两种食品B A 和B, 最大数量各为m 个.该商店将A,B 两种食品搭配出售, 每次各取一个. 为避免食品变质, 遵循先到食品先出售的原则, 有两个食品公司分别不断地供应A,B 两)种食品(每次一个). 为保证正常销售, 当某种食品的数量比另一种的数量超过k(k<m)个时, 暂停对数量大的食品进货, 补充数量少的食品.◦(1)(1) 问共需设置几个进程?◦(2) 试用P ,V 操作解决上述问题中的同步和互斥关系.生产者-消费者中的消费者行为进程同步与互斥习题(五)某商店有两种食品B A 和B, 最大数量各为m 个. 该商店将A,B 两种食品搭配出售, 每次各取一个. 为避免食品变质, 遵循先到食品先出售的原则, 有两个食品公司分别不断地供应A,B 两)种食品(每次一个).为保证正常销售, 当某种食品的数量比另一种的数量超过k(k<m)个生产者-消费者中的生产者行为生产者之间时, 暂停对数量大的食品进货, 补充数量少的食品.的同步行为◦(1) 问共需设置几个进程?(2)PV ◦(2) 试用P ,V 操作解决上述问题中的同步和互斥关系.信号量及其他变量的设置设置以下的信号量 S_Mutex = 1 S Wait A = 0; S_Wait_A = 0; S_Num_A = 0; S BuffNum A = m; S_BuffNum_A = m; S_Wait_B = 0; S Num B 0; S_Num_B = 0 S_BuffNum_B = m; i t N int nNum_A = 0; A 0 int nNum_B = 0; //用于互斥访问的信号量 //A太多了,要等一等 太多了 要等一等B //食品A的空闲缓冲区个数; //B太多了,要等一等A //食品B的空闲缓冲区个数;Producer_A() A进程 { int b_TooMuch; while(1) { 生产产品; P(S_Mutex); if((nNum A nNum_B) == k) b_TooMuch = 1; if((nNum_A nNum B) == k) b TooMuch = 1; else b_TooMuch = 0; V(S_Mutex); if(b T M h) P(S W i A) //A太多了 if(b_TooMuch) P(S_Wait_A); 太多 P(S_BuffNum_A); 向商店提供一个 向商店提供 个A商品; V(S_Num_A); P(S_Mutex); nNum A ++; nNum_A ++; if(nNum_B - nNum_A == k-1) V(S_Wait_B); //可以进B了}}V(S Mutex); V(S_Mutex);Producer_B() B进程 { int b_TooMuch; while(1) { 生产产品; P(S_Mutex); if((nNum B nNum_A) == k) b_TooMuch = 1; if((nNum_B nNum A) == k) b TooMuch = 1; else b_TooMuch = 0; V(S_Mutex); if(b T M h) P(S W i B) //B太多了 if(b_TooMuch) P(S_Wait_B); 太多 P(S_BuffNum_B); 向商店提供一个 向商店提供 个B商品; V(S_Num_B); P(S_Mutex); nNum B ++; nNum_B ++; if(nNum_A - nNum_B == k-1) V(S_Wait_A); //可以进A了}}V(S Mutex); V(S_Mutex);Shop() Sh () { while(1) { P(S_Num_A); ( _Num_B); ); P(S 出售A、B食品各一个; V(S BuffNum A); V(S_BuffNum_A); V(S_BuffNum_B); } }Shop进程信号量和P、V原语的小结对信号量和P、V原语的使用可以归纳为三种情形: 第一,把信号量视为一个加锁标志位,其目的是为了 实现对某个唯一 实现对某个唯 唯一的共享数据 唯 的共享数据 共享数据的互斥访问 互斥访问,如数据库中 的某个记录,各个进程间的某个共享变量。
习题 3 进程同步与通信一、选择题题号1 2 3 4 5 6 7 8 9 10答案A D D C B C A B A A题号11 12答案D C二、综合题1、答:临界资源也称独占资源、互斥资源,它是指某段时间内只充许一个进程使用的资源。
比如打印机等硬件资源,以及只能互斥使用的变量、表格、队列等软件资源。
各个进程中访问临界资源的、必须互斥执行的程序代码段称为临界区,各进程中访问同一临界资源的程序代码段必须互斥执行。
为防止两个进程同时进入临界区,可采用软件解决方法或同步机构来协调它们。
但是,不论是软件算法还是同步机构都应遵循下述准则:①空闲让进。
②忙则等待。
③有限等待。
④让权等待。
2、答:忙等待意味着一个进程正在等待满足一个没有闲置处理器的严格循环的条件。
因为只有一个CPU 为多个进程服务,因此这种等待浪费了CPU 的时钟。
其他类型的等待:与忙等待需要占用处理器不同,另外一种等待则允许放弃处理器。
如进程阻塞自己并且等待在合适的时间被唤醒。
忙等可以采用更为有效的办法来避免。
例如:执行请求(类似于中断)机制以及PV 信号量机制,均可避免“忙等待”现象的发生。
3、答:在生产者—消费者问题中,Producer 进程中P(empty)和P(mutex)互换先后次序。
先执行P(mutex),假设成功,生产者进程获得对缓冲区的访问权,但如果此时缓冲池已满,没有空缓冲区可供其使用,后续的P(empty)原语没有通过,Producer 阻塞在信号量empty 上,而此时mutex 已被改为0,没有恢复成初值1。
切换到消费者进程后,Consumer 进程执行P(full)成功,但其执行P(mutex)时由于Producer 正在访问缓冲区,所以不成功,阻塞在信号量mutex 上。
生产者进程和消费者进程两者均无法继续执行,相互等待对方释放资源,会产生死锁。
在生产者和消费者进程中,V 操作的次序无关紧要,不会出现死锁现象。
第3章处理器管理(1) 为什么程序并发执行会产生间断性特征,并失去封闭性和可再现性?解:之所以产生间断性特征是因为多个程序在并发执行时,需要为了完成同一项任务而相互合作,并发执行的程序间的这种相互制约导致了“暂停—执行—暂停”的间断性运行规律。
失去封闭性是因为程序在并发执行时,多个程序需要共享系统中的多种资源。
所以,这些资源的状态是由多个程序改变的,从而使程序的运行失去了封闭性。
失去可再现性是因为程序在并发执行时,由于失去了封闭性,从而导致其失去可再现性。
(2) 什么是进程?为什么要在操作系统中引入进程?解:进程是可并发执行且具有独立功能的程序在一个数据集合上的运行过程,它是操作系统进行资源分配和调度的基本单位。
“进程”概念是人们为了使程序能够并发执行,并且能对并发的程序加以描述和控制而引入的。
(3) 试从并发性、独立性、动态性上比较程序和进程的不同。
解:●并发性是进程的重要特征,同时也是OS 的重要特征。
引入进程的目的正是为了使其程序能和其它进程的程序并发执行,而程序是不能并发执行的。
●独立性是指进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。
而对于未建立任何进程的程序,都不能作为一个独立的单位参加运行。
●动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程有一定的生命期;而程序只是一组有序指令的集合,是静态实体。
(4) 什么是PCB?它具有什么作用?为什么说PCB是进程存在的唯一标识?解:进程控制块(Process Control Block,PCB)是操作系统为了管理进程而设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。
它的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能和其它进程并发执行的进程.因为系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志。
第三章部分习题答案第三章部分习题答案1、⾼级调度与低级调度的主要任务是什么?为什么要引⼊中级调度?答:⾼级调度主要任务是根据某种算法,把外存上处于后备队列中的那些作业调⼊内存,也就是说⾼级调度的调度对象是作业。
低级调度主要任务是:决定就绪队列中的哪个进程应获得处理机,然后再由分派程序执⾏把处理机分配给该进程的具体操作。
中级调度的任务:使那些暂时不能运⾏的进程不再占⽤宝贵的内存资源,⽽将它们调⾄外存上去等待,把此时的进程状态称为就绪驻外存状态或挂起状态。
当这些进程重⼜具备运⾏条件且内存⼜稍有空闲时,由中级调度来决定把外存上的那些⼜具备运⾏条件的就绪进程重新调⼊内存,并修改其状态为就绪状态,挂在就绪队列上等待进程调度。
引⼊中级调度的主要⽬的是为了提⾼内存利⽤率和系统吞吐量。
2、何谓作业、作业步和作业流?答:作业(Job):作业是⼀个⽐程序更为⼴泛的概念,它不仅包含了通常的程序和数据,⽽且还应配有⼀份作业说明书,系统根据该说明书来对程序的运⾏进⾏控制。
作业步(Job Step)。
通常,在作业运⾏期间,每个作业都必须经过若⼲个相对独⽴,⼜相互关联的顺序加⼯步骤才能得到结果,我们把其中的每⼀个加⼯步骤称为⼀个作业步,各作业步之间存在着相互联系,往往是把上⼀个作业步的输出作为下⼀个作业步的输⼊。
作业流:若⼲个作业进⼊系统后,被依次存放在外存上,这便形成了输⼊的作业流;在操作系统的控制下,逐个作业进⾏处理,于是便形成了处理作业流。
5、试说明低级调度的主要功能。
答:(1) 保存处理机的现场信息。
(2) 按某种算法选取进程。
(3) 把处理器分配给进程。
6、在抢占调度⽅式中,抢占的原则是什么?答:(1) 优先权原则。
(2) 短作业(进程)优先原则。
(3) 时间⽚原则。
7、在选择调度⽅式和调度算法时,应遵循的准则是什么?答:⾯向⽤户应遵循的准则是:(1) 周转时间短。
(2) 响应时间快。
(3) 截⽌时间的保证。
(4) 优先权准则。
第3章进程的同步与通信习题与解答3.2 例题解析例3.2.1 多道程序系统程序的执行失去了封闭性和再现性,因此多道程序的执行不需要这些特性,这种说法是否正确?解这种说法不正确。
可以想象,如果一个程序在多道程序系统中,在相同的输入的情况下,多次执行所得结果是不同的,有谁还敢使用这个程序?因此,多道程序的执行也需要封闭性和再现性,只不过单道程序系统的封闭性和再现性是先天固有的,多道程序系统的程序执行要想获得封闭性和再现性,需通过程序员的精心设计才能得到。
所使用的方法就是同步和互斥的方法。
例3.2.2 多个进程对信号量S进行了5次 P操作,2次V操作后,现在信号量的值是 -3,与信号量S相关的处于阻塞状态的进程有几个?信号量的初值是多少?解(1) 因为S的当前值是-3,因此因为S处于阻塞状态的进程有3个;(2) 因为每进行一次P(S)操作,S的值都减1,每执行1次V操作S的值加1,故信号量的初值为-3+5-2=0;例3.2.3 如下锁的实现方法存在什么缺点?如何改进?LOCK(X) UNLOCK(X){ {do while X=1 ; X=0;X=1} }解存在的缺点是:当锁是关闭时,采用的是循环等待的方法,这样的等待还是要占用处理机的时间,应该采用阻塞等待的方法。
改进的锁实现如下:LOCK(X) UNLOCK(X){ {if X.value=1 if not empty(X.L) { insert( *, X.L); { P=remove(X.L);Block (*) Wakeup(P) } }else X.Value=1 else X.Value=0} }这里X.value是锁的值,X.L是存放由于锁X而阻塞的进程的队列。
insert( *, X.L)将当前进程的进程号插入到X.L,remove(X.L)是从X.L中移出一个进程号。
例3.2.4 使用多个进程计算Y=F1(X)+F2 (X).解(1) 确定并发和顺序操作在这个问题中,F1(X)和F2 (X)的计算是可以并行处理的,因此F1(X)和F2 (X)可以分别出现在两个进程中。
3.3 经典的进程同步问题3.3.1 生产者-消费者问题3.3.2 读者-写者问题3.3.3 哲学家进餐问题3.3.4 理发师问题1生产者-消费者问题生产者--消费者问题是操作系统中并发进程内在关系的一种抽象生产者进程可以是计算进程、发送进程;而消费者进程可以是打印进程、接收进程等等2生产者消费者问题①一个生产者、一个消费者共享一个缓冲区②一个生产者、一个消费者共享多个缓冲区③多个生产者、多个消费者共享多个缓冲区④多个生产者、多个消费者共享一个缓冲区⑤多个生产者、一个消费者共享多个缓冲区⑥一个生产者、多个消费者共享多个缓冲区3一个生产者、一个消费者共享一个缓冲区的解(1)var B : integer;empty : semaphore;full : semaphore;empty : = 1;full := 0;4一个生产者、一个消费者共享一个缓冲区的解(2)process consumerBeginL2:P(full);Product:= B;V(empty);Consume a product;Goto L2;end;Process producerbeginL1:Produce product;P(empty);put B product in;V(full);Goto L1;end;5多个生产者、多个消费者共享多个缓冲区的解(1)n个生产者和m个消费者,连接在一个有k个单位缓冲区的有界缓冲池上只要缓冲区未满,Pi生产的产品就可投入缓冲区;只要缓冲区不空,消费者进程Cj就可从缓冲区取走并消耗产品Pi和Cj是并发进程(i=1 n,j=1 m),Pi作为生产者生产产品,Cj作为消费者消费产品6多个生产者、多个消费者共享多个缓冲区的解(2)var B:array[0..k-1] of item;empty:semaphore:=k;full:semaphore:=0;mutex:semaphore:=1;in,out:integer:= 0;cobegin7多个生产者、多个消费者共享多个缓冲区的解(3)process producer_i process consumer_jBegin beginL1:produce a product; L2:P(full);P(empty); P(mutex);P(mutex); Product:= B[out];B[in]:= product; out:=(out+1) mod k;in:=(in+1) mod k; V(mutex);V(mutex); V(empty);V(full); Consume a product;Goto L1; Goto L2;end; end;coend9读者-写者问题有两组并发进程:读者和写者,共享一个文件F,要求:允许多个读者可同时执行读操作任一写者在完成写操作之前不允许其它读者或写者工作当有读者执行读操作时,不允许其它写者去修改(写)文件10解决读者-写者问题的思路多个读者可同时读写者与写者之间要互斥写者与读者之间要互斥即:11解决读者-写者问题的步骤(1)第一步:Begins:semaphore;S:=1;Rc:integer;Rc:=0;cobegin12解决读者-写者问题的步骤(2) Process Writerjbeginp(s);write file F;V(s) ;endProcess Readeribeginrc:=rc+1if rc=1 then p(s)read file F;rc:=rc-1;if rc=0 then v(s)endcoendend13解决读者-写者问题的步骤(3)存在问题的原因:忽略了rc也是个供多个读者共享的共享资源14解决读者-写者问题的步骤(4)解决方法:beginS,Sr:semaphore;rc:integer;S:=1; Sr:=1;rc:=0;cobegin15解决读者-写者问题的步骤(5) Process Writerjbeginp(s);write file F;V(s)end;coend;endProcess Readeribeginp(Sr);rc:=rc+1;if rc=1 then p(s);v(Sr);read file F;p(Sr);rc:=rc-1;if rc=0 then v(s);v(Sr);end16解决读者-写者问题的解释信号量Sr仅用于管理计数器rc的互斥使用17哲学家吃通心面问题(1)有五个哲学家围坐在一圆桌旁,桌中央有一盘通心面,每人面前有一只空盘子,每两人之间放一支筷子。
第3章进程管理三、实训问题参考答案⑥cx程序运行时,一个父进程和两个子进程并发运行,所以多次执行的结果并不总是一样。
⑦系统中一个父进程和一个子进程并发运行,所以多次执行的结果并不总是一样。
如果注释“/*父进程line1*/”所在行和“/*父进程line2*/”所在行交换位置,程序多次运行的结果会相同,因为wait()函数的功能是:主进程暂停执行,等待子进程结束再继续执行主进程。
习题10. 答案:A: while(TRUE){ 生产消息;P(Sab);P(Sac);向缓冲区送消息;V(Sb);V(Sc); }B: while(TRUE){ P(Sb);从缓冲区取消息;V(Sab) }C: whe(TRUE){ P(Sc);从缓冲区取消息;V(Sac) }13. 答案:设置一个信号量S,代表机房内空位数目,初值为40,用来控制进入机房的上机进程数不超过40;再设置互斥信号量mutex,代表机房门这一临界资源,其初值为1,以实现多个上机进程对其互斥访问。
P(S);P(mutex);从机房门进入V(mutex);上机P(mutex);从机房门离开V(mutex);V(S);18. 答案:(1)mutex是互斥信号量,初值为1,表示开始时无进程在临界区。
SP是同步信号量,初值为n,表示开始时有n个空的缓冲区。
SC是同步信号量,初值为0,表示开始时有0个满的缓冲区。
(2)①处填 P(mutex)②处填 V(SC) ③处填 V(mutex) ④处填 V(SP)19. 死锁是计算机系统中多道程序并发执行时,两个或两个以上的进程由于竞争系统资源,而出现的一种互相等待的现象。
不是所有的进程都停止工作。
死锁的系统中并不是所有的资源都分配完毕。
20. 目前解决死锁的基本方法有以下三种:①预防死锁②避免死锁③检测和解除死锁22. 不会。
假定该系统死锁,那么就隐含其中的每一个进程已占有一个资源并正在等待另一个资源。
由于该系统只有3个进程且有4个资源,因此必有一个进程能获得其中的2个资源。
进程同步练习1.有一阅览室,共有100个座位。
读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名。
读者离开时要消掉登记内容。
试用P、V操作描述读者进程的同步结构。
varmutex : semaphere;信号量,用于互斥full : semaphere; 信号量,用于同步table : array 0..n-1 of item; 登记表procedure reader;读者进程beginP(full);P(mutex);Register_name(table);V(mutex);Reading;P(mutex);Delet_name(table);V(mutex);V(full)end;beginseminitsal(mutex.v,1; full.v,100);初始化cobeginreader;reader;...coendend.2.设公共汽车上有一位司机和一位售票员,它们的活动如下:售票员:动车辆售票正常行车开车门到站停车关车门请分析司机与售票员之间的同步关系,如何用PV操作实现。
答:为了安全起见,显然要求:关车门后才能启动车辆;到站停车后才能开车门。
所以司机和售票员在到站、开门、关门、启动车辆这几个活动之间存在着同步关系。
用两个信号量S1、S2分别表示可以开车和可以开门,S1的初值为1,S2的初值为0。
用PV操作实现司机进程和售票员进程同步的算法描述如下:售票员:(S1)售票动车辆P(S2)正常行车开车门到站停车关车门V(S2)V(S1)另外,程序中PV操作出现的顺序与信号量的初值设置有关,以本题为例,算法如下描述时,S1、S2的初值均应为0。
售票员:常行车售票站停车P(S2)V(S2)开车门P(S1)关车门启动车辆V(S1)。
进程同步练习题1.第二类读者写者问题,信号量解决方法2.复印室里有一个操作员为顾客复印资料,有5把椅子供顾客休息等待复印。
如果没有顾客,则操作员休息。
当顾客来到复印室时,如果有空椅子则坐下来,并唤醒复印操作员;如果没有空椅子则必须离开复印室。
3.如果有三个进程R、W1、W2共享一个缓冲器B,而B中每次只能存放一个数。
当缓冲器中无数时,进程R可以将从输入设备上读入的数存放到缓冲器中。
若存放到缓冲器中的是奇数,则允许进程W1将其取出打印;若存放到缓冲器中的是偶数,则允许进程W2将其取出打印。
同时规定:进程R必须等缓冲区中的数被取出打印后才能再存放一个数;进程W1或W2对每次存入缓冲器的数只能打印一次;W1和W2都不能从空缓冲中取数。
写出这三个并发进程能正确工作的程序。
4.现有四个进程R1、R2、W1、W2,它们共享可以存放一个数的缓冲器B。
进程R1每次把来自键盘的一个数存入缓冲器B中,供进程W1打印输出;进程R2每次从磁盘上读一个数存放到缓冲器B中,供进程W2打印输出。
为防止数据的丢失和重复打印,问怎样用信号量操作来协调这四个进程的并发执行。
5.有一个仓库,可以存放A和B两种产品,但要求:(1)每次只能存入一种产品(A或B);(2)-N<A产品数量-B产品数量<M。
其中,N和M是正整数。
试用同步算法描述产品A与产品B的入库过程。
6.设有两个生产者进程A、B和一个销售者进程C,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售;销售者每次循环从仓库中取出一个产品进行销售。
如果不允许同时入库,也不允许边入库边出库;而且要求生产和消费A产品和B产品的件数都满足以下关系:-n≤A的件数-B的件数≤m,其中n、m是正整数。
1. 第二类读者写者问题,信号量解决方法答:为了使写者优先,可在原来的读优先算法的基础上增加一个互斥信号量s,初值为1,使得当至少有一个写者准备访问共享对象时,它可以使后续的读者进程等待完成;整型变量writecount,初值为0,用来对写者进行计数;互斥信号量mutex,初值为1,用来实现多个读者对写者writecount进行互斥访问。
进程同步练习
1. 有一阅览室, 共有 100 个座位。
读者进入时必须 先
在一张登记表上登记, 该表为每一座位列一表目, 包括座号和读者姓名。
读者离开时要消掉登记内容。
试用 P 、V 操作描述读者进程的同步结构。
var
mutex : semaphere;
full : semaphere;
table : array 0..n-1 procedure reader; 读者进程 begin
P(full);
P(mutex);
Register_name(table) ;
V(mutex);
Reading ;
P(mutex);
Delet_name(table);
V(mutex);
V(full)
end;
信号量,用于互斥 信号量,用于同步 of item; 登记表
begin
semi nitsal(mutex.v,1; full.v,100);
初始化
cobeg in
reader;
reader;
coe nd
end.
2.设公共汽车上有一位司机和一位售票员,它们的活动如下:
售票员:
动车辆
正常行车开车门
到站停车关车门
请分析司机与售票员之间的同步关系,如何用PV。