操作系统复习题2.docx

上传人:李司机 文档编号:6886206 上传时间:2024-03-15 格式:DOCX 页数:12 大小:101.71KB
返回 下载 相关 举报
操作系统复习题2.docx_第1页
第1页 / 共12页
操作系统复习题2.docx_第2页
第2页 / 共12页
操作系统复习题2.docx_第3页
第3页 / 共12页
操作系统复习题2.docx_第4页
第4页 / 共12页
操作系统复习题2.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《操作系统复习题2.docx》由会员分享,可在线阅读,更多相关《操作系统复习题2.docx(12页珍藏版)》请在三一办公上搜索。

1、一、选择题1 .在进程的组成局部之中,进程在运行中不可修改的局部是_B.A,私用程序段C.数据段B.共享程序段D.进程控制块2 .响应比高者优先作业调度算法是以计算时间和D一来考虑的。A.输入时间B.完成时间C.周转时间D.等待时间3 .在消息缓冲通信中,消息队列属于一A_资源。A.临界B.共享C.永久D,可剥夺4 .进程间的同步是指进程间在逻辑上的相互B关系。A.联接B.制约C.继续D.调用5 .最适合于分时系统的进程调度算法是D_oA.先来先效劳(FCFS)C.优先数法B.最短作业优先(SSJF)D.轮转法(RR)6 .进程A和进程B通过共享缓冲区协作完成数据处理,进程A负责生产数据并放入

2、缓冲区,进程B从缓冲区中读数据并输出。进程A和进程B之间的关系是_B_oA.互斥关系7.在优先级调度中,A.短进程 1B.同步关系 C.互斥和同步D.无制约关系c_类进程可能被“饿死”,即长时间得不到调度。B.长进程C.低优先级进程D.大内存进程8 .进程从运行状态到阻塞状态可能是由于C_oA,进程调度程序的调度B.现运行进程的时间片耗尽C.现运行进程执行了Wait操作D.现运行进程执行了SignaI操作9 .银行家算法在解决死锁问题中是用于.的。A.预防死锁 B.防止死锁10 . D不是进程调度算法。A.时间片轮转法B.C.响应比高者优先法D.C.检测死锁D.解除死锁先来先效劳方法 均衡调度

3、算法11.下面关于线程的表达中正确的选项是一A。A.线程包含CPU现场,可以独立执行程序B.C.线程之间的通信必须使用系统调用函数D.每个线程有自己独立的地址空间 进程只能包含一个线程12.并发进程之间.A.彼此无关B.必须同步 C.必须互斥D.可能需要同步或互斥13 .当一个进程运行时,系统可能基于某种原那么强行将其撤下,把处理器分配给其他进程,这种调度方式是_BoA.非剥夺方式B.剥夺方式C.中断方式D.查询方式14.信号量S不能用于.A. signalB. waitD_操作。C.赋初值D.运算表达式15.A.调度B.进程C.同步D.信号量D_是种只能进行wait操作和SignaI操作的特

4、殊变量16 .分配给进程占用处理机的时间到而强迫进程P让出处理器,或有更高优先级的进程要运行,迫使正在运行的进程P让出处理器,那么进程P状态变化的情况为-AA.运行态一就绪态B.运行态一等待态C.就绪态一运行态D.等待态一就绪态17 .下面关于进程的表达中正确的选项是_AoA.进程获得CPU运行是通过调度得到的B.优先级是进程调度的重要依据,一旦确定就不能改变C.在单CPU的系统中,任何时刻都有一个进程处于运行状态D.进程申请CPU得不到满足时,其状态变为阻塞18 .操作系统通过B对进程进行管理。A.进程B.进程控制块C.进程启动程序D.进程控制区19 .假设一个进程拥有100个线程,这些线程

5、属于用户级线程,它们在系统调度执行时间上占用的时间片个数是一AoA.1B.100C.1/100D.020 .解除死锁通常不采用的方法是_DoA.终止一个死锁进程B.终止所有死锁进程C.从死锁进程处抢夺资源D.从非死锁进程处抢夺资源21 .到其他3种状态的进程状态是_DoA.就绪B.阻塞C.完成D.执行22 .信号量的初值为2,当前值为-3,那么表示等待进程有_C一A.1个B.2个C.3个D.5个23 .Wait操作可能导致_CoA.进程就绪B.进程结束C.进程阻塞(等待)D.新进程创立24 .在操作系统中为防止系统的死锁采用一AoA.银行家算法B.破坏占有并等待条件C.死锁检测和恢复D.破坏非

6、剥夺条件25 .以下的进程状态变化中不可能发生的变化是_AoA.等待一运行B.运行一等待C.运行一就绪D.等待一就绪26 .如果有三个进程共享同一互斥段,而且每次最多允许两个进程进入该互斥段,那么信号量的初值应设置为一COA.3B.1C.2D.027 .进程之间交换数据不能通过_C途径进行。A,共享文件B.消息传递C.访问进程地址空间D.访问共享存储区域28 .进程控制块PCB不包括的内容是一DoA.CPU现场B.进程优先级C.进程运行状态D.文件缓冲区29 .PCB是描述进程状态和特性的数据结构,一个进程_DoA,可以有多个PCBB.可以和其他进程共用一个PCBC.可以没有PCBD,只能有唯

7、一的PCB30 .资源顺序分配法破坏了死锁发生的一D必要条件。A.互斥占用B.占有等待C,非剥夺D.循环等待31 .进程和程序的本质区别是_B0A,内存和外存B.动态和静态特征C.共享和独占使用计算机资源D.顺序和非顺序执行指令32 .设有两个进程共享3个同类资源,为使系统不死锁,每个进程最多可以申请_C资源。A.0B.1C.2D.333 .作业调度中的先来先效劳算法是以一C_为出发点考虑的。A.作业执行时间B.作业的周转时间C.作业等待时间D,等待时间加运行时同34 .设m为同类资源数,n为系统中的并发进程数。当n个进程共享m个互斥资源时,每个进程的最大需求是w。以下情况下,系统会死锁的是_

8、DoA.m=2,n=l,w=2B.m=2,n=2,w=lC.m=4,n=3,W=2D.m=4,n=2,w=335 .用于解决进程间互斥的方法是Bo信号量及wait、Signal操作加锁与解锁信箱方式消息缓冲方式特权指令方式A.、和B.和C.和D.和36 .在操作系统中,每个进程具有独立性,进程之间又具有相互制约性。对于任何两个并发进程,它们_COA.必定无关B.必定相关C.可能相关D.可能相同二、简答题1.什么是线程?进程和线程的关系是什么?线程可定义为进程内的一个执行单位,或者定义为进程内的一个可调度实体。在具有多线程机制的操作系统中,处理机调度的根本单位不是进程而是线程。一个进程可以有多个

9、线程,而且至少有一个可执行线程。进程和线程的关系是:(1)线程是进程的一个组成局部。(2)进程的多个线程都在进程的地址空间活动。(3)资源是分给进程的,而不是分给线程的,线程在执行中需要资源时,系统从进程的资源分配额中扣除并分配给它。(4)处理机调度的根本单位是线程,线程之间竞争处理机,真正在处理机上运行的是线程。(5)线程在执行过程中,需要同步。2 .进程能自己将自己唤醒吗?进程能自己将自己撤销吗?唤醒进程和撤消进程都是要通过CPU上运行程序来实现的。一个进程入睡了,它就不可能被调度到CPU上运行;一个进程在撤消前必须先进入终止状态,而处于终止状态的进程不可能被调度到CPU上运行。因此,进程

10、被唤醒、被撤消都不能由自己来完成,只能由别的进程实现。3 .父进程创立子进程之后,父子进程间的关系是什么?一个进程创立子进程之后,进程与产生的进程之间的关系是父子关系,分别成为进程和子进程。子进程一经产生就与你进程并发执行,子进程共享父进程和子进程。子进程一经产生就与你进程并发执行,子进程共享父进程的正文段和已经翻开的文件。4 .简述引进线程的好处。(1)以线程作为系统调度的根本单位,减少了系统的时空开销。以进程为系统调度的根本单位的系统中,进程的切换是很频繁的。在切换中由于要保存当时的运行环境,还要设置新选中的进程的运行环境,这既花费了处理机的时间,又增加了主存的空间,从而也限制了系统进程的

11、数量和进程的切换速度。(2)引进线程提高了系统的并行能力。线程作为进程内的一个可执行实体,减少了并行粒度。线程作为调度的根本单位而不是资源分配的根本单位,调度更为容易,而且采用线程提高系统的并行能力比采用进程更为有效。(3)同一进程的线程共享进程的用户地址空间,所以同一进程的线程间的通信更容易实现。5 .当一个进程的父进程被撤销时,该进程是撤销好还是不撤销好?在实际系统中,两种处理方法都是可行的,且各有优缺点。假设撤消,那么该进程的任务可能还没有完成,这显然是不利的,特别是当该进程的运行结果对其他进程的运行很重要(如该进程是其他进程的前趋进程,没有它的运行结果其他进程无法运行)时;假设不撤消,

12、那么该进程又可能成为不可控的”孤儿”,从而产生不可预测的结果。比拟好的做法是,当一个进程的父进程被撤消时,可以将该进程”过继”给系统内一个级别较高的进程(如UniX中的1#进程),让它有一个“新的父亲”,这样既可以继续完成其任务又不会成为不可控的。6 .为什么说进程同步问题关系到OS的成败?同步机制应遵循的准那么是什么?进程同步问题假设处理不当,有可能会产生种种”与时间有关性错误”,特别是当两个或多个进程共享了公共变量而又没有互斥地使用这些变量时,极有可能导致用户程序运行结果的不正确,这量种灾难性的后果。这种OS显然是不成功的,是用户不敢使用的。有以下四条准那么:空闲让进、忙那么等待、有限等待

13、、让权等待。7 .进程之间存在哪几种相互制约关系?各是什么原因引起的?以下活动分别属于哪种制约关系?(1)假设干同学去图书馆借书。(2)两队举行篮球比赛。(3)流水线生产的各道工序。(4)商品生产和消费。进程间存在着两种相互制约的关系:直接制约关系(即同步问题)和间接制约关系(即互斥问题)。同步问题是存在逻辑关系的进程之间相互等待产生的制约关系,互斥问题是相互无逻辑关系的进程间竞争使用相同的资源所发生的制约关系。(1)属于互斥关系,因为书的个数是有限的,一本书只能借给一个同学。(2)属于互斥关系,篮球只有一个,两队都要争夺。(3)属于同步关系,各道工序的开始都依赖前道工序的完成。(4)属于同步

14、关系,商品没生产出来,消费无法进行,商品未消费完,生产也无需进行。8 .高级调度和低级调度的主要任务是什么?为什么引入中级调度?(1)高级调度又称为作业调度。它是批处理系统中使用的一种调度。其主要任务是按照某种算法从外存的后备队列上选择一个或多个作业调入内存,并为其创立进程、分配必要的资源,然后再将所创立的进程控制块插入就绪队列中。(2)低级调度又称进程调度。它是距离硬件最近的一级调度。其主要任务是按照某种算法从就绪队列上选择一个(或多个)进程,使其获得CPU。(3)引入中级调度的目的是为了提高内存利用率和系统存吐量。其功能是,让那些暂时不能运行的进程不再占用珍贵的内存资源,而是调其到外存上等

15、候。此时的进程状态为挂起状态。当这些进程重新具备运行条件且内存空闲时,由中级调度选择一局部挂起状态的进程调入内存并将其状态变为就绪状态。9 .在剥夺调度中,有哪些剥夺原那么?(1)时间片原那么。在轮转算法中,CPU轮流为诸多进程效劳,每个进程运行完自己的时间片后,系统就将CPU剥夺过来,交给下一个进程使用。(2)优先级原那么。为紧迫的作业赋予较高的优先级,这种作业到达系统或由阻塞状态被唤醒后,假设其优先级高于当前运行的进程的优先级,可以剥夺当前运行进程的CPUo(3)短作业(进程)优先原那么。假设一个作业(进程)到达系统,其运行长度比当前运行的进程长度明显的短,那么剥夺当前运行的进程CPU。1

16、0 .引起进程调度的主要因素。1) 一个进程运行完毕。(2) 一个正在运行的进程被阻塞。(3)在抢占式调度中,一个高优先级的进程被创立。(4)在抢占式调度中,一个高优先级进程由阻塞唤醒。(5)在轮转式调度中,正垢进程运行完一个时间片。11 .何为死锁?产生死锁的原因和必要条件是什么?比拟三种解决死锁的方法?(1)死锁是指多个进程因竞争资源而造成的种僵持状态。假设无外力作用,这些进程都将永远处于阻塞状态,不能再运行下去。(2)产生死锁的原因有:资源缺乏、进程推进次序不当。(3)产生死锁的必要条件有:互斥条件、请求和保持条件、非剥夺条件、环路等待条件。比拟三种解决死锁的方法:(1)预防死锁方法,主

17、要是破坏产生死锁的必要条件。该方法是最容易实现的,但系统资源利用率较低。(2)防止死锁方法,比拟实用的有银行家算法(BankerAlgorithm)O该算法需要较多的数据结构,实现起来比拟困难,但资源利用率最高。(3)检测死锁方法是基于死锁定理设计的。定期运行该算法对系统的状态进行检测,发现死锁便予以解除。其中,需要比拟一下各咱死锁解除方案的代价,找到代价最小的方案。该方法最难实现,资源利用率较高。12 .试比拟说明进程和程序的区别有哪些?(1)每个进程实体中包含了程序段和数据段这两个局部,因此说进程是与程序是紧密相关的。但从结构上看,进程实体中除了程序段和数据段外,还必须包含一个数据结构,即

18、进程控制块PCB。(2)进程是程序的一次执行过程,因此是动态的;动态性还表现在进程由创立而产生、由调度而执行、由撤消而消亡,即它具有一定的生命周期。而程序那么只是一组指令的有序集合,并和永久地存放在某种介质上,其本身不具有运动的含义,因此是静态的。(3)多个进程实体可同时存放在内存中并发地执行,也正是引入进程的目的。而程序(在没有为它创立进程时)的并发执行具有不可再现性,因此程序不能正确地并发执行。(4)进程是一个能够独立运行、独立分配资源和独立接受调度的根本单位。而因程序不具有PCB,所以它是不可能在多道程序环境下独立运行的。(5)程与程序不一一对应。同一个程序的屡次运行,将形成多个不同的进

19、程;同一个程序的一次执行也可以产生多个进程;而一个进程也可以执行多个程序。三、应用题1 .有一个理发师,一把理发椅和n把供等候理发的顾客坐的椅子。如果没有顾客,那么理发师便在理发椅子上睡觉;当一个顾客到来时,必须唤醒理发师,进行理发;如果理发师正在理发时,又有顾客来到,那么如果有空椅子可坐,他就坐下来等,如果没有空椅子,他就离开。为理发师和顾客各编一段程序描述他们的行为,要求不能带有竞争条件。#defineCHAIRS/*为等候的顾客准备的椅子数*/semaphorecustomers=。:semaphorebarbers=O;semaphoremutex=1;*用于互斥*/intwaitin

20、g=O:voidbarber()while(1)wait(customers);wait(mutex);waiting=waiting-l;signal(mutex);理发;signal(barbers);voidcustomers()(wait(mutex);if(waitingCHAIRS)(waiting=waiting+l;signal(mutex):signal(customers);坐下等待;wait(barbers);else(signal(mutex);2 .计算进程PC和打印进程POl、P02共享一个单缓冲区,计算进程负责计算,并把计算结果放入单缓冲中;打印进程POl、P02

21、那么负责从单缓冲中取出计算结果进行打印,而且对每个计算结果,POl和P02都需分别打印一次。请用记录型信号量描述上述进程间的同步关系。为了实现计算进程和打印进程之间的同步,并使单缓冲中的每个计算结果都被两个打印进程分别打印一次。可设置四个信号量:full1表示缓冲中是否有可供POl打印的计算结果,full2表示缓冲中是否有可给P02打印的计算结果;emptypl、empty2那么表示计算结果是否己被P011、P02取走,只有当一个结果被两个打印进程都取走后,缓冲区才变空,计算进程才可将下一个计算结果放入单缓冲。相应的同步算法可描述如下:Varempty1,enpty2,full1,fulI2:

22、semaphore:=1,1,0,0;beginParbeginPC:beginRepeatComputrtnextnumber;P(emptyl):P(empty2);addthenumbertobufer;V(fulll);V(fulI2);Untilfalse;endP01:beginrepeatP(fulll);takefrombufer;V(emptyl):printlastnumber;untilflase;endP02:beginRepeatP(fuH2);takefrombuffer;V(empty2);printlastnumber;untilfalseendparenden

23、d3.设有三个进程,输入进程(input)、计算进程(COmPUte)和输出进程(OUtPUt),它们通过共享两个缓冲区bufl和buf2协作完成任务。如以下图所示三个进程之间的合作关系如下:(1)输入进程使用put()函数把数据送到bufl,供计算进程调用CalCUlate()函数计算;(2)计算进程每次调用get()函数从bufl取出已输入的可计算的数据进行计算,并把计算结果使用put()函数把数据送到buf2送入buf供输出进程打印;(3)输出进程调用get。函数把buf2中的数据使用Print()函数输出。定义适宜的信号量,并用伪代码完成实现过程。信号量:nonfl、nonel:输入进

24、程与计算进程同步,bufl是否为空;nonf2、nonel:计算进程与输出进程同步,buf2是否为空;sks2:分别互斥使用bufl和buf2procedureinputbeginwait(nonfI)wait(sl)put(data);signal(sl);signal(nonel);untilfalseend;procedurecomputebeginwait(nonel);wait(sl);data=get();data=calculale(data);signal(sl);signal(nonfl);wait(nonf2);wait(s2);put(data);signal(s2);s

25、ignal(none2);untilfalseend;procedureoutputbeginwait(none2);wait(s2);data=get();print(data);signal(s2);signal(nonf2);untilfalseend;4.设系统中有三类资源A、B和C,又设系统中有5个进程Pl,P2,P3,P4和P5。在TO时刻系统状态如下:最大需求量已分配资源量剩余资源量ABCABCABCPI1210003163P2175100P3235135P4064002P5065001(1)系统是否处于平安状态?(请给出详细的判断过程)如是,那么给出进程平安序列。(2)如果进程

26、P5申请1个资源类A和1个资源类C,能否实施分配?为什么?(1)利用平安性算法对TO时刻的资源分配情况进行分析,结果如下:WorkNeedAllocationWork+AllocationFinishP3163100135298truePl2981270032911trueP229110751003911trueP439110640023913trueP539130620013914true系统处于平安状态,平安序列为:P3,Pl,P2,P4,P5。(2) Pl发出请求向量ReqUeStI(1,0,1),系统按银行家算法进行检查:1) Requestl(1,0,1)=Needl(l,2,6)2

27、) Requestl(1,0,1)=Available(1,6,3)3)系统先假定可为Pl分配资源,并修改AVaiIable、Allocation1Needl向量,资源变化情况如下:maxAllocationAvailableNeedABCABCABCAB(Pl12100040620I6P2175100075P3235135I00P4064002062P5065001064剩余资源可满足P4,分给P4给还后(0,6,4)可满足P5,分配P5归还后(0,6,5)不满足其它进程要求,即不能实施分配,因为分配后找不到平安序列,系统将处于不平安状态。5 .设有五道作业,它们的提交时间和运行时间见下表,

28、试给出在如下表所示的三种调度算法下,作业的执行顺序,以及平均周转时间和带权平均周转时间:(1)先来先效劳调度算法;(2)短作业优先调度算法;(3)响应比高优先调度算法。作业提交和运行时可表作业名提交时间/h需执行时间/hJl10.10.8J210.30.5J310.50.4J410.60.3J510.70.2(1)采用先来先效劳(FCFS)算法。作业名提交时间/h需执行时间/h开始运行时间/h完成时间/hJl10.10.310.110.4J210.30.510.410.9J310.50.410.911.3J410.60.311.311.6J510.70.211.611.8Jl,J2,J3,J4

29、,J5T=(l0.4-10.1)+(10.9-10.3)+(11.3-10.5)+(11.6-10.6)+(11.8-10.7)5=3.85=0.76hT=(l0.4-10.1)0.3(l0.9-10.3)/0.5+(11.3-10.5)0.4(l1.6-10.6)/0.3+(11.8-10.7)0.25=13.033/5=2.61(2)短作业优先调度(SJF)算法。作业名提交时间/h需执行时间Zh开始运行时间/h完成时间ZhJl10.10.310.110.4J210.30.510.410.9J310.50.411.411.8J410.60.311.111.4J510.70.210.911.1

30、Jl,J2,J5,J4,J3T=(l0.4-10.1)+(10.9-10.3)+(11.8-10.5)+(11.4-10.6)+(11.1-10.7)5=3.45=0.68hT=(l0.4-10.1)/0.3+(10.9-10.3)/0.5+(11.8-10.5)/0.4+(11.4-10.6)/0.3+(11.1-10.7)0.25=10.117/5=2.02(3)高响应比优先调度算法。作业名提交时间/h需执行时间/h开始运行时间/h完成时间/hJI10.10.310.110.4J210.30.510.4/10.711.0J310.50.410.6/11.511.8J410.60311.21

31、1.5J510.70.211.011.2JI,J2,J3,J2,J5,J4,J3T=(l0.4-10.1)+(11.0-10.3)+(11.8-10.5)+(11.5-10.6)+(11.2-10.7)5=3.75=0.72hT=(l0.4-10.1)/0.3+(11.0-10.3)/0.5+(11.8-10.5)/0.4+(11.5-10.6)/0.3+(11.2-10.7)0.25=11.15/5=2.236 .假设系统有同类资源10个,供P,Q、R三个进程共享,P、Q、R所需资源总数分别为8、4、9,它们申请资源的次序和数量如下表所示。进程资源申请表次序进程申请量122432425162

32、-按银行家算法为它们分配资源:(1)写出执行完序号为6的申请时,各进程的状态和已占的资源数。(2)请估计系统是否会出现死锁,并简要说明理由。(1)执行完序号为6的申请时,各进程的状态和已占的资源数如表所示;P等待己占用资源4个Q就绪或运行己占用资源4个R等待已占用资源2个根据单项银行家算法,过程为:I)R申请2个资源时,剩余资源可使各进程运行结束,所以这个分配是平安的,故将2个资源分给R;2)同理,P、Q分别申请4,2个资源时,剩余资源可使各进程运行结束,所以这个分配也是平安的,故将4、2个资源分给P、Q;3) P申请2个资源时,系统此刻剩余资源数为2,如果将这两个资源分给P,系统就没有资源了

33、。这时的P、Q、R都还需要资源才可运行完,这样,P、Q、R将都进入阻塞状态,所以P申请的这两个资源不能分配。4)同理,接下来R欲申请1个资源也是不平安的分配,故不能分给。5)Q申请2个资源时,假定操作系统分给它,Q进程将运行结束,Q释放的资源又可使P运行结束;P运行结束,释放的资源又可使R运行结束。所以这个分配是平安的,故将2个资源分给Q。(2)不会死锁,因为银行家算法在任何时候均保证至少有一个进程能得到所需的全部资源,这样,得到资源的进程能及时归还资源供其他进程使用7 .下面给出的两个进程互斥的算法是平安的吗?为什么?# definetrue;# definefalse;Intflag2;f

34、lag1=flag2=false;enter-crtsec(i)inti;While(flagl-i)flagi=true;leave-crtsec(i)Inti;flagi=false;processI;Enter-crtsec(i);Incriticalsection;1.eave-crtsec(i);从概念上讲,系统中各进程在逻辑上是独立的,它们可以按各自的速度向前推进。但由于它们共享某些临界资源,因而产生了临界区问题。对于具有临界区问题的并发进程,它们之间必须互斥,以保证不会同时进入临界区。这种算法不是平安的。因为,在进入临界区的enter-crtsec0不是一个原语操作,如果两个进程

35、同时执行完其循环(此前两个flag均为false),那么这两个进程可同时进入临界区。8 .设系统有三种类型的资源,数量为(4,2,2),系统中有进程A,B,C按如下顺序请求资源:进程A申请(3,2,1)进程B申请(1,0,1)进程A申请(0,1,0)进程C申请(2,0,0)请你给出一和防止死锁的资源剥夺分配策略,完成上述请求序列,并列出资源分配过程,指明哪些进程需要等待,哪些资源被剥夺。分配策略为:当进程Pi申请ri类资源时,检查ri中有无可分配的资源:有那么分配给Pi;否那么将Pi占有的资源全部释放而进入等待状态。(Pi等待原占有的所有资源和新申请的资源)资源分配过程:剩余资源进程A:(3,

36、2,1)(1,0,1)进程B:(1,0,1)(0,0,0)进程A:(0,1,0)(不满足)(3,2,1)A的所有资源被剥夺,A处于等待进程C:(2,0,0)(1,2,1)C,B完成之后,A可完成。9.进程Al,A2,,An通过K个缓冲区向进程Bl,B2,,Bm不断地发送消息。发送和接收工作遵循如下规那么:(1)每个发送进程一次发送一个消息,写入缓冲区,缓冲区大小与消息长度一致;(2)对每个消息,BI,B2,,Bm都需接收一次,读入各自的数据区内;(3)K个缓冲区都满时,发送进程等待,没有可读的消息时,接收进程等待。试用wait和signal原语操作组织正确的发送和接收操作。生产者消费者问题的一

37、个变形,一组生产者Al,A2.An和一组消费者Bl,B2,Bm共用k个缓冲区,每个缓冲区只要写一次,但需要读m次。因此,我们可以把这一组缓冲区看成m组缓冲区,每个发送者需要同时写m组缓冲区中相应的m个缓冲区,而每一个接收者只需读它自己对应的那组缓冲区中的对应单元。设置一个信号量mutex实现诸进程对缓冲区的互斥访问;两个信号量数组emptym和fullm描述m组缓冲区的使用情况。mutex的初值为1,数组empty中元素初值为k,数组full中的元素初值为0。其同步关系描述如下:intmutex,emptym,fullm;inti;mutex=1;for(i=0;i=m-l;i+)(empty

38、i=k;fulli=0;main()(cobeginAl();A2();An();B1();B2();Bm();cocndIsend()*发送消息*/(ini;for(i=0;i=m-1;i+)P(emptyi);P(mutex);将消息放入缓冲区;V(mutex);for(i=0;i=m-1;i+)V(fulli);receive(i)/*接收消息*/(P(fulli);P(mutex);将消息从缓冲区取出;V(mutex);V(emptyi);Ai()/*因发送进程Al,A2,.,An的程序类似。这里只给出进程Ai的描述。*/vhile(l)send();)1Bi()/*因接收进程Bl,B2,,Bm的程序类似这里只给出进程Bi的描述*/(while(l)(recive(i);

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号