您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操1011_第三章_进程管理
1经典理发师问题假设后街有家理发店,店里有一个理发师、一把理发椅和n把等候理发的顾客椅子。(1).如果没有顾客则理发师便在理发椅上看报纸;(2).当有一个顾客到达时,首先查看理发师在干什么,如果在看报纸则告诉理发师理发,然后坐到理发椅上开始理发;如果理发师正在理发,则查看是否有空的椅子可坐,如果有,他就坐下等待,如果没有,则离开;(3).理发师为一位顾客理完发后,查看是否有人等待,如有则唤醒一位为其理发,如没有则在理发椅上看报纸;(4).顾客不分优先级customers:用于记录等候的顾客的数量,初值0barbers:用于记录空闲理发师的数量,初值1mutex:用于进程之间的互斥,初值1waiting:也是用于记录等候的顾客的数量,初值0理发师:p(customers);p(mutex);waiting--;v(mutex);理发;v(barbers);顾客:p(mutex);if(waitingn){waiting++;v(customers);v(mutex);p(barbers);接受理发服务;}else{v(mutex);}21.桌上有一个空盘,允许存放一只水果。父亲可向盘中放苹果,也可向盘中放桔子。儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供子女取用。请用P、V原语实现父亲、儿子、女儿三个并发进程的同步。信号量S表示盘子是否为空,初值为1;信号量orange表示盘中是否有桔子,初值为0;信号量apple表示盘中是否有苹果,初值为0。IntS=1;Intorange=0;Intapple=0;Main(){cobeginfather();son();daughter();coend}father(){while(true){p(s);将水果放入盘中;if(放入的是桔子)v(orange);elsev(apple)}}son(){while(true){p(orange);从盘中取出桔子;v(s);吃桔子;}}daughter(){while(true){p(apple);从盘中取出苹果;v(s);吃苹果;}}32.(读者、写者)多个进程共享一个文件,其中只读文件的称为读者,只写文件的称为写者。读者可以同时读,但写者只能独立写。用P、V操作写出其同步算法。读互斥信号量:rmutex,用于使读者互斥的访问共享变量count,初值为1写互斥信号量:wmutex,用于实现写者与读者的互斥及写者与写者的互斥,初值为1共享变量:count,记录当前正在读文件的读者数目,初值为0A.读者优先:Reader(){p(rmutex);if(count==0)p(wmutex);count++;v(rmutex);读文件;p(rmutex);count--;if(count==0)v(wmutex);v(rmutex);}writer(){p(wmutex);写文件;v(wmutex);}B.写者优先信号量s:在写进程到达后封锁后续的读者,初值为1Reader(){p(s);p(rmutex);if(count==0)p(wmutex);count++;v(rmutex);v(s);读文件;p(rmutex);count--;If(count==0)v(wmutex);V(rmutex);}writer(){p(s);p(wmutex);写文件;v(wmutex);v(s);}43.有一共享文件F可供A、B两组进程共享,同组的进程可以同时读文件F,但不同组的进程不能同时读文件F而只能互斥地读文件F。s:=1s1:=1s2:=1sr:=1保护计数器ra:=0A组计数器rb:=0B组计数器readerAP(s1);ra:=ra+1;ifra=1thenP(s);V(s1);readfileF;P(s1);ra:=ra-1;ifra=0thenV(s);V(s1);readerBP(s2);rb:=rb+1;ifrb=1thenP(s);V(s2);readfileF;P(s2);rb:=rb-1;ifrb=0thenV(s);V(s2);如果仅用一个sr来控制A组进程和B组进程之间的互斥会形成死锁的:假设已经有3个A组的人在读F文件,此时ra=3;就在这时,有一个B组的读进程来访问文件F此时rb=1;然后p(s)将S-1后S等于-1;进入等待队列,而这时无法恢复sr从而使保持在-1的状态,而若这时又有一个A组的进程要进入F文件读,因为sr=-1所以导致A组的进程也进不去了。而按照题义此时A组的进程是可以进的解决方法是分别假设信号量S1和S2从而即使在A组读时S2被修改了也不会影响A进程的读操作。从而S1,S2分别控制自己进程内的临界操作,而S实现了A组和B组之间的互斥54.三个进程PA、PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存得缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录大小。请用P、V操作来保证文件的正确打印。empty1、empty2表示缓冲区1,2是否为空,初值为1full1,full2表示缓冲区1,2是否有记录,初值为0PA:从磁盘读一个记录P(empty1)将记录存入缓冲区1V(full1)PB:P(full1)从缓冲区1中取出记录V(empty1)P(empty2)将记录存入缓冲区2V(full2)PC:P(full2)从缓冲区2中取出记录V(empty2)打印记录5.阅览室共有200个座位,读者进入时必须先在一张登记表上登记,该登记表为每一座位列一表目,包括座号和读者姓名等,读者离开时要销掉登记的信息。试用PV操作描述读者进程之间的同步关系。算法的信号量有三个:seats,表示阅览室是否有座位,初值为200;readers,表示阅览室里的读者数,初值为0;s,用于登记或注销互斥的信号量,初值为1。读者进入阅览室:P(seats);//是否有座位P(s);//是否有人在登记填写登记表;V(s);//登记完毕进入阅览室;V(readers);//读者个数加16读者离开阅览室:P(readers);//阅览室是否有人在读书P(s);//是否有人在注销销掉登记;V(s);//注销完毕离开阅览室;V(seats);//释放一个座位资源管道#includestdio.hMain(){Intx,fd[2];Charbuf[30],s[30];Pipe(fd);While((x=fork())==-1);If(x==0){Sprintf(buf,”son”);Write(fd[1],buf,30);Exit(0);}Else{Wait(0);Read(fd[0],s30);Printf(“%s”,s);}一、}7死锁问题死锁的概念:1.死锁的定义:各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源,从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进得状态。2.死锁的起因:并发进程的资源竞争,系统提供的资源个数少于并发进程所要求的资源数。3.产生死锁的必要条件:互斥条件:不可剥夺条件:部分分配条件:环路条件:死锁的排除方法:1.死锁预防:打破资源的互斥和不可剥夺条件:由客观条件限制打破资源的部分分配条件:打破环路条件:2.死锁避免(动态预防):3.死锁的检测与恢复:银行家算法:银行有10个单位的资金(安全状态)已使用最大(不安全状态)已使用最大A1616B1525C2424D4747不安全状态并不一定导致死锁。多种资源的银行家算法:总资源数=(6,3,4,2)已分配资源=(5,3,2,2)剩余资源=(1,0,2,0)已分配打印机扫描仪绘图仪CDROMA3011B0100C1110D1101E0000未分配打印机扫描仪绘图仪CDROMA1100B0112C3100D0010E211083种资源A、B、C,总数分别为:17、5、20剩余资源2,3,35个进程T0时刻最大资源需求已分配资源ABCABCP1559212P2536402P34011405P4425204P5424314安全序列:P5、P4、P3、P2、P11、若T0时刻进程P2请求资源(0、3、4),是否能实施资源分配?不能2、若在1基础上,进程P4请求资源(2、0、1),是否能实施资源分配?P4、P5、P3、P2、P13、若在2基础上,进程P1请求资源(0、2、0),是否能实施资源分配?不能银行家算法是一种(死锁避免、死锁预防、死锁检测)算法。当进程数大于资源数时,进程竞争资源(一定、不一定)会产生死锁。某系统中有3个并发进程,都需要同类资源4个,则不会发生死锁的最小资源数是(9、10、11、12)
本文标题:操1011_第三章_进程管理
链接地址:https://www.777doc.com/doc-2380919 .html