操作系统教程(第6版)课件6.6 PV操作与进程互斥.pptx
理解信号量的概念
掌握记录型信号量
掌握PV操作原语
应用PV操作解决进程互斥计算机操作系统6并发程序设计–6.3PV操作6.3.1PV操作与进程互斥
问题的提出TS或swap指令管理临界区,采用忙式轮询,效率低关开中断管理临界区,不便交给用户程序使用参考:操作系统访问硬件资源时采用“请求-等待-中断恢复”方式
信号量的构思一种可动态定义的软件资源:信号量核心数据结构:等待进程队列信号量声明:资源报到,建立队列申请资源的原语:若申请不得,调用进程入队等待归还资源的原语:若队列中有等待进程,需释放信号量撤销:资源注销,撤销队列
记录型信号量的定义记录型信号量:一种带数值的软资源typedefstructsemaphore{intvalue; //信号量值structpcb*list;//信号量等待进程队列指针}每个信号量建立一个等待进程队列每个信号量相关一个整数值正值表示资源可复用次数0值表示无资源且无进程等待负值表示等待队列中进程个数
P操作原语与V操作原语procedureP(semaphore:s){s=s–1; //信号量减去1if(s0)W(s); //若信号量小于0,则调用进程 被置成等待信号量s的状态}procedureV(semaphore:s){s:=s+1; //信号量加1if(s=0)R(s); //若信号量小于等于0,则释放一个等待信号量s的进程}
PV操作解决进程互斥问题框架semaphores;s=1;cobegin processPi{ …… P(s); 临界区; V(s); …… }coend;
PV操作解决机票问题IntA[m];Semaphores;s=1;cobeginprocessPi{ intXi; Li:按旅客定票要求找到A[j]; P(s); Xi=A[j]; If(Xi=1){Xi=Xi-1;A[j]=Xi;V(s);输出一张票; }else{V(s);输出票已售完;} gotoLi;}coend只有相同航班的票数才是相关的临界资源,所以用一个信号量处理全部机票会影响进程并发度P操作与V操作在执行路径上一一匹配
PV操作解决机票问题(改进)IntA[m];Semaphores[m];For(intj=0;jm;i++)s[j]=1;cobeginprocessPi{ intXi; L1:按旅客定票要求找到A[j]; P(s[j]); Xi=A[j]; If(Xi=1){Xi=Xi-1;A[j]=Xi;V(s[j]);输出一张票; }else{V(s[j]);输出票已售完;} gotoL1;}coend;