欢迎来到天天文库
浏览记录
ID:38745546
大小:406.31 KB
页数:45页
时间:2019-06-18
《进程同步与通信(7学时)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章进程同步与通信3.1进程互斥与同步3.2互斥算法3.3信号量(semaphore)3.4进程通信3.1进程同步与互斥3.1.1进程间的制约关系3.1.2进程的同步3.1.3进程的互斥3.1.1进程间的制约关系进程间的制约关系间接制约:进行竞争--独占分配到的部分或全部共享资源,“互斥”.进程间要通过某种中介发生联系,是无意识安排的,可发生在相交进程之间,也可发生在无关进程之间直接制约:进行协作--等待来自其他进程的信息,“同步”。进程间的相互联系是有意识的安排的,直接作用只发生在相交进程间3.1.2进程的同步(直接作用synchronism)指系统中一些进程需要相互
2、合作,共同完成一项任务。具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态。例:司机P1售票员P2REPEATREPEAT启动关门正常运行售票到站停开门UNTILFALSEUNTILFALSE3.1.3进程的互斥(间接作用mutualexclusion)临界资源:criticalresource系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量。返回由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥。3.2互
3、斥算法3.2.1临界区的访问过程3.2.2使用临界区应遵循的准则3.2.3进程互斥的软件方法3.2.4进程互斥的硬件方法实现对共享变量的正确访问。3.2.1临界区的访问过程entrysectionexitsectioncriticalsectionremaindersection临界区(criticalsection):进程中访问临界资源的一段代码。进入区(entrysection):在进入临界区之前,检查可否进入临界区的一段代码。如果可以进入临界区,通常设置相应"正在访问临界区"标志退出区(exitsection):用于将"正在访问临界区"标志清除。剩余区(remain
4、dersection):代码中的其余部分。3.2.2使用临界区应遵循的准则有空让进:当无进程在互斥区时,任何有权使用互斥区的进程可进入无空等待:不允许两个以上的进程同时进入互斥区多中择一:当没有进程在临界区,而同时有多个进程要求进入临界区,只能让其中之一进入临界区,其他进程必须等待有限等待:任何进入互斥区的要求应在有限的时间内得到满足让权等待:处于等待状态的进程应放弃占用CPU平等竞争:任何进程无权停止其它进程的运行,进程之间相对运行速度无硬性规定3.2.3进程互斥的软件方法一、单标志的方法turn=j;remaindersection1、算法思想设立一个公用整型变量tu
5、rn:描述允许进入临界区的进程标识在进入区循环检查是否允许本进程进入:turn为i时,进程Pi可进入;在退出区修改允许进入进程标识:进程Pi退出时,改turn为进程Pj的标识j;2、算法描述设有两个进程Pi、Pj,其中Pi访问临界区描述为:while(turn!=i);criticalsectionturn=j;remaindersection3、单标志方法缺点强制轮流进入临界区,没有考虑进程的实际需要。容易造成资源利用不充分:在Pi出让临界区之后,Pj使用临界区之前,Pi不可能再次使用临界区;1、算法思想设立一个标志数组flag[]:描述进程是否在临界区,初值均为FAL
6、SE。先检查,后修改:在进入区检查另一个进程是否在临界区,不在时修改本进程在临界区的标志;在退出区修改本进程不在临界区的标志;Pi:二、双标志、先检查的方法while(flag[j]);flag[i]=TRUE;criticalsectionflag[i]=FALSE;remaindersection2、算法描述设有两个进程Pi、Pj,其中Pi访问临界区描述为:3、双标志、先检查方法优缺点(1)优点:不用交替进入,可连续使用;(2)缺点:Pi和Pj可能同时进入临界区。在Pi和Pj都不在临界区时,假设按下面序列执行时,会同时进入:“Pi;Pj;Pi<
7、b>;Pj”。即在检查对方flag之后和切换自己flag之前有一段时间,结果都检查通过。这里的问题出在检查和修改操作不能连续进行。3.2.4进程互斥的硬件方法完全利用软件方法,有很大局限性(如不适于多进程),现在已很少采用。可以利用某些硬件指令--其读写操作由一条指令完成,因而保证读操作与写操作不被打断;Test-and-Set指令该指令读出标志后设置为TRUE:booleanTS(boolean*lock){booleanold;old=*lock;*lock=TRUE;returnold;}lock表示资源的两种状态
此文档下载收益归作者所有