欢迎来到天天文库
浏览记录
ID:39725511
大小:850.10 KB
页数:125页
时间:2019-07-10
《《进程管理》PPT课件(I)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、进程的同步与通信1进程互斥2信号量和P、V操作3进程同步4经典的进程同步问题5进程通信要求:掌握进程同步与互斥,灵活运用信号量描述同步与互斥问题。8/17/20211第二章进程管理1.1互斥的基本概念与时间有关的错误:飞机订票系统中,两个终端,运行T1、T2进程T1:T2:......Read(x);Read(x);ifx>=1thenifx>=1thenx:=x-1;x:=x-1;write(x);write(x);......8/17/20212第二章进程管理同步:对于进程操作的时间顺序所加的某种限制,如操作A应在B之前执行。互斥:同步的特例,多个操作决
2、不能同时执行,如:操作A和操作B不能在同时执行。8/17/20213第二章进程管理临界资源(criticalresource):一次仅允许一个进程访问的资源。临界资源可能是硬件,也可能是软件:变量,数据,表格,队列等。并发进程对临界资源的访问必须作某种限制,否则就可能出与时间有关的错误,如:联网售票。8/17/20214第二章进程管理临界区(criticalsection):临界段,在每个程序中,访问临界资源的那段程序。注意:临界区是对某一临界资源而言的,对于不同临界资源的临界区,它们之间不存在互斥。如有程序段A、B是关于变量X的临界区,而C、D是关于变量Y
3、的临界区,那么,A、B之间需要互斥执行,C、D之间也要互斥执行,而A与C、B与D之间不用互斥执行。8/17/20215第二章进程管理解决互斥的准则1、空闲让进2、忙则等待3、有限等待4、让权等待8/17/20216第二章进程管理1.2软件方法解决进程互斥假如有两个进程Pi和Pj,它们共享一个临界资源R。如何用软件方法使进程Pi和Pj能互斥地访问R。下面介绍四个算法。8/17/20217第二章进程管理算法1设整型变量turn,用于指示被允许进入临界区的进程的编号。若turn=0表示进程Pi可进入。若turn=1表示进程Pj可进入。8/17/20218第二章进程
4、管理进程Pi:RepeatWhileturn<>idono_op;Criticalsectionturn:=j;OthercodeUntilfalse;该算法可确保每次只允许一个进程进入临界区。但它强制两个进程轮流进入。如当Pi退出时将turn置为j,以便 Pj能进入,但Pj暂不需要进入,而这时Pi又需要进入时,它无法进入。违反:空闲让进8/17/20219第二章进程管理算法2设varflag:array[0..1]ofboolean,flag[i]=true,表示进程Pi正在临界区内。flag[i]=false,表示进程Pi不在临界区内。flag[j]=t
5、rue,表示进程Pj正在临界区内。flag[j]=false,表示进程Pj不在临界区内。8/17/202110第二章进程管理Pi进程:RepeatWhileflag[j]dono_op;flag[i]:=true;Criticalsectionflag[i]:=false;OthercodeUntilfalse;该算法可确保空闲让进。但当pi和pj都未进入时,它们各自的访问标志都为false。如果pi和pj几乎同时要求进入,它们都发现对方的标志为false,于是都进入了。问题在于:当进程Pi观察到进程Pj的标志为false后,便将自己的标志由false改为t
6、rue,而正是在这两步之间,可能发生进程切换。当Pj运行时,它会观察到Pi的标志为false,从而可以将自己的标志设为true,并进入临界区。8/17/202111第二章进程管理算法3设varFlag:array[0..1]ofboolean,若flag[i]=true,表示进程Pi希望进入临界区内。若flag[j]=true,表示进程Pj希望进入临界区。8/17/202112第二章进程管理Pi进程:Repeatflag[i]:=true;//希望进入While(flag[j])dono_op;Criticalsectionflag[i]:=false;Ot
7、hercodeUntilfalse;该算法又出现新问题。它可能造成谁也不能进入。如,当pi和pj几乎同时都要进入,分别把自己的标志置为true,都立即检查对方的标志,发现对方为true.最终谁也不能进入。8/17/202113第二章进程管理算法4(正确算法)组合算法1、3为每一进程设标志位flag[i],当flag[i]=true时,表示进程pi要求进入,或正在临界区中执行。再设一个变量turn,用于指示允许进入的进程编号。8/17/202114第二章进程管理进程为了进入先置flag[i]=true,并置turn为j,表示应轮到pj进入。接着再判断flag[
8、j]andturn=j的条件是否满足。若不满足则可进
此文档下载收益归作者所有