欢迎来到天天文库
浏览记录
ID:58864879
大小:991.50 KB
页数:46页
时间:2020-09-30
《《操作系统》课件 第3章 进程同步与通信.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章进程同步与通信●进程同步与互斥●经典进程同步问题●管程●AND信号量●进程通信本章要点●3.1进程的同步与互斥同步与互斥的引入●OS引入进程后,由于进程的异步性,可能会导致程序执行结果的不确定性,使程序执行时出现不可再现性。●进程互斥与同步的主要任务是使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。进程同步的基本概念●同步:指多个进程中发生的事件存在着某种时序关系,它们必须按规定时序执行,以共同完成一项任务。●互斥:多个进程不能同时使用同一资源。●临界资源:某段时间内仅允许一个进程使用的资源。●临界区:每个进程中访问临界资源的
2、那段代码。例:P1,P2两进程共享变量COUNT(COUNT的初值为5)P1:{R1=COUNT;R1=R1+1;COUNT=R1;}P2:{R2=COUNT;R2=R2+1;COUNT=R2;}分析:●1》执行顺序P2→P1执行结果P1:COUNT为7,P2:COUNT为6。●2》执行顺序P1:{R1=COUNT}P2:{R2=COUNT}P1:{R1=R1+1;COUNT=R1}P2:{R2=R2=1;COUNT=R2}执行结果P1:COUNT为6,P2:COUNT为6。临界资源实例例:P1,P2两线程共享变量COUNT(COUNT的初值为5)P1:{R1=C
3、OUNT;R1=R1+1;COUNT=R1;}P2:{R2=COUNT;R2=R2+1;COUNT=R2;}用Bernstein条件考察R(P1)={R1,COUNT}W(P1)={R1,COUNT}R(P2)={R2,COUNT}W(P2)={R2,COUNT}R(P1)∩W(P2)<>{}临界资源实例●P1、P2不符合Bernstein条件●必须对程序的执行顺序施加某种限制While(1){●空闲让进当无进程处于临界区时,临界资源处于空闲状态。此时允许进程进入临界区。●忙则等待当已有进程进入临界区时,临界资源正在被访问,其他想进入临界区的进程必须等待。●有限等
4、待对于要求访问临界资源的进程,应保证在有效的时间内进入,以免进入“死等”状态。●让权等待当进程不能进入临界区时,应立即释放处理机,以免进程进入“忙等”。进入区临界区退出区剩余区}同步机制应遵循的准则访问临界资源的进程描述为互斥实现的硬件方法●禁止中断●专用机器指令●TS(TestandSet)指令●Swap指令//TS指令:booleanTS(lock);booleanlock;{booleantemp;temp=lock;lock=true;returntemp;}●Lock有两种状态:●当lock=false时,表示资源空闲;●当lock=true时,表示资源
5、正在被使用。●为了实现互斥,设布尔变量lock,其初值为false,表示资源空闲。利用TS指令实现互斥。●缺点:没有做到:“让权等待”。//TS指令的使用while(TS(lock))/*什么也不做*/;临界区;lock=false;剩余区;TS(TestandSet)指令互斥实现的软件方法//进程0while(turn!=0)//什么都不做;临界区;turn=1;剩余区;//进程1while(turn!=1)do//什么都不做‘;临界区;turn=0;剩余区;●设置公共整型变量turn,用于指示进入临界区的进程编号i(i=0,1)。使P0、P1轮流访问临界资源。
6、●缺点:强制性轮流进入临界区,不能保证“空闲让进”。——单标志算法//进程0while(flag[1])//什么都不做;flag[0]=true;临界区;flag[0]=false;剩余区;//进程1while(flag[0])//什么都不做;flag[1]=true;临界区;flag[1]=false;剩余区;●设置数组flag,初始时设每个元素为false,表示所有进程都未进入临界区。若flag[i]=true,表示进程进入临界区执行。●在每个进程进入临界区时,先查看临界资源是否被使用,若正在使用,该进程等待,否则才可进入。解决了“空闲让进”问题。●缺点:可能
7、同时进入临界区,不能保证“忙则等待”。用软件方法解决互斥问题——双标志、先检查算法//进程0flag[0]=true;while(flag[1])//什么也不做;临界区;flag[0]=false;剩余区;●两进程先后同时作flag[i]=true;●缺点:保证了不同时进入临界区,但又可能都进不去。不能保证“有空让进”。//进程1flag[1]=true;while(flag[0])//什么也不做;临界区;flag[1]=false;剩余区;——双标志、先修改后检查算法用软件方法解决互斥问题//进程0flag[0]=true;turn=1;while(flag[1
8、])&&(
此文档下载收益归作者所有