利用信号量和PV操作实现进程互斥和同步问题
进程同步与互斥应用例子

数据库
写者 { 写数据库; }
读者 { 读数据库; }
进程的互斥
分析:写进程writer、读进程reader因竞争数据库这个资源
而成为互斥关系。因为写进程执行时,不能执行其他读写 进程,所以还必须设置一个计数器统计读进程的个数。如 果是第一个读进程,就与写进程竞争数据库。如果是最后 一个读进程,就释放数据库。因计数器是一个临界资源, 所以多个读进程对计数器的操作又是互斥操作。
进程的同步
解:这是一个同步问题,信号量初值:S2=0,S3=0,S4=0, S5=0,S6=0
进程P1 执行P1 V(S2) V(S3) 进程P4 P(S4) 执行P4 V(S6) 进程P2 P(S2) 执行P2 V(S4) 进程P5 P(S5) 执行P5 V(S6) 进程P3 P(S3) 执行P3 V(S5) 进程P6 P(S6) P(S6) 执行P6
进程的同步
• 例1:假设有三个并发进程P,Q,R,其中P负责从输入设 备上读入信息并传送给Q,Q将信息加工后传送给R,R则负 责将信息打印输出。进程P、Q共享一个缓冲区,进程Q、R 共享另一个缓冲区。
3个进程P、Q、R P进程: 从输入设备上读入信息 将信息放入缓冲区1 Q进程: 从缓冲区1取出信息 将信息放入缓冲区2中 R进程: 从缓冲区2取出信息 将信息打印输出
进程的互斥
练习:过十字路口(单道)。
P4
P1
P3
P2
P1 { 通过路口; }
P2 { 通过路口; }
P3 { 通过路口; }
P4
{ 通过路口; }
进程的互斥
分析:进程P1、P2、P3、P4因竞争十字路口这个资源而成 为互斥关系。 设:信号量m表示十字路口资源,初值为1表示资源可用。
第三章进程同步与通信作业习题与答案

第三章一.选择题<50题>1.以下_B__操作系统中的技术是用来解决进程同步的.A.管道B.管程C.通道D.DMA2.以下_B__不是操作系统的进程通信手段.A.管道B.原语C.套接字D.文件映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__.A.3B.2C.1D.04.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V操作管理时信号量S的可能取值是_C__.A.3,2,1,0,-1B.2,1,0,-1,-2C. 1,0,-1,-2,-3D.4,3,2,1,05.下面有关进程的描述,是正确的__A__.A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V 操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误D.P、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__.A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B__.A.没有进程进入临界区B.有1个进程进入了临界区C. 有2个进程进入了临界区D. 有1个进程进入了临界区并且另一个进程正等待进入8. 信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__.A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C. 信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10. 并发是指_C__.A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11. 临界区是_C__.A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__.A.进程之间无关,系统是封闭的B.进程之间相互依赖相互制约C.进程之间可能有关,也可能无关D.以上都不对13. 在消息缓冲通信中,消息队列是一种__A__资源.A.临界B.共享C.永久D.可剥夺14. 以下关于P、V操作的描述正确的是__D_.A.机器指令B. 系统调用C.高级通信原语D.低级通信原语15.当对信号量进行V源语操作之后,_C__.A.当S<0,进程继续执行B.当S>0,要唤醒一个就绪进程C. 当S<=0,要唤醒一个阻塞进程D. 当S<=0,要唤醒一个就绪16.对临界区的正确论述是__D_.A.临界区是指进程中用于实现进程互斥的那段代码B. 临界区是指进程中用于实现进程同步的那段代码C. 临界区是指进程中用于实现进程通信的那段代码D. 临界区是指进程中访问临界资源的那段代码17. __A__不是进程之间的通信方式.A.过程调用B.消息传递C.共享存储器D.信箱通信18. 同步是指进程之间逻辑上的__A__关系.A.制约B.调用C.连接D.排斥19.正在运行的进程在信号量S上作P操作之后,当S<0,进程将进入信号量的__A__.A.阻塞队列B.提交队列C.后备队列D.就绪队列20.某个信号量S初值为3,当前值为-2,则等待在该信号量上的进程数为_B__个.A.1B.2C.3D.521.管理若干进程共享某一资源的相关临界区应满足三个要求,其中__A__不考虑.A一个进程可以抢占己分配给另一进程的资源B.任何进程不应该无限地逗留在它的临界区中C.一次最多让一个进程在临界区执行D.不能强迫一个进程无限地等待进入它的临界区22、_C__是只能由P和v操作所改变的整型变量.A共享变量B.锁 C.整型信号量D.记录型信号量23.对于整型信号量,在执行一次P操作时,信号量的值应_C__.A.不变B.加1C减1D.减指定数值24.在执行v操作时,当信号量的值__D_时,应释放一个等待该信号量的进程.A>0B.<0c.>=0D.<=025.Pv操作必须在屏蔽中断下执行,这种不可变中断的过程称为_B__.A初始化程序B.原语c.子程序D控制模块26.进程间的互斥与同步分别表示了各进程间的__A__.A.竞争与协作B.相互独立与相互制约c.不同状态D.动态性与并发性27.并发进程在访问共享资源时的基本关系为_B__.A.相互独立与有交往的B.互斥与同步C并行执行与资源共享D信息传递与信息缓冲28.在进程通信中,_B__常用信件交换信息.A.低级通信B.高级通信C.消息通信D.管道通信29.在间接通信时,用send<N,M>原语发送信件,其中N表示_C__.A.发送信件的进程名B.接收信件的进程名 C.信箱名D.信件内容30.实现进程互斥时,用_C__对应,对同一个信号量调用Pv操作实现互斥.A.一个信号量与一个临界区B.一个信号量与—个相关临界区C.一个信号量与一组相关临界区 D.一个信号量与一个消息31.实现进程同步时,每一个消息与一个信号量对应,进程__D_可把不同的消息发送出去. A.在同一信号量上调用P操作B在不同信号量上调用P操作在同一信号量上调用v操作D.在不同信号量上调用v操作32.临界区是指__D_.A.并发进程中用于实现进程互斥的程序段B.并发进程中用于实现进程同步的程序段C.并发进程中用户实现进程通信的程序段D.并发进程中与共享变量有关的程序段33.相关临界区是指__D_.A.一个独占资源B.并发进程中与共享变量有关的程序段C.一个共享资源D.并发进程中涉与相同变量的那些程序段34.P、V操作是__A__.A.两条低级进程通信原语B.两组不同的机器指令C.两条系统调用命令D.两条高级进程通信原语35.对进程的管理和控制使用_B__.A.指令B.原语C.信号量D.信箱通信用P、V操作管理临界区时,信号量的初值应定义为_C__.A.一1B.0C.1D.任意值37.用V操作唤醒一个等待进程时,被唤醒进程的状态变为_B__.A.等待B.就绪C.运行D.完成38.进程间的同步是指进程间在逻辑上的相互_B__关系.A.联接B.制约 C.继续D.调用39.__D_是一种只能进行P操作和V操作的特殊变量.A.调度B.进程C.同步D.信号量40.用P、V操作可以解决__A__互斥问题.A.一切B.某些C.正确D.错误41.对于两个并发进程,设互斥信号量为mutex,若mutex=0,则_B__.A.表示没有进程进入临界区B.表示有一个进程进入临界区C.表示有一个进程进入临界区,另一个进程等待进入D.表示有两个进程进入临界区42.两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来消息,或者建立某个条件后再向前执行,这种制约性合作关系被称为进程的__A__.A.同步B.互斥C.调度D.执行43.为了进行进程协调,进程之间应当具有一定的联系,这种联系通常采用进程间交换数据的方式进行,这种方式称为__D_.A.进程互斥B.进程同步C.进程制约D.进程通信44. 两个进程合作完成一项任务.在并发执行中,一个进程要等待其合作伙伴发来消息,或建立某个条件后再运行,这种制约性合作关系被称为进__A__.A.同步B.执行C.互斥D.调度45. 为了进行进程协调,进程之间应当具有一定的联系,这种联系通常采用进程间交换数据的方式进行,这种方式通常称为_C__.A. 进程互斥B. 进程同步C. 进程通信D. 进程制约46.不是信号量能实现的功能是__D_.A.进程同步B.进程互斥C.执行的前趋关系D.进程的并发执行47. 若P、V操作的信号量S初值为2,当前值为-1,则表示有_B__等待进程.A.0个B.1个C.2个D.3个在进程通信中,常_C__通过变量、数组形式来实现.A.高级通信B.消息通信C.低级通信D.管道通信49.管道通信是以_B__进行写入和读出.A.消息为单位B.自然字符流C.文件D.报文50.进程间的基本关系为_B__.A.相互独立与相互制约B.同步与互斥C.行执行与资源共享D.信息传递与信息缓冲二.填空题<50空>1. 进程的_顺序性_____是指进程在顺序处理器上的执行是按顺序进行的.2.当一个进程独占处理器顺序执行时,具有__封闭性____和__可再现件____两个特性. 3.进程的封闭性是指进程的执行结果只取决于__进程本身____,不受外界影响.4.进程的可再现性是指当进程再次重复执行时,必定获得___相同___的结果.5.一个进程的工作在没有全部完成之前,另一个进程就可以开始工作,则称这些进程为__可同时执行的___.6.临界区是指并发进程中与__共享变量____有关的程序段.7.__相关临界区____是指并发进程中涉与到相同变量的那些程序段.8.只要涉与相同变量的若干进程的相关临界区__互斥执行____,就不会造成与时间有关的错误.9.进程的___互斥___是指当有若干进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用.10.Pv操作是在一个信号量上进行的__不可被中断____的过程,这种过程也称为__原语___. 11.利用P、v操作管理相关临界区时,必须成对出现,在进入临界区之前要调用__ P操作____,在完成临界区操作后要调用__ v操作____.12.进程的___同步___是指并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消息.13.__同步机制____能把它进程需要的消息发送出去,也能测试自己需要的消息是否到达. 14.P、v操作不仅是实现___进程互斥___的有效工具,而且也是一种简单而方便的___同步___工具.15.用P、v操作实现进程同步时,调用___ P操作___测试消息是否到达,调用__ v操作____发送消息.24.用P、v操作实现生产者消费者之间的同步时,在访问共享缓冲区的__前____和__后____分别调动P操作和v操作.16.进程的互斥实际上是进程__同步____的一种持殊情况.17.进程的互斥是进程间___竞争___共享资源的使用权,其结果没有__固定的必然关系____,而进程的同步则在共享资源的并发进程之间有一种__必然的____依赖关系.18.Pv操作也可看作为进程间的一种通信方式,由于只交换了少量的信息,故称为__低级通信方式____19.通过专门的通信机制实现进程间交换大量信息的通信方式称为__进程通信____. 20.采用高级通信方式时,进程间用__信件____来交换信息.21.最基本的通信原语有两条,它们是__ send ____原语和___ receive ___原语.22.进程通信方式有两种:__直接通信____和_间接通信_____.23.直接通信是固定在__一对____进程之间通信,而间接通信以信箱为媒体实现通信. 24.一个信息可以由__信箱说明____和__信箱体____两部分组成.25.进程间通过信件交换信息,可实现___进程同步___.26.并发带来的问题全局变量的共享问题、操作系统很难最佳的管理资源的分配、定位程序的错误很困难、保证进程执行结果的正确性.27.并发原理有并发带来的问题、进程的交互、进程互斥、进程同步.28.管理的结构有条件变量、管理的结构.29.进程通信表现在效率低、通信对用户不透明.30.Monitors:管程.三.名词解释<20题>1.进程通信:进程之间的信息交换.2.临界区:操作系统中把并发进程中访问临界资源那段代码.3.临界资源:操作系统中将一次仅允许一个进程访问的资源.4.进程同步:指多个进程中发生的事件存在着某种时序关系必须协同动作、相互配合,以共同完成一个任务.5.信号量机制:它是一种公认的卓有成效的进程同步机制.6.管程:一个共享资源的数据结构以与一组能为并发进程在其上执行的针对该资源的一组操作,这组操作能同步进程和改变管程中的数据.7.CWAIT<C>:调用进程的执行在条件C上挂起,管程现在可被另一个进程使用.8.CSIGNAL<C>:恢复在cwait上因为某些条件而挂起的进程的执行.9.Message:报文.10.Client/Server Interaction:客户∕服务器交换.11.单向通信:只允许发送进程向接收进程发送消息,反之不行.12.双向通信:允许一个进程向另外一个进程发送消息,也可以反过来由另一个进程向发过消息的进程回送消息.13.点对点方式:用一条链路将两个进程连接,通信的完成只与这两个进程有关.14.多点方式:用一条链路连接多个进程〔>2〕.15.无容量通信链路:通信链路上没有用于暂存数据的缓冲区,因而不能暂存任何消息.16.有容量通信链路:通信链路中设置了缓冲区,因而可以暂存数据,缓冲区的数目越大,通信链路的容量越大.17.链路的容量:通信链路上是否有用于暂存数据的缓冲区.18.阻塞方式:操作方要等待操作结束,才能继续执行.19.非阻塞方式:操作方在提交后立即返回,不需要等待.20.管道:指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称为pipe 文件.四.简答题<20题>以下进程之间存在相互制约关系吗?是什么制约关系?为什么?⑴几个同学去图书馆借同一本书;⑵篮球比赛中两队同学争抢篮板球;⑶果汁流水线生产中捣碎、消毒、灌装、装箱等、各道工序;⑷商品的入库和出库;⑸工人做工与农民种粮.答:〔1〕答:存在互斥关系,因为同一本书只能借给一个同学.〔2〕答:存在互斥关系,因为篮球只有一个,两队只能有一个队抢到球〔3〕答:存在同步关系,因为最后一道工序的开始依赖于前一道工序的完成.〔4〕答:存在同步关系,因为商品若没有入库就无法出库,若商品没有出库,装满了库房,也就无法再入库.〔5〕答:工人与农民之间没有相互制约关系.说明PV存在为什么要设计成原语?答:用信号量S表示共享资源,其初值为1表示有一个资源.设有两个进程申请该资源,若其中一个进程先执行P操作.P操作中的减1操作有3跳与其指令组成:去S送寄存器R;R-1送S.若P操作不用原语实现,在执行了前述三条指令中的2条,即还未执行R送S时〔此时S值仍为1〕,进程被剥夺CPU,另一个进程执行也要执行P操作,执行后S的值为0,导致信号量的值错误.正确的结果是两个进程执行完P操作后,信号量S的值为-1,进程阻塞.设有一个售票大厅,可容纳200人购票.如果厅内不足200人,则允许进入,超过则在厅外等候;售票员某时只能给一个购票者服务,购票者买完票后就离开.试问:⑴购票者之间是同步关系还是互斥关系?⑵用PV操作描述购票者的工作过程.答:购票者之间是互斥关系.<2> semaphore empty=200;semaphore mutex=1;void buyer<>{P<empty>;P<mutex>;购票;V<mutex>;V<empty>;}分析生产者消费者问题中多个P操作颠倒引起的后果.答:semaphore mutex=1;semaphore empty=n;semaphore full=0;int i,j;ITEM buffer[n];ITEM data_p,data_c;void producer<>void consumer<>{while<true>{while<true>{produce an item in data_p;{P<full>;P<mutex>;P<mutex>;P<empty>;data_c=buffer[j];buffer[i]=data_p;j=<j+1>%n;i=<i+1>%n;V<mutex>;V<mutex>;V<empty>;V<full>;}consume the item in data_c}}}请简述进程的互斥与同步之间的异同.答:进程的同步与互斥是指进程在推进时的相互制约关系.为了保证进程的正确运进程之间的制约关系体现为:进程的同步和互斥.进程同步:它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系.为进程之间的直接制约关系.在多道环境下,这种进程间在执行次序上的协调是必不可少的.行以与相互合作的进程之间交换信息,需要进程之间的通信.进程互斥:主要源于资源共享,是进程之间的间接制约关系.6.什么是进程的顺序性和并发性?答:进程的顺序性是指进程在顺序的处理器上严格地按顺序执行.若系统中存在一组可同时执行的过程,则该组程序具有并发性.可同时执行的进程是指这些进程执行时在时间上是重叠的,即一个进程的工作没有全部完成之前,另一个进程就可以开始工作.7.为什么并发进程执行时可能会产生与时间有关的错误?如何避免?答:有交往的并发进程可能会同时使用共享资源,如果对这种情况不加控制,由于进程占用处理器的时间、执行的速度和外界的影响等,就会引起与时间有关的错误.只要使若干并发进程的相关临界区互斥执行,就可避免造成这类错误.8.简述临界区的相关临界区的概念.答:临界区是指并发进程中与共享变量有关的程序段.相关临界区是指并发进程中涉与到相同变量的那些程序段.9.管理相关临界区有些什么要求?答:管理相关临界区有三点要求:<1>一次最多让一个进程在临界区执行;<2>任何一个进入临界区执行的进程必须在有限的时间内退出临界区;<3>不能强迫一个进程无限地等待进入它的临界区.10.用Pv操作实现进程间同步与互斥应注意些什么?答:<1>对每一个共享资源<含变量>都要设立信号量,互斥时对一个共享资源设一个信号量,同步时对一个共享资源可能要设两个或多个信号量,视由几个进程来使用该共享变量而定.<2>互斥时信号量的初值可大于或等于1,同步时,至少有一个信号量的初值大于等于1.<3>Pv操作一定要成对调用,互斥时在临界区前后对同一信号量作Pv操作,同步时则对不同的信号量作Pv操作,Pv操作的位置一定要正确.<4>对互斥和同步混合问题.PV操作可能会嵌套,—般同步的Pv操作在外,互斥的Pv操作在内.11.何谓进程通信?最基本的通信原语有哪些?答:通过专门的通信机制实现进程间交换大量信息的通信方式称为进程通信.最基本的通信原语有send原语和receive原语,前者负责发送信件,后者负责接收信件.12.直接通信与间接通信有何区别?答:直接通信是固定在一对进程间进行的,而间接通信时以信箱为媒体实现通信.因此在send 和receive原语中,第一个参数互不相同.直接通信时分别为接收者进程名和发送者进程名,而间接通情时均为信箱名.13.线程与进程的根本区别是什么?答:在采用线程技术的操作系统中,线程与进程的根本区别在于:进程是资源的分配单位,而线程是调度和执行单位.并发带来的问题有哪些?答:①全局变量的共享问题②操作系统很难最佳的管理资源的分配③定位程序的错误很困难④保证进程执行结果的正确性.进程交互的3中情况?答:①进程之间不知道对方的存在.②进程间接知道对方.③进程直接知道对方存在.临界区有哪些进入原则?答:①空闲让进.②忙则等待.③让权等待.④有限等待.对共享资源的读写操作的限制条件是什么?答:⑴允许任意多的读进程同时读.⑵一次只允许一个写进程进行写操作.⑶如果有一个写进程正在进行写操作,禁止任何读进程进行读操作.在生产者―消费者问题中需要注意以下几个问题?答:⑴把共享缓冲区池中的N个缓冲区视为临界资源,进程在使用时,首先要检查是否有其他进程在临界区,如果确认没有时再进入.⑵信号量full表示有数据的缓冲区的数量,初值为0.⑶多个P操作的次序不能颠倒.管程的特征有哪些?答:⑴管程内部的局部变量只能通过管程中的过程进行访问,其他任何外部过程都不能对其进行访问.⑵进程只能通过调用管程的某一个过程才能进入管程,这样可以保证所有进入管程的进程有统一的入口.⑶任何时刻,只能有一个进程在管程中执行,其他调用管程的任何进程都被挂起,以等待管程变为可用,即对管程实施互斥访问.进程通信主要表现在那些方面?答:⑴效率低.。
详解进程同步与互斥机制

详解进程同步与互斥机制⽬录⼀、什么是进程同步⼆、什么是进程互斥三、常见的进程同步与互斥机制⼀、什么是进程同步在多道批处理系统中,多个进程是可以并发执⾏的,但由于系统的资源有限,进程的执⾏不是⼀贯到底的,⽽是⾛⾛停停,以不可预知的速度向前推进,这就是进程的异步性。
那么,进程的异步性会带来什么问题呢?举个例⼦,如果有 A、B 两个进程分别负责读和写数据的操作,这两个线程是相互合作、相互依赖的。
那么写数据应该发⽣在读数据之前。
⽽实际上,由于异步性的存在,可能会发⽣先读后写的情况,⽽此时由于缓冲区还没有被写⼊数据,读进程 A 没有数据可读,因此读进程 A 被阻塞。
进程同步(synchronization)就是⽤来解决这个问题的。
从上⾯的例⼦我们能看出,⼀个进程的执⾏可能影响到另⼀个进程的执⾏,所谓进程同步就是指协调这些完成某个共同任务的并发线程,在某些位置上指定线程的先后执⾏次序、传递信号或消息。
再举个⽣活中的进程同步的例⼦,你想要喝热⽔,于是你打了⼀壶⽔开始烧,在这壶⽔烧开之前,你只能⼀直等着,⽔烧开之后⽔壶⾃然会发⽣响声提醒你来喝⽔,于是你就可以喝⽔了。
就是说⽔烧开这个事情必须发⽣在你喝⽔之前。
注意不要把进程同步和进程调度搞混了:进程调度是为了最⼤程度的利⽤ CPU 资源,选⽤合适的算法调度就绪队列中的进程。
进程同步是为了协调⼀些进程以完成某个任务,⽐如读和写,你肯定先写后读,不能先读后写吧,这就是进程同步做的事情了,指定这些进程的先后执⾏次序使得某个任务能够顺利完成。
⼆、什么是进程互斥同样的,也是因为进程的并发性,并发执⾏的线程不可避免地需要共享⼀些系统资源,⽐如内存、打印机、摄像头等。
举个例⼦:我们去学校打印店打印论⽂,你按下了 WPS 的 “打印” 选项,于是打印机开始⼯作。
你的论⽂打印到⼀半时,另⼀位同学按下了 Word 的 “打印” 按钮,开始打印他⾃⼰的论⽂。
想象⼀下如果两个进程可以随意的、并发的共享打印机资源,会发⽣什么情况?显然,两个进程并发运⾏,导致打印机设备交替的收到 WPS 和 Word 两个进程发来的打印请求,结果两篇论⽂的内容混杂在⼀起了。
PV操作实现进程同步互斥问题的方法

2o 0 9年 计 算 机 考 研专 业 基 础 课 首 次 全 国 统考 , 作 系 统 被 列 为考 研 科 目, P 操 而 V操 作 是 操 作 系 统 中 的关 键 问题 , 多 同学 在 应 很 用 P V操 作 解 题 是 常 常无 从 下 手 。为 使 学 生 更 好 的 理 解 P 操 作 的 实 质 , 高 解 题 能 力 , 者 提 出用 资 源 的 观 点 和 锁 机制 的观 点 分 V 提 笔
Ab ta t s r c :Th spa rd suse lknd fs l ton sng P & V rm iie nd s m a or r fe e n pr c s ync o iai n a u i pe ic s sAl i so u i su i o p i t sa e ph ea e o rd i o e ss hr n z to nd m — v t a xcu i u le lson , sd on t e fc h tt e sg lm e h ns nd PV pe ai n a c o di t hepr c s yn h onz fo ti a rpr v d Bae h a tt a h ina c a im a o rto c n o r naet o ess c r ie n, sp pe o i — i h
关键词 : 程 ; 进 同步 ; 互斥 ; 号 量 机 制 信 中图 分 类号 : 文 献 标 识码 : A 文章 编 号 :0 9 3 4 (0 0 2 — 9 0 0 1 0 — 0 42 1 )5 6 7 — 4
Ac i v u u lE cu i n a d S n h o ia in i o e swi V e a i n h e e M t a x l so n y c r n z t n Pr c s t P Op r t o h o
[教材]第6章并发进程练习题
![[教材]第6章并发进程练习题](https://img.taocdn.com/s3/m/ac9c162266ec102de2bd960590c69ec3d5bbdb86.png)
第6章并发进程1.并发进程中与共享变量有关的程序段称为( B )A.共享子程序B.临界区C.管理区D.公共数据区2.临界区是指( A )A.与共享变量有关的程序段B.公共数据区C.系统管理区D.临时的工作区3.用PV操作管理互斥使用的资源时,信号量的初值应定义为( B )A.任意整数B.1 C.O D.-14.对具有相关临界区的n个并发进程采用PV操作实现进程互斥时,信号量初值应定义为( B )A. 0B. 1C. nD.n-15.用PV操作来管理可供n个进程共享的资源时,若信号量S的初值定义为m,则信号量S可能出现的最小值为( B )A. n-mB. m-nC. 0D. –m6.进程从等待状态进入就绪状态可能是由于( C )A.现运行进程运行结束B.现运行进程执行了P操作C.现运行进程执行了V操作D.现运行进程时间片用完7.用V操作唤醒一个等待进程时,被唤醒进程的状态应变成( B )A.执行态B.就绪态C.运行态D.收容态8.正在执行的进程由于其时间片用完而被暂停运行,此时其进程应从运行态变为( A )A. 就绪态B. 等待态C. 运行态D. 后备态9.资源的静态分配算法在解决死锁问题中是用于( A )A.防止死锁B.避免死锁C.检测死锁D.解除死锁10.为了避免系统可能出现死锁,分配资源可以采用的算法是( B )A. 静态分配B. 银行家C. 按序分配D. 抢夺式11.系统出现死锁时一定同时保持了四个必要条件,对资源采用按序分配算法后可破坏的条件是( D )A.互斥B.占有且等待C.可抢占资源D.循环等待12.任何两个并发进程之间( D )A.一定存在互斥关系B.一定存在同步关系C.一定彼此独立无关D.可能存在同步或互斥关系13.多个进程间可通过 P 、 V 操作交换信息实现同步和互斥,因此信号量机制是进程间的一种( B )A. 高级通信方式B. 低级通信方式C. 消息缓冲通信方式D. 管道通信方式14.并发进程指的是一组( A )A.各自独立执行的进程B.必须依次执行的进程C.可同时执行的进程D.不能中断的进程15.设某类资源有5个,由3个进程共享,要使系统不会死锁则每个进程最多可申请的资源数是( B )A.1 B.2 C.3 D.416.进程间采用信箱通信方式时, send原语把发送者的信件存放到( A )A. 信箱B.消息缓冲区C.接收者的PCB D.指定的工作区17.产生系统死锁的原因可能是由于( C )A. 进程释放资源B. 一个进程进入死循环C. 多个进程竞争资源出现了循环等待D. 多个进程竞争共享型设备18.进程之间的同步是指进程间在逻辑上的相互( A )A. 制约关系B. 排斥关系C. 调用关系D. 转移关系19.用PV操作管理临界区时把信号量的初值定义为1,现已有一个进程在临界区,但有n个进程在等待进入临界区,这时信号量的值为( C )A.-1 B.1 C.-n D.n20.临界区是指并发进程中访问共享变量的( D )A. 管理信息段B. 信息存储段C. 数据段D. 程序段21.在多进程的并发系统中,不会因竞争下列资源而产生死锁的是( C )A. 打印机B. 磁带机C. 磁盘D. CPU22.并发进程指的是一组( C )A.各自独立执行的进程B.必须依次执行的进程C.可同时执行的进程D.不能中断的进程1.对独占设备往往采用分配方式。
操作系统常见问题解答

操作系统常见问题解答计算机操作系统,是电子计算机系统中负责支撑应用程序运行环境以及用户操作环境的系统软件,同时也是计算机系统的核心与基石。
接下来是小编为大家收集的操作系统常见问题解答,希望能帮到大家。
操作系统常见问题解答(一)进程与线程的区别,线程安全”怎么理解?进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应得并发性。
进程和线程的区别在于:一个程序至少有一个进程,一个进程至少有一个线程。
线程的划分尺度小于进程,使得多线程程序的并发性高,另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。
但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。
但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。
这就是进程和线程的重要区别。
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。
如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
线程安全问题都是由全局变量及静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。
另解说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
用信号量机制来解决进程的同步与互斥:PV操作

用信号量机制来解决进程的同步与互斥:PV操作首先确定进程间的关系,然后确定信号量及其值。
判断进程间是否互斥的关键:看进程间是否共享某一公有资源,一个公有资源与一个信号量相对应。
确定信号量的值是一个关键点,它代表了可用资源实体数。
举例:票大厅容纳的人数限制为20人,少于20人时购票者可以进入,否则要在厅外等候。
进程间是同步时:是否存在合作关系,是否需要互通消息首先判断进程间的关系为同步的,且为各并发进程设置私有信号量,然后为私有信号量赋初值,最后利用PV原语和私有信号量规定各进程的执行顺序。
举例:公交车上司机与售票员的行为,司机到站停车后,售票员方可开门,售票员关门后,司机方可开车。
进程同步应用示例讲解:1桌上有一个盘子,可以存放一个水果。
父亲总是把苹果放在盘子中,母亲总是把香蕉放在盘子中;一个儿子专等吃盘中的香蕉,一个女儿专等吃盘中的苹果。
1)系统要设几个进程来完成这个任务?各自的工作是什么?2)这些进程间有什么样的相互制约关系?3)用P,V操作写出这些进程的同步算法(注:标明信号量的含义)。
1)需要四个进程进程描述:Father:父亲放置苹果的进程;Mother:母亲放置香蕉的进程;Son:儿子吃香蕉的进程;Daughter:女儿吃苹果的进程。
分析:四人公用一个盘子;盘子每次只能放一个水果,当盘子为空时,父母均可尝试放水果,但一次只能有一人成功;盘中是香蕉,儿子吃,女儿等;盘中是苹果,女儿吃,儿子等。
2)进程之间既有互斥又有同步关系。
Father进程和Mother进程要互斥的向盘中放水果,应设置一互斥信号量dish,初值为1,表示盘子为空;Father进程要设置同步信号量apple,用于给Daughter进程传送消息,初值为0,表示还没有消息产生,即没有放苹果;相应Daughter进程也要向父、母进程传送盘子为空的消息。
Mother进程要设置同步信号量banana,用于给Son进程传送消息,初值为0,表示还没有消息产生,即没有放香蕉。
南昌大学操作系统实验报告材料二编程模拟进程间地同步和互斥

南昌大学实验报告---(2)编程模拟进程间的同步和互斥学生姓名:张皓然学号: 5501215001 专业班级:本硕151 实验类型:□验证□综合■设计□创新实验日期: 2017.5.5 实验成绩:一、实验目的通过实验加强对进程同步和互斥的理解,并掌握进程(线程)的创建和调用方法。
学会使用信号量解决资源共享问题。
学生可以自己选择在Windows或Linux系统下编写。
二、实验内容(一)以下为Linux系统下参考程序,请编译、运行并观察程序的输出,并分析实验结果,写出实验报告。
#include<stdio.h>//标准输入输出头文件#include<stdlib.h>//standard library标准库头文件#include<unistd.h>//POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数。
#include<time.h>//time.h是C标准库头文件,主要是一些和时间相关的函数#include<sys/types.h>//基本系统数据类型#include<sys/wait.h>//declarations for waiting#include<linux/sem.h>//Semaphore operation flags#define NUM_PROCS 5//5个子进程#define SEM_ID 250//信号量#define FILE_NAME "/tmp/sem_aaa"#define DELAY 4000000void update_file(int sem_set_id, char *file_path, int number){struct sembuf sem_op;FILE *file;//建立一个文件指针//等待信号量的数值变为非负数,此处设为负值,相当于对信号量进行P操作sem_op.sem_num=0;sem_op.sem_op=-1;sem_op.sem_flg=0;semop(sem_set_id,&sem_op,1);/*操作一组信号,进程的标识符号为sem_set_id,sem_op是结构指针。
生产者消费者问题模拟实现(z)

生产者-消费者实验1.1实验目的和要求实验目的操作系统的基本控制和管理控制都围绕着进程展开,其中的复杂性是由于支持并发和并发机制而引起的。
自从操作系统中引入并发程序设计后,程序的执行不再是顺序的,一个程序未执行完而另一个程序便已开始执行,程序外部的顺序特性消失,程序与计算不再一一对应。
并发进程可能是无关的,也可能是交互的。
然而,交互的进程共享某些变量,一个进程的执行可能会影响其他进程的执行结果,交互的并发进程之间具有制约关系、同步关系。
其中典型模型便是生产者-消费者模型。
本实验通过编写和调试生产者-消费者模拟程序,进一步认识进程并发执行的实质,加深对进程竞争关系,协作关系的理解,掌握使用信号量机制与P、V操作来实现进程的同步与互斥。
实验要求1.用高级语言编写一个程序,模拟多个生产者进程和多个消费者进程并发执行,并采用信号量机制与P、V操作实现进程间同步与互斥。
2.撰写实验报告,报告应包含以下内容:(1)实验目的;(2)实验内容;(3)设计思路;(4)程序流程图;(5)程序中主要数据结构和函数说明;(6)带注释的源程序代码;(7)程序运行结果及分析;(8)实验收获与体会。
1.2预备知识生产者—消费者问题生产者—消费者问题表述如下:如图3.1所示,有n个生产者和m个消费者,连接在具有k个单位缓冲区的有界环状缓冲上,故又称有界缓冲问题。
生产者不断生成产品,只要缓冲区未满,生产者进程pi所生产的产品就可投入缓冲区;类似的,只要缓冲区非空,消费者进程cj就可以从缓冲区取走并消耗产品。
图 3.1 生产者—消费者问题示意图著名的生产者—消费者问题(producer-consumer problem)是计算机操作系统中并发进程内在关系的一种抽象,是典型的进程同步问题。
在操作系统中,生产者进程可以是计算进程、发送进程,而消费者进程可以是打印进程、接收进程等,解决好生产者—消费者问题就解决了一类并发进程的同步问题。
进程的PV操作详解

进程的PV操作详解部门: xxx时间: xxx整理范文,仅供参考,可下载自行编辑进程的PV操作在操作系统中,P、V操作是进程管理中的难点。
这是1968年荷兰人Dijkstra给出的一种解决并发进程间互斥和同步关系的通用方法。
1. P、V操作的意义定义了信号量及其上的P操作和V操作,来实现并发进程间的同步和互斥,甚至可以用来管理资源的分配。
P、V操作因交换的信息量少,属于进程的低级通信。
b5E2RGbCAP2. 什么是信号量?信号量<semaphore)是由一个值和一个指针构成的数据结构。
值为整型变量,表示信息量的值;指针指向进程控制块<PCB)队列的队头,表示等待该信号量的下一个进程。
如下图所示。
p1EanqFDPw信号量的一般结构及PCB队列信号量的值与相应资源的使用情况有关。
当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
注意,信号量的初值不能为负,且其值只能由P、V操作来改变。
DXDiTa9E3d3. P、V操作的含义P、V操作由P操作原语和V操作原语组成<原语是不可中断的过程),对信号量S进行操作,具体定义如下:P<S):①将信号量S的值减1,即S=S-1;②如果S≥0,则该进程继续执行;否则该进程状态置为阻塞状态,进程PCB排入信号量PCB队列末尾,放弃CPU,等待V操作的执行。
RTCrpUDGiTV<S):①将信号量S的值加1,即S=S+1;②如果S≤0,释放信号量队列中第一个PCB所对应的进程,将进程状态由阻塞态改为就绪态。
执行V操作的进程继续执行。
5PCzVD7HxA一般来说,信号量S≥0时,S表示可用资源的数量。
执行一次P 操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。
而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S≤0,表示有某些进程正在等待该资源,因此要唤醒一个阻塞状态的进程,使之成为就绪状态。
操作系统pv操作

引言概述:正文内容:一、概念介绍1.pv操作的定义及由来:pv操作是一种用于进程间同步和互斥的操作,其中p表示“pass”(等待)操作,v表示“vacate”(释放)操作。
它最早由Dijkstra在1965年提出,并被广泛应用于操作系统中的进程间通信。
2.信号量的概念及与pv操作的关系:信号量是一种计数器,用于同步和互斥。
pv操作是通过操作信号量来实现进程间的同步与互斥,其中p操作用于申请资源时的等待,v操作用于释放资源。
3.pv操作的作用:pv操作允许进程进行同步和互斥操作,保证资源的正确访问顺序,避免竞态条件和死锁问题。
二、pv操作的使用场景1.生产者消费者问题:在多线程或多进程环境下,生产者和消费者之间的数据通信和同步是一个常见的问题。
pv操作可以用来同步生产者和消费者的操作,确保生产者和消费者的操作顺序正确。
2.进程间互斥访问共享资源:当多个进程需要同时访问某个共享资源时,需要使用pv操作来进行互斥操作,避免多个进程同时访问导致数据不一致的问题。
3.进程间信号通知:pv操作也可以用于进程间的信号通知,例如一个进程等待某个事件的触发,另一个进程通过v操作来触发该事件。
4.进程管道通信:pv操作也可以用于进程之间通过管道进行通信,通过p操作来等待管道中有数据可读,通过v操作来通知管道中有新数据写入。
5.进程调度和同步:操作系统中的进程调度和同步往往需要使用pv操作来保证进程的正确执行顺序和互斥性。
三、pv操作的实现原理与方法1.pv操作的实现原理:pv操作的实现通常依赖于操作系统中的信号量机制。
当一个进程进行p操作时,它会尝试将指定的信号量值减1,若结果为负,则表示资源不可用,该进程会被阻塞。
当一个进程进行v操作时,它会将指定的信号量值加1,并唤醒一个等待中的进程。
2.pv操作的实现方法:pv操作可以通过系统调用来进行实现,例如在Unixlike系统中,可以使用semop()系统调用来进行pv操作。
实验3--读者-写者问题与进程同步

实验3 读者/写者问题与进程同步3.1 实验目的理解临界区和进程互斥的概念,掌握用信号量和PV操作实现进程互斥的方法。
3.2 实验要求在linux环境下编写一个控制台应用程序,该程序运行时能创建N个线程〔或者进程〕,其中既有读者线程又有写者线程,它们按照事先设计好的测试数据进行读写操作。
请用信号量和PV操作实现读者/写者问题。
读者/写者问题的描述如下:有一个被许多进程共享的数据区,这个数据区可以是一个文件,或者主存的一块空间〔比方一个数组或一个变量〕,甚至可以是一组处理器寄存器。
有一些只读取这个数据区的进程〔reader〕和一些只往数据区中写数据的进程〔writer〕。
以下假设共享数据区是文件。
这些读者和写者对数据区的操作必须满足以下条件:读—读允许;读—写互斥;写—写互斥。
这些条件具体来说就是:〔1〕任意多的读进程可以同时读这个文件;〔2〕一次只允许一个写进程往文件中写;〔3〕如果一个写进程正在往文件中写,禁止任何读进程或写进程访问文件;〔4〕写进程执行写操作前,应让已有的写者或读者全部退出。
这说明当有读者在读文件时不允许写者写文件。
对于读者-写者问题,有三种解决方法:1、读者优先除了上述四个规则外,还增加读者优先的规定,当有读者在读文件时,对随后到达的读者和写者,要首先满足读者,阻塞写者。
这说明只要有一个读者活跃,那么随后而来的读者都将被允许访问文件,从而导致写者长时间等待,甚至有可能出现写者被饿死的情况。
2、写者优先除了上述四个规则外,还增加写者优先的规定,即当有读者和写者同时等待时,首先满足写者。
当一个写者声明想写文件时,不允许新的读者再访问文件。
3、无优先除了上述四个规则外,不再规定读写的优先权,谁先等待谁就先使用文件。
实验步骤算法分析有同学认为,可以将文件视为临界资源,使用临界资源的代码就构成临界区,为了对临界区进行管理,只需设置一个互斥信号量r_w_w,读或者写之前执行P(r_w_w),之后执行V(r_w_w)即可,从而得到图3-1所示的算法描述。
经典PV操作问题详解(最全面的PV资料)[精品]
![经典PV操作问题详解(最全面的PV资料)[精品]](https://img.taocdn.com/s3/m/5831c61dba68a98271fe910ef12d2af90242a8b4.png)
经典P、V操作问题详解*****************一、基本概念1. 信号量struct semaphore{int value; // 仅且必须附初值一次,初值非负PCBtype* wait_queue; // 在此信号量上阻塞的进程队列} S; // 信号量实例为S2. P、V操作P(S){S := S-1;if (S<0)调用进程自己阻塞自己,等待在S的等待队列末尾;}V(S){S := S+1;if (S≤0)从S等待队列头释放一进程就绪在就绪队列尾;调用进程继续执行;}3. 使用方法(i). P、V操作成队出现,处理互斥时出现在同一进程中;处理同步时出现在不同进程中。
(ii). 同步P先于互斥P调用,V的顺序无关。
4. 另类P、V操作导致的问题(或信号量的栈实现方法或漏斗法)[习题P174-23]某系统如此定义P、V操作:P(S): S = S-1; 若S<0,本进程进入S信号量等待队列的末尾;否则,继续执行。
V(S): S=S+1; 若S≤0,释放等待队列中末尾的进程,否则继续运行。
(1)上面定义的P、V操作是否合理?有什么问题?(2)现有四个进程P1、P2、P3、P4竞争使用某一个互斥资源(每个进程可能反复使用多次),试用上面定义的P、V操作正确解决P1、P2、P3、P4对该互斥资源的使用问题。
答:(1)不合理:先进后出;可能“无限等待”,即等待队列头的进程得不到释放。
(2)思路:令每个信号量上的等待队列中始终只有一个进程。
解决方案如下:(n个进程)n个进程至多有n-1个等待。
设置n-1个信号量,每个进程阻塞在不同的信号量上,使每个等待队列至多有一个进程等待。
用循环模拟队列。
Semaphore S[n-1]; // S[i]的初值为i+1Procedure_i(){int j;DO_PRE_JOB();for(j=n-2; j>=0; j--)P(S[j]);DO_JOB_IN_CRITICAL_SECTION();for(j=0;j<=n-2;j++)V(S[j]);……}二、经典进程同步问题总述:进程同步问题主要分为以下几类:一(生产者-消费者问题);二(读者写者问题);三(哲学家就餐问题);四(爱睡觉的理发师问题);五(音乐爱好者问题);六(船闸问题);七(红黑客问题)等。
操作系统习题及答案三

习题三同步、通信与死锁一、单项选择题1、在单一处理机上,将执行时间有重叠的几个程序称为()。
A.顺序程序B. 多道程序C.并发程序D. 并行程序2、进程间的基本关系为()。
A.相互独立与相互制约B. 同步与互斥C.并行执行与资源共享D. 信息传递与信息缓冲3、两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来信息,或者建立某个条件后再向前执行,这种关系是进程间的()关系。
A.同步B. 互斥C.竞争D. 合作4、在一段时间内,只允许一个进程访问的资源称为()。
A. 共享资源B. 临界区C. 临界资源D. 共享区5、在操作系统中,对信号量S的P原语操作定义中,使进程进入相应阻塞队列等待的条件是()。
A. S>0B. S=0C. S<0D. S 06、信号量S的初值为8,在S上执行了10次P操作,6次V操作后,S的值为()。
A.10 B.8 C.6 D.47、临界区是指( )。
A. 并发进程中用于实现进程互斥的程序段B.并发进程中用于实现进程同步的程序段C.并发进程中用户实现进程通信的程序段D.并发进程中与共享变量有关的程序段8、下列对线程的描述中,( )是错误的。
A.不同的线程可执行相同的程序 B.线程是资源的分配单位C.线程是调度和执行单位 D.同一进程中的线程可共享该进程的主存空间9、P, V操作是()A.两条低级进程通信原语B.两组不同的机器指令C.两条系统调用命令D.两条高级进程通信原语10、若P, V操作的信号量S初值为2,当前值为-1,则表示有()等待进程。
A. 0个B. 1个C. 2个D. 3个11、()是一种只能进行P操作和V操作的特殊变量.A.调度B.进程C.同步D.信号量12、下面的叙述中正确的是()。
A.操作系统的一个重要概念是进程,因此不同进程所执行的代码也一定不同B.为了避免发生进程死锁,各进程只能逐个申请资源C.操作系统用PCB管理进程,用户进程可以从PCB中读出与本身运行状况有关的信息D.进程同步是指某些进程之间在逻辑上的相互制约关系13、对于两个并发进程,设互斥信号量为mutex,若mutex=0,则().A.表示没有进程进入临界区B.表示有一个进程进入临界区C.表示有一个进程进入临界区,另一个进程等待进入D.表示有两个进程进入临界区14、发生死锁的必要条件有四个,要防止死锁的发生,可以破坏这四个必要条件,但破坏()条件是不太实际的。
信号量与PV操作

❖ void V(semaphore &s) {
❖ s.value++;
❖ if(s.value<=0)
❖ R(s.list);
❖}
一般信号量(3)
❖ 推论1:若信号量s为正值,则该值等于在封 锁进程之前对信号量s可施行的P操作数、亦 等于s所代表的实际还可以使用的物理资源数
❖ 推论2:若信号量s为负值,则其绝对值等于 登记排列在该信号量s队列之中等待的进程个 数、亦即恰好等于对信号量s实施P操作而被 封锁起来并进入信号量s队列的进程数
一般信号量(2)
❖ typedef struct semaphore {
❖ int value;
//信号量值
❖ struct pcb *list; //信号量队列指针
❖ };
❖ void P(semaphore &s) {
❖
s.value--;
❖
if(s.value<0)
❖
W(s.list);
❖}
❖ while (true) {
//无限循环
❖
{produce an item in nextp};//生产一个产品
❖
if (counter==k) //缓冲满时,生产者睡眠
❖
sleep(producer);
❖
buffer[in]=nextp; //将一个产品放入缓冲区
❖
in=(in+1)%k; //指针推进
生产者-消费者问题算法描述(3)
❖ process consumer(void) {
❖ while (true) { //无限循环
❖ if (counter==0) //缓冲区空,消费者睡眠
计算机操作系统之pv原语分析及计算

操作系统课程之PV原语PV原语通过操作信号量来处理进程间的同步与互斥的问题。
其核心就是一段不可分割不可中断的程序。
信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。
有两种实现方式:1)semaphore的取值必须大于或等于0。
0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2)semaphore的取值可正可负,负数的绝对值表示正在等待进入临界区的进程个数。
信号量是由操作系统来维护的,用户进程只能通过初始化和两个标准原语(P、V原语)来访问。
初始化可指定一个非负整数,即空闲资源总数。
P原语:P是荷兰语Proberen(测试)的首字母。
为阻塞原语,负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。
操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;V原语:V是荷兰语Verhogen(增加)的首字母。
为唤醒原语,负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。
操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。
具体PV原语对信号量的操作可以分为三种情况:1)把信号量视为一个加锁标志位,实现对一个共享变量的互斥访问。
实现过程:P(mutex); // mutex的初始值为1 访问该共享数据;V(mutex);非临界区2)把信号量视为是某种类型的共享资源的剩余个数,实现对一类共享资源的访问。
实现过程:P(resource); // resource的初始值为该资源的个数N 使用该资源;V(resource); 非临界区3)把信号量作为进程间的同步工具实现过程:临界区C1;P(S);V(S);临界区C2;哲学家问题PV原语程序2009年03月10日星期二 21:29设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
临界区; 临界区; 临界区;
V(S); V(S); V(S);
…… …… …… ……
V(S):①将信号量S的值加1,即S=S+1;
②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。PV操作属于进程的低级通信。
什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。
在计算机操作系统中,PV操作是进程管理中的难点。
首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:
P(S):①将信号量S的值减1,即S=S-1;
ห้องสมุดไป่ตู้
②如果S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
一般来说,信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S=<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。
其中信号量S用于互斥,初值为1。
使用PV操作实现进程互斥时应该注意的是:
(1)每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。
(2)P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。
(3)互斥信号量的初值一般为1。
利用信号量和PV操作实现进程同步
PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。
使用PV操作实现进程同步时应该注意的是:
(1)分析进程间的制约关系,确定信号量种类。在保持进程间有正确的同步关系情况下,哪个进程先执行,哪些进程后执行,彼此间通过什么资源(信号量)进行协调,从而明确要设置哪些信号量。
(2)信号量的初值与相应资源的数量有关,也与P、V操作在程序代码中出现的位置有关。
利用信号量和PV操作实现进程互斥的一般模型是:
进程P1 进程P2 …… 进程Pn
…… …… ……
P(S); P(S); P(S);
(3)同一信号量的P、V操作要成对出现,但它们分别在不同的进程代码中。