习题没有运行进程,没有就绪进程,N个进程处于等待状态。没有运行进程,有一个就绪进程,N-1个进程处于等待状态。有一个运行进程,没有就绪进程,N-1个进程处于等待状态。有一个运行进程,一个就绪进程,N-2个进程处于等待状态。有一个运行进程,N-1个就绪进程,没有任何进程处于等待状态。设系统中有N(N=3)个进程,考虑下面情况:进程控制1、一个多任务单处理机系统,PCB表的规模是100行,则任一时刻,最多有()个进程处于运行态,最多可能有()个进程处于就绪态,最多可能()有个进程处于等待态。2、有四个同类资源组成的系统,有三个进程共享这些资源,每个进程至多需要二个资源,是否会发生死锁?Availables≥n*(request-1)+1习题1有3个进程PA,PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录大小。请用P,V操作来保证文件的正确打印。缓冲区1缓冲区2PA从磁盘读入PB复制PC打印设置4个信号量:empty1,empty2,full1,full2.Empty1及Empty2分别表示缓冲区1及缓冲区2是否为空,初值为1。Full1,full2分别表示缓冲区1及缓冲区2是否有记录可供处理,其初值为0。习题1PC(){While(1){P(full2);从缓冲区2取一个记录;V(empty2);打印记录;}}PA(){While(1){从磁盘读一个记录;P(empty1);将记录存入缓冲区1;V(full1);}}PB(){While(1){P(full1)从缓冲区1中取出记录;v(empty1);P(empty2);将记录存入缓冲区2;V(full2);}}Intempty1=1;empty2=1;full1=0;full2=0;Main(){CobeginPA();PB();PC();Coend}公共汽车上,司机和售票员的活动分别为:司机的活动:启动车辆;正常行驶,到站停车•售票员的活动:•关车门;•售票;•开车门;习题2司机P1售票员P2REPEATREPEAT启动关门正常运行售票到站停开门UNTILFALSEUNTILFALSE司机启动车辆的动作必须于售票员关车门的动作取得同步,售票员开车门的动作也必须与司机停车取得同步。例:信号量设置及初始值设信号量S1:是否允许司机启动汽车,初值为0S2:是否允许售票员开门,初值为0程序流程代码Driver(){While(1){P(s1);启动汽车正常行车;到站停车;V(S2);}}Busman(){While(1){关车门;V(S1);售票P(S2);开车门;上下乘客;}}Ints1=0;Ints2=0;Main()){CobeginDriver();Busman();Coend}习题3桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P,V原语实现爸爸,儿子女儿三个进程的同步。设三个信号量,S:表示盘子是否为空,初值为1So:表示盘中是否有桔子,初值为0Sa:表示盘中是否有苹果,初值为0;Ints=1;intsa=0;intso=0;Main(){Cobeginfather();Son();Daughter();Coend}信号量设置及初值Father(){While(1){P(s);将水果放入盘中;If(放入的是桔子)v(so);Elsev(Sa);}}son(){While(1){P(so);从盘中取出桔子;v(s);吃桔子;}}daughter(){While(1){P(sa);从盘中取出苹果;v(s);吃苹果;}}程序流程代码习题四:图书馆问题•图书馆有100各座位,有一张登记表,要求:•阅读者进入时登记,取得座位号;•出来时,注销;登记表同时只能由一个人使用;•用P、V原语描述一个读者的使用过程。Reader(intI)Enter();阅读;Outer()EndEnter(){BeginP(SN)P(sb)登记;V(sb)End}Outer(){BeginP(sb);注销;V(sb);V(SN);End}信号量SN,表示可用座位数,初值为100;信号量sb,表示登记表是否正在使用,初值为1;解决方法习题五有一个仓库,可以存放A和B两种产品,但要求:每次只能存入一种产品(A或B)-NA产品数量-B产品数量M其中,N和M是正整数。试用P,V操作描述产品A与产品B的入库过程。解决方案设2个信号量来控制A、B产品的存放数量。设SA表示当前允许A产品比B产品多入库的数量;即在当前库存量和B产品不入库的情况下,还可以允许SA个产品入库;SB表示当前允许B产品比A产品多入库的数量,即在当前库存量和A产品不入库的情况下,还可以允许SB个产品入库;当往库中存放一个A产品时,则允许存入B产品的数量也增加1;当往库中存放一个B产品时,则允许存入A产品的数量也增加1;Intmutex=1;Intsa=M-1;Intsb=N-1;Main(){While(1){取一个产品;if(取的是A产品){P(sa);P(mutex);将产品入库;V(mutex);V(sb);}Else/*取的产品是B*/{P(sb);P(mutex);将产品入库;V(mutex);V(pa);}}}信号量设置及程序代码作业1.今有三个并发进程R,M,P,它们共享了一个可循环使用的缓冲区B,缓冲区B共有N个单元。进程R负责从输入设备读信息,每读一个字符后,把它存放在缓冲区B的一个单元中;进程M负责处理读入的字符,若发现读入的字符中有空格符,则把它改成“,”;进程P负责把处理后的字符取出并打印输出。当缓冲区单元中的字符被进程P取出后,则又可用来存放下一次读入的字符。请用PV操作为同步机制写出它们能正确并发执行的程序。0123456……N设置三个信号量:Empty[I]:表示该缓冲区单区是否为空,初值为1full[I]:表示该缓冲区单区是否为满,初值为0modify[I]:表示该缓冲区单区是否已被修改,初值为0Semaphoreempty[1..N]=1;Semaphorefull[1..N]=0;Semaphoremodify[1..N]=0i,m,n=0;Main(){cobeginR();M();P();coend}解答1R(inti){while(1){Read;P(empty[i]);Store;V(full[i]);i=(i+1)modN;}}P(intn){while(1){P(modify[n]);Get;V(empty[n])Print;n=(n+1)modN}}M(intm){while(1){P(full[m]);Ifdatais“.”,changeitto“”V(modify[m]);m=(m+1)modN}}0123456……N解:信号量avail=N,full=0,mutex=1,sm=0(是否可以被修改);表示每个缓冲区的修改标志:mf[0:N]=0;表示每个缓冲区是否为满的标志:ff[0:N]=0;表示每个缓冲区中的数据:B[0:N]解答2PR:Begin读一个字符ch;P(avail)P(mutex)取出一个空的缓冲区i;ff[i]trueB[i]ch;mf[i]false;V(mutex);V(SM);End;PM:BeginP(SM);P(mutex);找到一个bufferj,它:ff[j]true&mf[j]false;ModifiyB[j];mf[j]trueV(mutex)V(full);End;PP:BeginP(full)P(mutex)找到一个bufferk,它ff[k]true&mf[k]true;PrintB[k];ff[k]falsemf[k]false;V(mutex)V(avail);End;习题六用P、V原语实现东西向单行道上车辆的正确行驶:当有车自东向西方向(或自西向东方向)行驶,另一方向上的车辆须等待;同一方向上的车可以连续通过,当某一方向上已经没有车辆在单行道上行驶时,另一方向上的车辆即可以进入单行道。请完善这个程序:beginmutex,westeast,eastwest:semaphoremutex,westeast,eastwest=1,eastcount,westcount::integereastcount:=0;westcount:=0Cobegineast_west;west_east;Coend;Processeast_west()begin_________________;eastcount:=eastcount+1;ifeastcount=1then_______;_________;通过单行道;________;eastcount:=eastcount-1;ifeastcount=0then_________;V(eastwest);End;Processwest_east()begin_________________;westcount:=westcount+1;Ifwestcount=1then______;_________;通过单行道;________;westcount:=westcount-1;Ifwestcount=0then_________;V(westeast);End;用P、V操作描述前趋图intb2=0;intb3=0;intb4=0;main(){cobeginS1();S2();S3();S4();coend}S1()S3(){…{p(b3);v(b2);…v(b3);v(b4);}}S2()S4(){p(b2);{p(b4);…p(b4);v(b4)…}}