操作系统计算题总结

上传人:大米 文档编号:484465549 上传时间:2024-02-18 格式:DOC 页数:17 大小:280.50KB
返回 下载 相关 举报
操作系统计算题总结_第1页
第1页 / 共17页
操作系统计算题总结_第2页
第2页 / 共17页
操作系统计算题总结_第3页
第3页 / 共17页
操作系统计算题总结_第4页
第4页 / 共17页
操作系统计算题总结_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《操作系统计算题总结》由会员分享,可在线阅读,更多相关《操作系统计算题总结(17页珍藏版)》请在金锄头文库上搜索。

1、应用类型知识要点一:进程同步问题整形信号量:未遵循“让权等待原则”wait(S): while S=0 do no-op; S:=S-1;signal(S): S:=S+1记录型信号量:执行wait操作时,信号量的值加1,信号量的值小于0时阻塞;执行signal操作时,信号量的值减1,信号量的值小于等于0时唤醒阻塞中的进程。type semaphore=record value:integer; L:list of process; endprocedure wait(S)var S:semaphore;beginS.value=S.value-1;if S.value0 then block

2、(S.L);endprocedure signal(S)var S:semaphore;beginS.value:=S.value+1;if S.valueSj,专门设置一初值为0的信号量,并在Si结束之后执行对该信号量的signal操作,而在Sj开始之前执行对该信号量的wait操作,这样便可保证程序段Si执行完后才执行程序段Sj。生产者-消费者问题主程序(n为常量)Var buffer:array0,n-1 of item;in, out: integer:=0,0;mutex,empty,full:semaphore:=1,n,0;beginparbeginproducer1;produc

3、eri;producerM;consumer1;consumerj;consumerN;parendend生产者子程序消费者子程序produceriVar nextp:item;beginrepeatProduce an item in nextp;wait(empty);wait(mutex);bufferin:=nextp;in=(in+1)mod n;signal(mutex);signal(full);until falseendconsumerjVar nextc:item;beginrepeatwait(full);wait(mutex);nextc:=bufferout;out:

4、=(out+1) mod n;signal(mutex);signal(empty);Consume the item in nextc;until falseend生产者子程序(基于AND信号量)消费者子程序(基于AND信号量)produceribeginrepeatProduce an item in nextp;Swait(empty, mutex);bufferin=nextp;in:=(in+1) mod n;Signal(mutex, full);until falseendconsumerjbeginrepeatSwait(full,mutex);nextc:=bufferout

5、;out:=(out+1) mod n;Ssignal(mutex, empty);Consume the item in nextc;until falseend读者-写者问题(读者优先)主程序Var readercount:integer:=0;rcmutex,wmutex:semaphore:=1,1;beginparbeginreader1;readeri;readerM;writer1;writerj;writerN;parendend读者readeribeginrepeatwait(rcmutex);if readercount=0 then wait(wmutex);reader

6、count:=readercount+1;signal(rcmutex);Perform read operation;wait(rcmutex);readercount:=readercount-1;if readercount=0 then signal(wmutex);signal(rcmutex);until falseend写者writerjbeginrepeatwait(wmutex);Perform write operation;signal(wmutex);until false;endreadercount:读者数rcmutex:读者进程中用于readercount变量的互

7、斥访问wmutex:用于读者与写者、写者与写者之间的互斥访问写者与第一个读者竞争wmutex。一旦读者获得wmutex,那么直到所有读者执行结束由最后一个读者释放,而每个写者执行结束都释放,所以读者优先写者执行。读者-写者问题(写者优先)主程序Var readercount,writercount:integer:=0,0;rcmutex,wcmutex,wmutex,S:semaphore:=1,1,1,1;beginparbeginreader1;readeri;readerM;writer1;writerj;writerN;parendend读者readeribeginrepeatwai

8、t(S);wait(rcmutex);if readercount=0 then wait(wmutex);readercount:=readercount+1;signal(rcmutex);signal(S);Perform read operation;wait(rcmutex);readercount:=readercount-1;if readercount=0 then signal(wmutex);signal(rcmutex);until false;end写者writerjbeginrepeatwait(wcmutex);if writercount=0 then wait(

9、S);writercount:=writercount+1;signal(wcmutex);wait(wmutex);Perform write operation;signal(wmutex);wait(wcmutex);writercount:=writercount-1;if writercount=0 then signal(S);signal(wcmutex);until falseendrcmutex:读者进程中用于readercount变量的互斥访问wcmutex:写者进程中用于writercount变量的互斥访问wmutex: 用于读者与写者、写者与写者之间的互斥访问读者与第一

10、个写者竞争S信号量。一旦读者获得S信号量,那么直到所有读者执行结束由最后一个写者释放,而每个读者执行结束都释放,所以写者优先读者执行。读者-写者问题(限定读者数)主程序Var RN:integer:=10;rmax,wmutex:semaphore:=RN,1;beginparbeginreader1;readeri;readerM;writer1;writerj;writerN;parendend读者readeribeginrepeat=Swait(rmax,1,1,wmutex,1,0);Swait(rmax,1,1);Swait(wmutex,1,0);Perform read oper

11、ation;Ssignal(rmax,1);until false;end写者writerjbeginrepeatSwait(wmutex,1,1, rmax,RN,0);Perform write operationSignal(wmutex);until falseendRN:限定最多同时读的读者数rmax:空位置的数目,即系统还允许执行读操作的读者数,超过这个数目后读者将等待wmutex: 用于读者与写者、写者与写者之间的互斥访问读者执行Swait(wmutex,1,0)保证无写者(wmutex值保持不改变)写者执行Swait(wmutex,1,1,rmax,RN,0)保证既无写者在写又无读者在读(rmax值保持不变)哲学家进餐问题主程序Var chopstick:array0,4 of semapho

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号