1 / 17
文档名称:

操作系统计算题总结.doc

格式:doc   大小:280KB   页数:17页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

操作系统计算题总结.doc

上传人:zxwziyou9 2019/6/14 文件大小:280 KB

下载得到文件列表

操作系统计算题总结.doc

文档介绍

文档介绍:应用类型知识要点一:进程同步问题整形信号量:未遵循“让权等待原则”wait(S):whileS<=0dono-op;S:=S-1;signal(S):S:=S+1记录型信号量:执行wait操作时,信号量的值加1,信号量的值小于0时阻塞;执行signal操作时,信号量的值减1,信号量的值小于等于0时唤醒阻塞中的进程。typesemaphore=recordvalue:integer;L:listofprocess;endprocedurewait(S) varS:semaphore; begin =-1; <0thenblock(); endproceduresignal(S) varS:semaphore; begin :=+1; <=0thenwakeup(); end生产者-消费者问题读者-写者问题哲学家进餐问题理发室问题进程同步问题求解要领认真审题、确立信号量及关键变量构建算法基本步骤及逻辑结构资源信号量申请先于互斥信号量申请wait操作与signal操作配对出现利用信号量实现互斥主程序子程序Varmutex:semaphore:=1;begin parbegin process1; process2; parendendprocess1begin repeat wait(mutex); 临界区 signal(mutex); …… untilfalseendprocess2begin repeat wait(mutex); 临界区 signal(mutex) …… untilfalseend互斥信号量初值为1互斥信号量wait和signal肯定出现在同一进程中,并出现在需要互斥访问数据(临界资源)前后利用信号量描述前趋关系Vara,b,c,d,e,f,g,h:semaphore:=0,0,0,0,0,0,0,0;begin parbegin beginS1;signal(a);signal(b);end beginwait(a);S2;signal(c);signal(d);end beginwait(b);S3;signal(e);end beginwait(c);S4;signal(f);end beginwait(d);S5;signal(g);end beginwait(e);S6;signal(h);end beginwait(f);wait(g);wait(f);S7;end parendendS1S2S3S4S5S6S7abcdefhg首先应找出所有的前趋关系。然后,对每一种前趋关系,如Si->Sj,专门设置一初值为0的信号量,并在Si结束之后执行对该信号量的signal操作,而在Sj开始之前执行对该信号量的wait操作,这样便可保证程序段Si执行完后才执行程序段Sj。生产者-消费者问题主程序(n为常量)Varbuffer:array[0,…,n-1]ofitem;in,out:integer:=0,0;mutex,empty,full:semaphore:=1,n,0;begin parbegin producer1;…;produceri;…;producerM; consumer1;…consumerj;…;consumerN; parendend生产者子程序消费者子程序produceriVarnextp:item;begin repeat Produceaniteminnextp; wait(empty);wait(mutex); buffer[in]:=nextp; in=(in+1)modn; signal(mutex); signal(full); untilfalseendconsumerjVarnextc:item;begin repeat wait(full);wait(mutex); nextc:=buffer[out]; out:=(out+1)modn; signal(mutex); signal(empty); Consumetheiteminnextc; untilfalseend生产者子程序(基于AND信号量)消费者子程序(基于AND信号量)produceribegin repeat Produceaniteminnextp; Swait(empty,mutex); buffer[in]=nextp; in:=(in+1)modn; Signal(mutex,full); untilfalseendconsumerjbegin repeat Swait(full,mutex); nextc:=buffer[out]; out:=(out+1)modn; Ssignal(mu