欢迎来到天天文库
浏览记录
ID:48087941
大小:778.50 KB
页数:32页
时间:2020-01-14
《操作系统-例题选讲.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机操作系统例题选讲第二章进程管理第三章处理机调度与死锁第四章存储器管理第五章设备管理第六章文件管理1A、B两个火车站之间是单轨连接的,现有许多列车同时到A站,须经A再到达B站,列车出B站后又可分路行驶。为保证行车安全,请你当调度时,你将如何调度列车?请你用PV操作为工具设计一个能实现你的调度方案的自动调度系统。AB例1:2当A、B两站之间无列车停驶时,可让到达A站的一列车进人A、B站之间行驶。当AB站之间有列车在行驶时,则到达A站者必须在站外等待。当有列车到达B站后,让等在A站外的一列车进入。答:因此,可用一个信号量S来控制到达
2、A站的列车能否进入单轨道行驶,S的初始值为1。列车到达A站后,先执行P(S),若无列车在A、B站之间行驶,则执行P(S)后立即进人单轨道行驶,到达B站后,执行V(S),可释放一个等待进入的列车进入行驶。若A、B站之间已有列车在行驶,则执行P(S)后就等待,直到行驶者到了B站执行V(S)后释放一个欲进入者。3例2:假设有一个成品仓库,总共能存放8台成品,生产者进程生产产品放入仓库,消费者进程从仓库中取出成品消费。为了防止积压,仓库满时就停止生产。由于仓库搬运设备只有一套,故成品的存入和取出只能分别执行,使用PV操作来实现该方案。答:V
3、armutex,full,empty:semaphore;mutex:=1;empty:=8;full:=0;4答:processorproducerbegin生产一个成品;P(empty);P(mutex);将产品存入仓库;V(mutex);V(full);End;ProcessorconsumerBeginP(full);P(mutex);将产品从仓库取出;V(mutex);V(empty);消费成品;endVarmutex,full,empty:semaphore;mutex:=1;empty:=8;full:=0;5有三个进
4、程R、M、P,它们共享一个缓冲区。R负责从输入设备读信息,每次读出一个记录并把它存放在缓冲区中;M在缓冲区加工读入的记录;P把加工后的记录打印输出。输入的记录经加工输出后,缓冲区中又可存放下一个记录。请用P、V操作为同步机构写出他们并发执行时能正确工作的程序。例3:答:三个进程共用一个缓冲区,他们必须同步工作,可定义三个信号量:S1:表示是否可把读人的记录放到缓冲区,初始值为1.S2:表示是否可对缓冲区中的记录加工,初始值为0.S3:表示记录是否加工好,可以输出,初始值也为0.三个进程可如下设计:6答:beginS1,S2,S3:s
5、emaphore;S1:=l;S2:=S3:=0;cobeginprocessRbeginL1:读记录;P(S1);记录存入缓冲区;V(S2);gotoL1;end;processMbeginL2:P(S2);加工记录;V(S3);gotoL2;end;processPbeginL3:P(S3);输出加工后的记录;V(S1);gotoL3;end;coend;end.7有4个进程R1,R2,W1,W2,它们共享可以存放一个数的缓冲器B.进程R1每次把从键盘上投入的一个数存放到缓冲器B中,供进程W1打印输出;进程R2每次从磁盘上读一个
6、数放到缓冲器B中,供进程W2打印输出。当一个进程把数据存放到缓冲器后,在该数还没有被打印输出之前不准任何进程再向缓冲器中存数。在缓冲器中还没有存入一个新的数之前不允许任何进程从缓冲区中取出打印。问:怎样才能使这四个进程在并发执行是协调的工作?例4:8答:四个进程实际上是两个生产者R1,R2和两个消费者W1,W2,各自生成不同的产品让各自的消费对象去消费,且共享一个的缓冲器。由于缓冲器只能存放一个数,所以,R1和R2在存放数时必须互斥。而R1和W1、R2和W2之间存在同步。为了协调它们的工作可定义三个信号量:S:表示能否把数存人缓冲器
7、B,初始值为1.S1:表示R1是否已向缓冲器存入从键盘上读入的一个数,初始值为0.S2:表示R2是否已向缓冲器存入从磁盘上读入的一个数,初始值为0.9答:beginS,S1,S2:semaphore;S:=1;S1:=S2:=0;cobeginprocessR1xl:integerbeginL1:从键盘读一个数;x1:=读入的数;P(S);B:=xl;V(S1);gotoL1;end;processR2x2:integer;beginL2:从磁盘读一数;x2:=读入的数;P(S);B:=x2;V(S2);gotoL2;end;pro
8、cessW2z:integerbeginL4:P(S2);z:=B;V(S);打印z中的数;gotoL4;end;coend;end.processW1y:integer;beginL3:P(S1);y:=B;V(S);打印y中的数;
此文档下载收益归作者所有