




已阅读5页,还剩120页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第三章进程的同步与通信,进程互斥信号量和、操作进程同步经典的进程同步问题进程通信,2,进程互斥,基本概念利用软件方法解决进程互斥问题利用硬件方法解决进程互斥问题用上锁开锁原语实现进程互斥,3,基本概念,与时间有关的错误:一飞机订票系统,两个终端,运行T1、T2进程T1:T2:.Read(x);Read(x);ifx=1thenifx=1thenx:=x-1;x:=x-1;write(x);write(x);.,4,并发环境下程序间的制约关系,5,同步:对于进程操作的时间顺序所加的某种限制,如操作应在之前执行。互斥:同步的特例,多个操作决不能同时执行,如:操作和操作不能在同时执行。(注意:理解不能同时执行的准确含义),6,临界资源(criticalresource):一次仅允许一个进程访问的资源。如:进程共享一台打印机,若让它们交替使用则得到的结果肯定不是我们希望的。临界资源可能是硬件,也可能是软件:变量,数据,表格,队列等。并发进程对临界资源的访问必须作某种限制,否则就可能出与时间有关的错误,如:联网售票。,7,临界区(criticalsection):临界段,在每个程序中,访问临界资源的那段程序。注意:临界区是对某一临界资源而言的,对于不同临界资源的临界区,它们之间不存在互斥。如有程序段A、B是关于变量X的临界区,而C、D是关于变量Y的临界区,那么,A、B之间需要互斥执行,C、D之间也要互斥执行,而A与C、B与D之间不用互斥执行。,8,解决互斥的准则,为了禁止两个进程同时进入临界区内,可以采用软件办法或系统提供的同步机构来协调它们的关系。但是,不论用什么办法都要遵循下述准则:1、当有若干进程欲进入它的临界区时,应在有限时间内使进程进入临界区。换言之,它们不应相互阻塞而致使彼此都不能进入临界区2、每次至多有一个进程处于临界区。3、进程在临界区内仅逗留有限的时间。,9,软件方法解决进程互斥,现在很少用软件方法解决互斥,但通过学习软件解法能使读者了解到,在早期进程互斥问题的解决并不是一件很简单的事。假如有两个进程Pi和Pj,它们共享一个临界资源R。如何用软件方法使进程Pi和Pj能互斥地访问R。下面介绍四个算法。,10,算法1,设整型变量turn,用于指示被允许进入临界区的进程的编号,即若turn=i,表示进程Pi可进入。turn=j表示进程Pj可进入。,11,进程Pi:RepeatWhileturnidono_op;Criticalsectionturn:=j;OthercodeUntilfalse;,12,算法1的问题,该算法可确保每次只允许一个进程进入临界区。但它强制两个进程轮流进入。如当Pi退出时将turn置为j,以便Pj能进入,但Pj暂不需要进入,而这时Pi又需要进入时,它无法进入。这不能保证准则1。,13,算法2,设varflag:array0.1ofboolean,若flagi=true,表示进程Pi正在临界区内。flagi=false表示进程Pi不在临界区内。若flagj=true,表示进程Pj正在临界区内。flagj=false表示进程Pj不在临界区内。,14,Pi进程:RepeatWhileflagjdono_op;flagi:=true;Criticalsectionflagi:=false;OthercodeUntilfalse;,15,算法2的问题,该算法可确保准则1。但又出现新问题。当pi和pj都未进入时,它们各自的访问标志都为false。如果pi和pj几乎同时要求进入,它们都发现对方的标志为false,于是都进入了。这不能保证准则2。,16,算法3,算法2的问题在于:当进程Pi观察到进程Pj的标志为false后,便将自己的标志由false改为true,而正是在这两步之间,可能发生进程切换。当Pj运行时,它会观察到Pi的标志为false,从而可以将自己的标志设为true,并进入临界区。若在临界区的执行过程中发生了进程切换,Pi可能获得处理机而进入临界区。,17,在算法3中,设varFlag:array0.1ofboolean,若flagi=true,表示进程Pi希望进入临界区内。若flagj=true,表示进程Pj希望进入临界区。,18,Pi进程:Repeatflagi:=true;Whileflagjdono_op;Criticalsectionflagi:=false;OthercodeUntilfalse;,19,算法3的问题,该算法可确保准则2。但又出现新问题。它可能造成谁也不能进入。如,当pi和pj几乎同时都要进入,分别把自己的标志置为true,都立即检查对方的标志,发现对方为true.最终谁也不能进入。这不能保证准则1。,20,课本上的解法4,Pi进程:Repeatflagi:=true;Whileflagjdono_op;beginflagi:=false;flagi:=true;endCriticalsectionflagi:=false;OthercodeUntilfalse;,21,算法4(正确算法),组合算法1、3,为每一进程设标志位flagi,当flagi=true时,表示进程pi要求进入,或正在临界区中执行。此外再设一个变量turn,用于指示允许进入的进程编号。,22,进程为了进入先置flagi=true,并置turn为j,表示应轮到pj进入。接着再判断flagjandturn=j的条件是否满足。若不满足则可进入。或者说,当flagj=false或者turn=i时,进程可以进入。前者表示pj未要求进入,后者表示仅允许pi进入。,23,算法4(正确算法),Repeatflagi:=true;turn:=j;While(flagjandturn=j)dono_op;Criticalsectionflagi:=false;OthercodeUntilfalse,24,软件解法的缺点,1.忙等待2.实现过于复杂,需要较高的编程技巧,25,硬件方法解决进程互斥,用软件解决很难,现代计算机大多提供一些硬件指令。利用Test-and-Set指令实现互斥利用swap指令实现进程互斥,26,Test-and-Set指令实现互斥,1、Test-and-Set指令functionTS(varlock:boolean):boolean;beginiflock=0thenbeginlock:=1;TS:=true;endelseTS:=falseend;其中,有lock有两种状态:当lock=false时,表示该资源空闲;当lock=true时,表示该资源正在被使用。,27,2、利用TS指令实现进程互斥为每个临界资源设置一个全局布尔变量lock,并赋初值false,表示资源空闲。repeatwhileTS(lock)doskip;criticalsectionlock:=false;OthercodeUntilfalse;,28,swap指令实现进程互斥,1、swap指令又称交换指令,X86中称为XCHG指令。Procedureswap(vara,b:boolean);Vartemp:boolean;BeginTemp:=a;A:=b;B:=temp;End;,29,2、利用swap实现进程互斥为每一临界资源设置一个全局布尔变量lock,其初值为false,在每个进程中有局部布尔变量key。Repeatkey:=true;RepeatSwap(lock,key);Untilkey=false;Criticalsectionlock:=false;OthercodeUntilfalse;,30,用原语实现进程互斥,锁即操作系统中的一标志位,表示资源可用,表示资源已被占用。用户程序不能对锁直接操作,必须通过操作系统提供的上锁和开锁原语来操作。通常锁用w表示,上锁开锁原语分别用lock(w)、unlock(w)来表示。,31,上锁和开锁原语,上锁原语lock(w)可描述为:L:if(w=1)gotoLelsew=1;开锁原语unlock(w)可描述为:w=0;,32,用原语实现进程互斥,33,改进的上锁原语,上述上锁原语中存在忙等待。,34,改进的开锁原语,35,1965年,由荷兰学者Dijkstra提出(所以P、V分别是荷兰语的test(proberen)和increment(verhogen))一种卓有成效的进程同步机制最初提出的是二元信号量(互斥)推广到一般信号量(多值)(同步)P、V操作是原语,信号量及P、V操作,36,信号量:semaphore,是一个数据结构定义如下:structsemaphoreintvalue;pointer_PCBqueue;信号量说明:semaphores;,37,P操作,P(s)s.value=s.value-1;if(s.value=4)P(W)V(Mutex)P(forki);P(fork(i+1)%5);进食;,V(forki);V(fork(i+1)%5);P(Mutex)Count-;if(Count=3)V(W)V(Mutex),114,设fork5为5个信号量,初值为均1设信号量S,初值为4S用于封锁第5个哲学家,无死锁哲学家就餐问题解2,115,Philosopheri:while(1)思考;P(S)P(forki);P(fork(i+1)%5);进食;V(forki);V(fork(i+1)%5);V(S),116,设fork5为5个信号量,初值为均1,无死锁哲学家就餐问题解3,117,Philosopher1:while(1)思考;P(fork1);P(fork2);进食;V(fork2);V(fork1);,Philosopher2:while(1)思考;P(fork3);P(fork2);进食;V(fork2);V(fork3);,118,习题,进程A1、A2,。An1通过m个缓冲区向进程B1、B2、。Bn2不断发送消息。发送和接收工作遵循下列规则:(1)每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等于消息长度(2)对每个消息,B1,B2,Bn2都须各接收一次,读入各自的数据区内(3)m个缓冲区都满时,发送进程等待,没有可读消息时,接收进程等待。试用P、V操作组织正确的发送和接收工作。,119,提示:每个缓冲区只要写一次但要读n2次,因此,可以看成n2组缓冲区,每个发送者要同时写n2个缓冲区,而每个接收者只要读它自己的缓冲区。Sinn2=mSoutn2=0;,120,解,先将问题简化:设缓冲区的大小为1有一个发送进程A1有二个接收进程B1、B2设有信号量Sin1、Sin2初值为1设有信号量Sout1、Sout2初值为0,121,Bi:while(1)P(Souti);从缓冲区取数V(Sini);,A1:while(1)P(Sin1);P(Sin2);将数据放入缓冲区V(Sout1);V(Sout2);,122,向目标前进一步,设缓冲区的大小为m有一个发送进程A1有二个接收进程B1、B2设有信号量Sin1、Sin2初值为m设有信号量Sout1、Sout2初值为0,123,Bi:while(1)P(Souti);P(mutex);从缓冲区取数V(mutex);V(Sini);,A1:while(1)P(Sin1);P(Sin2);P(mutex);将数据放入缓冲区V(mutex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程设计优化及技术咨询服务合同
- 观革命电影有感450字14篇
- 直接引语和间接引语的转换技巧:初中英语课程教案
- 纪检委员培训课件
- 人教版八年级英语上册Unit 5完形填空专题复习练习题(含答案解析)
- 唐诗三百首鉴赏与实践教学方案
- 工业园区招商合同
- 早教课件在家听
- 企业间知识产权保护与交易合作合同
- 纪念塔课件教学课件
- 欧莱雅物流管理模式
- 2025年新疆生产建设兵团国有企业招聘笔试参考题库含答案解析
- 电商采购供货协议范本
- 《冲击波疗法》课件
- 冠心病护理模板(2025年独家版)
- 知识产权贯标体管理体系整体文件一二三级文件 手册程序制度文件
- 飞书项目管理
- 《中国世界遗产》课件
- 糖尿病眼底病变
- 《中医饮食护理》课件
- 银行运营管理新员工培训
评论
0/150
提交评论