电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

操作系统经典同步问题和死锁问题VIP免费

操作系统经典同步问题和死锁问题_第1页
1/8
操作系统经典同步问题和死锁问题_第2页
2/8
操作系统经典同步问题和死锁问题_第3页
3/8
经典同步问题一、生产者和消费者问题1、有n个缓冲区,一个生产者和一个消费者情况:intS=1;//可否进入缓冲区intfull=0;//产品数目intempty=n//可用缓冲区数intbuffer[n];intin=0;//指向下一个可放产品的缓冲区intout=0;//指向下一个可取产品的缓冲区main(){producer();consumer();}producer(){While(生产未结束){produceaproductP(empty);P(S);Buffer[in]=product;in=(in+1)modn;V(S);V(full);}}consumer(){While(消费未结束){P(full);P(S);TakeaproductfromBuffer[out]Out=(out+1)modn;V(S);V(empty);}Consumetheproduct}2、m个生产者和k个消费者共享n个缓冲区的情况:intB[n];//缓冲区intp=r=0;//p表示生产者指针,r表示消费者指针intS=1;//可否进入缓冲区intfull=0;//产品数目intempty=n;//可用缓冲区数main(){producer-i(i=1,2,…,m);consumer-j(j=1,2,…,k);}Producer-i(i=1,2,…,m){while(producingdoesnotend){produceaproductP(empty);P(S);B[p]=product;p=(p+1)modn;//每放入一个产品,位置指针后移一位V(S);V(full);}}Consumer-j(j=1,2,…,k){while(continuetoconsume){P(full);P(S);TakeaproductfromB[r]r=(r+1)modn;//从第一个开始,消费一个后,指向下一个V(S);V(empty);Consume}}二、读者与写者问题1、读者与写者有相同的优先级的情况:intS=1;//读者与写者,写者与写者间的互斥,即可否修改文件intSr=1;//可否修改读者个数intrc=0;//读者个数main(){reader();writer();}reader(){While(读过程未结束){P(Sr);if(rc==0){P(S);rc=rc+1;V(Sr);readfileF}else{rc=rc+1;V(Sr);readfileF}P(Sr);rc=rc-1;if(rc==0)V(S);V(Sr);}}writer(){While(写过程未结束){P(S);WritefileFV(S);}}2、写者优先问题:intS=1;//读者与写者,写者与写者间的互斥,即可否修改文件intSn=n;//最多有n个进程可以同时进行读操作main(){reader();writer()}reader(i){P(Sn);P(S);ReadfileFV(S);V(Sn);}writer(j){P(S)WritefileFV(S);}写者优先intreadcount,writecount;//读者个数,写者个数intz=1;//准备读的读者进程信号intx=1;//修改读者个数inty=1;//修改写者个数intrsem=1;//当至少有一个写者进程写时,禁止所有的读进程intS=1;//读者与写者,写者与写者间的互斥,即可否修改文件voidmain(){readcount=writecount=0;reader();writer();}Voidread(){P(z);//准备读的读者进程信号队列P(rsem);//开始读进程队列(只允许一个读者进程在rsem队列)P(x);readcount++;if(readcount==1)P(S);V(x);V(rsem);V(z);ReadfileP(x);readcount--;if(readcount==0)V(S);V(x);}Voidwriter(){P(y);writecount++;if(writecount==1)P(rsem);//当有一个写者进程时,禁止所有的读者进程V(y);P(S);WritefileV(S);P(y)writecount--;if(writecount==0)V(rsem);//当没有写者进程时,才允许读者进程读V(y);}三、哲学家吃面问题如何让五个哲学家吃通心面问题满足同步机制。(清华大学)解:改变5个哲学家申请筷子的顺序。规定奇数号的哲学家先拿起他左边的筷子,然后再去拿右边的筷子;偶数号的哲学家则正好相反。即:拿到一个筷子的哲学家才有权拿另一个筷子,而没有拿到筷子的哲学家则退出竞争。Pi(i=0,1,2,3,4)(){Thinkforawhileif(odd(i))//若为奇数号{P(fork(i+1)MOD5);P(fork(i));}else{P(fork(i));P(fork(i+1)MOD5);}EatforawhileV(fork(i));V(fork(i+1)MOD5);}四、理发师问题有一个理发师,有n张可供顾客等待理发的椅子,如果没有顾客,则理发师睡觉;如果有一顾客进入理发店发现理发师在睡觉,则把他叫醒进行理发,如果理发师正在理发时又有顾客来到,若有空椅子,就在空椅子上等待,若没有空椅子就离开理发店。写一个算法描述理发师和顾客之间的关系。(西安电子科技大学)intmutex=1;//可否修改顾客数intwakeup=0;//理发师等唤醒的信号intwait=0;//顾客是否可以等待intrc=0;//初始顾客数main(){P1();//顾客进程P2();//理发师进程}P1(){P(mutex);//可否修改顾客数rc=rc+1;if(rc==1)//如果是第一个顾客就唤醒理发师V(wakeup);else{if(rc<=n)//当顾客人数少于n时,在椅子上等待P(wait);else{rc=rc-1;该顾客离开理发店}}V(mutex);}P2(){P(wakeup);//理发师睡觉,等待被唤醒While(rc!=0){理发P(mutex);rc=rc-1;if(rc!=0)V(wait);//让等待中的一个顾客理发V(mutex);}}死锁问题1、若系统有某类资源m*n+1个,允许作业执行过程中动态申请该类资源,但在该系统上运行的每一个作业对该类资源的占有量在任一时刻都不会超过m+1个。当作业申请资源时,只要资源尚未分配完,则总能满足它的要求。但用限制系统中可同时执行的作业个数来防止死锁。你认为作业调度允许同时执行的最大作业数应为多少?证明之。2、若系统有同类资源m个,被n个进程共享,试问:当m>n和m

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

操作系统经典同步问题和死锁问题

确认删除?
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群