资源描述:
《《B进程同步》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2.3进程同步进程的同步关系进程的同步原则信号量1程序(间)并发执行的特征:程序运行时独占资源程序aN=3;print(N)N=N+1print(N)K=5;print(K)K=K+1print(K)程序b顺序执行ab打印结果:3456并发执行ab1234567812345678打印结果:3546资源非封闭2进程的同步进程同步问题的提出进程异步推进可能造成混乱混乱可能导致不可再现进程同步目标维持进程并发性以提高系统效率进程执行异步(断续)资源的非封闭(共享)结果不可再现进程同步进程间相互合作资源有效共享结果可再现3进程的同步关系2.3.1进程同步的
2、基本概念(※)进程间的两种主要关系临界资源与临界区进程同步必须遵循的原则4进程间的两种主要关系进程间的关系与进程间的独立性进程间的关系是在进程间相对独立的前提下发展的独立获得资源独立调度5进程间的同步关系(一)正常行车到站停车开车售票开车门关车门司机售票员合作合作检查车况维持秩序6获得打印数据进程间的同步关系(二)打印进程1打印进程2打印打印互斥获得打印数据7进程间的同步关系(三)计算进程打印进程计算结果送到Buffer从Buffer中取数Buffer互斥完成数据计算打印通知打印进程打印通知计算进程送下一个数合作8进程间的同步关系相互合作竞争资源司
3、机与售票员多个打印者计算者与打印者?其他例子流水线生产仓库两个队篮球比赛9两种形式的制约关系间接相互制约关系---------源于资源共享,产生互斥问题直接相互制约关系----------源于进程间合作,产生同步问题10正常行车到站停车开车售票开车门关车门司机售票员同步同步到站停车否是检查车况维持秩序否关车门是11同步实现初探(二)打印进程1打印进程2打印打印互斥获得打印数据获得打印数据打印机可用?设置打印机为不可用是否打印机可用?设置打印机为不可用是否12同步实现初探(三)计算进程打印进程计算结果送到Buffer从Buffer中取数Buffer互
4、斥互斥向打印进程发信号通知其从Buffer里取数Buffer空?否是完成数据计算打印向计算进程发信号通知其向Buffer送数Buffer空?否是合作13进程间的同步关系进程同步时面临的两种主要关系相互合作竞争资源司机与售票员多个打印者计算者与打印者事件、设备等抽象为资源对进程间关系的处理变为对资源的访问方式14临界资源临界资源临界资源一次只允许一个进程访问的资源资源状态为临界:0或1最简单的资源生产者-消费者的同步问题产品仓库生产者消费者生产者把产品生产出来,送入仓库。给消费者发信号,消费者得到信号后,到仓库取产品,取走产品后给生产者发信号……15
5、如果生产者和消费者共享的缓冲池容量为可以存放n件物品(n>1)。由于缓冲器可存n件物品,因此,必须指出缓冲器中什么位置已有物品可供消费,什么位置尚无物品可供生产者存放物品。可以用输入指针in和输出指针out分别指示生产者往缓冲器存物品和消费者从缓冲器取物品的相对位置,它们的初值为0,生产者和消费者按位置的顺序去存物品和取物品,缓冲池被循环使用。每当生产进程生产并投放一个产品后,输入指针加1,由于缓冲池循环使用,可表示为:in:=(in+1)modn;每当消费者进程取走一个产品后,输出指针加1,由于缓冲池循环使用,可表示为:out:=(out+1)m
6、odn;16当(in+1)modn=out时,表示缓冲池满;当in=out时,表示缓冲池空;整型变量counter表示缓冲池中产品的个数,初值为0;no-op是一条空操作指令,whileconditiondono-op语句表示重复测试条件(condicition),直至条件为false(假)。局部变量nextp:生产者用于暂时存放刚生产出的产品;局部变量nextc:消费者暂时存放要消费的产品;17Varn,integer;typeitem=…varbuffer:array[0,1,…,n-1]ofitemin,out:0,1,…,n-1;count
7、er:0,1,…,n;producer:repeat…produceaniteminnextp;…whilecounter=ndono-op;buffer[in]:=nextp;in:=(in+1)modn;counter:=counter+1;untilfalse;consumer:repeatwhilecounter=0dono-op;nextc:=buffer[out];out:=(out+1)modn;counter:=counter-1;consumertheiteminnextc;untilfalse;18上述两个操作用机器语言实现时,
8、可用下面的形式描述:register1:=counter;register1:=register1+1;counter:=