《操作系统》PV习题课new_第1页
《操作系统》PV习题课new_第2页
《操作系统》PV习题课new_第3页
《操作系统》PV习题课new_第4页
《操作系统》PV习题课new_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统习题讲解一、进程概念

二、进程同步和互斥OperatingSystemConcepts进程概念(一)问题:如果系统中有N个进程,运行进程最多几个,最少几个?就绪进程最多几个,最少几个?等待进程最多几个,最少几个?OperatingSystemConcepts解答:运行进程最多1个,最少0个; 就绪进程最多N-1个,最少0个; 等待进程最多N个,最少0个;OperatingSystemConcepts进程同步和互斥(一)问题一:用P.V操作解决下图之同步问题getcopyputfstgOperatingSystemConcepts一个数据上的操作顺序:get-copy-putcpcgpcgpgGet不能向“满”的S中放;Copy不能从“空”的S中取;不能向“满”的T中放;Put不能“空”的T中取OperatingSystemConcepts(同步)信号量:{实际上也起到互斥作用}

S_Empty,T_Empty,{初值为1}

S_Full,T_Full; {初值为0}Get: BeginRepeatP(S_Empty)T_get_S();V(S_Full);Untilfalse;End Copy:BeginRepeatP(S_Full);P(T_Empty);S_copy_T();V(T_Full);V(S_Empty);Untilfalse;EndPut:BeginRepeatP(T_Full);T_put_G();V(T_Empty);Untilfalse;EndOperatingSystemConcepts进程同步和互斥(二)问题:用P.V操作解决下面问题司机进程:REPEAT启动车辆正常驾驶到站停车UNTIL…售票员进程:REPEAT关门售票开门UNTIL…OperatingSystemConcepts信号量:

S_Door, {初值为0}

S_Stop; {初值为0}司机进程: BeginRepeatP(S_Door);

启动;驾驶;停车;

V(S_Stop);Untilfalse;End 乘务员进程:BeginRepeat

关门;

V(S_Door);

售票;

P(S_Stop);

开门;

Untilfalse;End 同步要求:先关门,后开车; 先停车,后开门OperatingSystemConcepts第二类读者写者问题(写者优先)1)共享读2)互斥写、读写互斥3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)进程同步和互斥(三)OperatingSystemConceptsVar

mutex:semaphore;{互斥信号量,初值为1}

R:semaphore;{对应读者等待队列,初值为0}

W:semaphore;{对应写者等待队列,初值为0}{一般变量:}

Writing:Boolean;{初值false,有写者正在写}

rc :integer;{初值0,共享读的读者数}

rq :integer;{初值0,等待队列中读者数}

wq :integer;{初值0,等待队列中写者数}OperatingSystemConcepts读者进程BeginRepeat

P(mutex); If(WritingORwq<>0) ThenBegin

rq:=rq+1;

V(mutex); P(R);

P(mutex);{resume} End;

rc:=rc+1;

V(mutex); Read();OperatingSystemConcepts

P(mutex);

rc:=rc-1; If(rc=0ANDwq<>0) ThenBegin

wq:=wq-1; Writing:=true;

V(mutex); V(W); End; ElseV(mutex);UntilfalseEndOperatingSystemConcepts写者进程BeginRepeat

P(mutex); If(WritingORrc>0) ThenBegin

wq:=wq+1;

V(mutex); P(W); End; ElseBegin Writing:=true; V(mutex); Write();

OperatingSystemConcepts

P(mutex); If(wq<>0) ThenBegin

wq:=wq-1;

V(mutex); V(W); End ElseOperatingSystemConcepts

If(rq>0) ThenBegin Writing:=false; While(rq>0) Begin

rq:=rq-1; V(R) ; End End ElseBegin Writing:=false;

V(mutex); End EndUntilfalseOperatingSystemConcepts理发师问题:

理发店里有一位理发师,一把理发椅和N把供等候理发的顾客坐的椅子.如果没有顾客,则理发师便在理发椅上睡觉.当一个顾客到来时,他必须先唤醒理发师.如果顾客到来时理发师正在理发,则如果有空椅子,可坐下来等;否则离开。进程同步和互斥(四)OperatingSystemConcepts

Var

Sn:semaphore;{位子数目,初值为n}S:semaphore;{理发师睡觉,初值为0}

mutex:semaphore;{初值为1} 顾客进程i:P(Sn);{门外观望}P(mutex);进门;V(mutex);V(S);等候;理发;V(Sn)P(mutex);出门;V(mutex);OperatingSystemConcepts理发师进程:RepeatP(S);

P(mutex);

叫人理发;

V(mutex);

理发;Untilfalse;OperatingSystemConcepts问题: 推广读写者问题中的消息缓冲处理。消息缓冲区为k个,有m个发送进程,n个接收进程,每个接收进程对发送来的消息都必须取一次进程同步和互斥(五)OperatingSystemConcepts解题思路:发送者发送消息后唤醒所有的接收者;所有的接收者都接收后空出缓冲区;接收者接收时要修改接收次数;接收计数和缓冲区的指针为临界资源,访问时要互斥。OperatingSystemConcepts

TypeBufferType=Record

msg:MessageType; count:integer;

mutex:semaphore;{初值为1}

empty:semaphore;{初值为1}

full:array[1..n]ofsemaphore; {初值全为0}

EndVar

mutex:semaphore;{初值为1}

s:integer; {初值为0}

buff:array[0..k-1]ofBufferType;{k是缓冲区大小;n是接收进程个数}{m是发送进程个数,通过s进行“写互斥”}OperatingSystemConcepts

ProcedureSender_i(i:integer);{i为发送进程的标号}Var s0,j:integer;BeginRepeat

P(mutex);s0:=s;s:=(s+1)modk;

V(mutex);P(buff[s0].empty);

在buff[s0].msg中写信息;

P(buff[s0].mutex);buff[s0].count:=n;V(buff[s0].mutex);For(j:=1tondo)V(buff[s0].full[j]);Untilfalse;EndOperatingSystemConceptsProcedureRecvr(i:integer);{i为接收进程的标号}Var j:integer;Beginj:=0;RepeatP(buff[j].full[i]);

从buff[j].msg中读信息;

P(buff[j].mutex

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论