欢迎来到天天文库
浏览记录
ID:42054888
大小:391.82 KB
页数:20页
时间:2019-09-07
《《进程管理》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第三章进程互斥与同步主要内容进程的同步和互斥机制的主要任务:控制并发执行的诸进程之间能有效地共享和相互协作,同时使并发执行的程序仍具有可再现性。进程互斥进程同步利用信号量机制解决具体问题进程间的关系并发系统中诸进程由于资源共享、进程合作,而产生进程之间的相互制约;又因共享资源的方式不同,而导致两种不同的制约关系:1间接制约关系(进程互斥)由于共享资源而引起的临界区内不允许并发进程交叉执行的现象。由共享公有资源而造成的对并发进程执行速度的间接制约2直接制约关系(进程同步)由于并发进程互相共享对方的私有资源所引起的直接制约。临界资源象打印
2、机这类资源一次只允许一个进程使用的资源称为临界资源。属于临界资源有硬件打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。当然还有一类象磁盘等资源,它允许进程间共享,即可交替使用,所以它称为共享资源,而临界资源又称独享资源。举例:临界资源P1:R1=count;R1=R1+1;count=R1;P2:R2=count;R2=R2+1;count=R2;进程P1和P2共享变量count,R1和R2是处理机中的寄存器若执行顺序变为P1:R1=count;P2:R2=count;P1:R1=R1+1;count=R1;P2:R2=R
3、2+1;count=R2;临界区Criticalsections多个进程共享临界资源时必须互斥使用,例如A和B两个进程都需要使用打印机,它们必须互斥使用。如果为了保证结果的正确性限制A、B二进程推进序列,规定进程A执行好再执行进程B,这样的限制就显得过死,因为它已不能保证进程A、B能并发执行,所以必须把限制减少到最少,以尽可能支持并发执行。为此把各进程分解,把访问临界资源的那段代码(称为临界区)与其它段代码分割开来,只对各种进程进入自己的临界区加以限制,即各进程互斥地进入自己的临界区。举例:临界区While(1){……entry_se
4、ction;//申请进入critical_section;//临界区exit_section;//声明退出………}进程同步机制进程在并发执行时为了保证结果的可再现性,各进程执行序列必须加以限制以保证互斥地使用临界资源,相互合作完成任务。多个相关进程在执行次序上的协调称为进程同步。用于保证多个进程在执行次序上的协调关系的相应机制称为进程同步机制。准则空闲让进忙则等待阻塞等待有限等待一个由临界区和剩余区1和剩余区2程序段组成的进程采用进程同步机制后的描述如下:{remaindersection1;剩余区1进入区;criticalsecti
5、on;临界区退出区;remaindersection2;剩余区2}进程同步机制在临界区前加上进入区,它负责对欲访问的临界资源状态进行检查,以决定是允许该进程进入临界区还是等待。同时在临界区后加上退出区,它负责释放临界资源以便其它等待该临界资源的进程使用。实现进程互斥和同步的信号量机制有软件方法、硬件指令方法、信号量机制和管程等。互斥-软件的忙等待方法-1算法1intflag[2]={0,0}CobeginvoidP0(void){while(1){while(flag[1]==1);flag[0]=1;……;//P0的临界区代码fla
6、g[0]=0;…….;//P0的非临界区代码}}voidP1(void){while(1){while(flag[0]==1);flag[1]=1;……;//P1的临界区代码flag[1]=0;…….;//P1的非临界区代码}}Coend互斥-软件的忙等待方法-2算法2intturn=0;CobeginvoidP0(void){while(1){while(turn!=0);……;//P0的临界区代码turn=1;…….;//P0的非临界区代码}}voidP1(void){while(1){while(turn!=1);……;//P1
7、的临界区代码turn=0;…….;//P1的非临界区代码}}Coend1.P0每小时进一次而P1每小时进入1000次2.若某进程发生意外永远不能运行…..互斥-软件的忙等待方法-3Peterson1981为了防止二进程为进入临界区而无限期等待,又设置变量turn,表示不允许进入临界区的编号,每个进程在先设置自己标志后再设置turn标志,不允许另一个进程进入,这时再同时检测另一个进程状态标志和不允许进入标志,这样可以保证当二个进程同时要求进入临界区时,只允许一个进程进入临界区。仅适用于两个进程互斥互斥-软件的忙等待方法-3算法3Intf
8、lag[2]={0,0}Intturn=0;CobeginvoidP0(void){while(1){flag[0]=1;//P0申请进入临界区turn=1;while(flag[1]==1&&turn==1);//等
此文档下载收益归作者所有