资源描述:
《操作系统计算题总结.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、应用类型知识要点一:进程同步问题整形信号量:未遵循“让权等待原则”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;beginS.value=S.value-1;ifS.value<0thenb
2、lock(S.L);endproceduresignal(S)varS:semaphore;beginS.value:=S.value+1;ifS.value<=0thenwakeup(S.L);end17Ø生产者-消费者问题Ø读者-写者问题Ø哲学家进餐问题Ø理发室问题进程同步问题求解要领Ø认真审题、确立信号量及关键变量Ø构建算法基本步骤及逻辑结构Ø资源信号量申请先于互斥信号量申请Øwait操作与signal操作配对出现利用信号量实现互斥主程序子程序Varmutex:semaphore:=1;beginparbeginprocess1;process2;p
3、arendendprocess1beginrepeatwait(mutex);临界区signal(mutex);……untilfalseendprocess2beginrepeatwait(mutex);临界区signal(mutex)……untilfalseend1.互斥信号量初值为12.互斥信号量wait和signal肯定出现在同一进程中,并出现在需要互斥访问数据(临界资源)前后利用信号量描述前趋关系Vara,b,c,d,e,f,g,h:semaphore:=0,0,0,0,0,0,0,0;beginparbeginbeginS1;signal(a);
4、signal(b);endbeginwait(a);S2;signal(c);signal(d);endbeginwait(b);S3;signal(e);endbeginwait(c);S4;signal(f);endbeginwait(d);S5;signal(g);endbeginwait(e);S6;signal(h);endbeginwait(f);wait(g);wait(f);S7;endparendendS1S2S3S4S5S6S7abcdefhg首先应找出所有的前趋关系。然后,对每一种前趋关系,如Si->Sj,专门设置一初值为0的信号量,
5、并在Si结束之后执行对该信号量的signal操作,而在Sj开始之前执行对该信号量的wait操作,这样便可保证程序段Si执行完后才执行程序段Sj。17生产者-消费者问题主程序(n为常量)Varbuffer:array[0,…,n-1]ofitem;in,out:integer:=0,0;mutex,empty,full:semaphore:=1,n,0;beginparbeginproducer1;…;produceri;…;producerM;consumer1;…consumerj;…;consumerN;parendend生产者子程序消费者子程序pro
6、duceriVarnextp:item;beginrepeatProduceaniteminnextp;wait(empty);wait(mutex);buffer[in]:=nextp;in=(in+1)modn;signal(mutex);signal(full);untilfalseendconsumerjVarnextc:item;beginrepeatwait(full);wait(mutex);nextc:=buffer[out];out:=(out+1)modn;signal(mutex);signal(empty);Consumetheit
7、eminnextc;untilfalseend生产者子程序(基于AND信号量)消费者子程序(基于AND信号量)produceribeginrepeatProduceaniteminnextp;Swait(empty,mutex);buffer[in]=nextp;in:=(in+1)modn;Signal(mutex,full);untilfalseendconsumerjbeginrepeatSwait(full,mutex);nextc:=buffer[out];out:=(out+1)modn;Ssignal(mutex,empty);Consume
8、theiteminnextc;untilfalseend17读者-