资源描述:
《操作系统课件复件 习题课.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、例1:修改书上读者优先的程序为读写公平varrc:integer;w,mutex:semaphore;rc:=0;w:=1;mutex:=1;procedurereadbeginP(mutex);rc:=rc+1;ifrc=1thenP(w);V(mutex);读文件;P(mutex);rc:=rc–1;ifrc=0thenV(w);V(mutex);end;procedurewitebeginP(w);写文件;V(w);end;分析:读写公平,即一旦有写者到达,后续的读者必须等待,无论是否有读者在读,而
2、在写者前到达的读者可以继续执行。可以增加一个信号量,用于在写者到达后封锁后续的读者r=1;P(r)V(r)P(r)V(r)例2:用PV操作解决读者和写者之间的同步问题,且写者优先分析:(1)增加一个写者计数器writecount,为了对该计数器进行互斥访问,增加信号量wmutex(2)设置信号量x,使一个读者和一个写者竞争访问文件,只要在x上等待的写者能继续执行,其他写者便可以直接竞争写者之间文件的互斥访问权,从而实现写者优先intreadcount,writecount;semaphoremutex=1
3、,wmutex=1,rwmutex=1,x=1;voidreader(){while(1){p(x)p(rmutex)++readcount;if(readcount==1)p(rwmutex);v(rmutex);v(x);readdata;p(rmutex);--readcount;If(readcount==0)v(rwmutex);v(rmutex);}}intreadcount,writecount;semaphoremutex=1,wmutex=1,rwmutex=1,x=1;voidwrit
4、er(){while(1){p(wmutex)++writecount;if(writecount==1)p(x);v(wmutex);p(rwmutex);writedata;v(rwmutex);p(wmutex);--writecount;If(writecount==0)v(x);v(wmutex);}}例3:改进书上的哲学家进餐算法,通过限制同时进餐的人数来防止死锁分析1:可引入一个额外的信号量mutex来控制对临界资源叉子的访问权,初值为1分析2:引入一个初值为4的信号量来限制同时进餐的人数s
5、emaphorefork[5];semaphorecount=4;for(inti=0;i<5;i++)fork[i]=1;cobeginprocessphiosopher_i()//i=0,1,2,3,4{while(true){think();P(count);P(fork[i]);P(fork[(i+1)%5]);eat();V(fork[i]);V(fork[(i+1)%5]);v(count);}}coend;例4:现有四个进程:R1,R2,W1和W2,它们共享可以存放一个数的缓冲区B。进程R1
6、每次把从键盘上读入的一个数存到缓冲区B中,供进程W1打印输出;进程R2每次把从磁盘上读一个数存放到缓冲区B中,供进程W2打印输出。怎样用P、V操作协调四个并发进程的工作。设信号量e,f1,f2;其初值分别为e=1,f1=0,f2=0R1:R2:{P(e)从键盘上读入的一个数存到缓冲区B中V(f1)}{P(e)从键盘上读入的一个数存到缓冲区B中V(f2)}W1:W2:{P(f1)将缓冲区B中的数据打印输出V(e)GotoL}{P(f2)将缓冲区B中的数据打印输出V(e)gotoL}例5:设有3个并发执行的进
7、程:输入进程Pi、计算进程Pc和输出进程Po。其中进程Pi不断地从键盘读入整数,放入缓冲区Buf1,Pc按输入顺序从Buf1中取数据,每次取出2个整数,计算其和,将结果放入缓冲区Buf2。Po负责将Buf2中的数据按顺序输出。设缓冲区Buf1、Buf2可存放的整数个数分别为m、n(m、n>0)。要求利用信号量的P、V操作写出进程Pi、Pc、Po的算法。设信号量e1,f1,e2,f2,其初值分别为:e1=m,f1=0,e2=n,f2=03个并发进程分别为:CobeginPi:beginL1:P(e1);向B
8、uf1中输入1个数;V(f1);GotoL1;endPc:beginL2:P(f1);x=从Buf1中读1个数;V(e1);P(f1);y=从Buf1中读1个数;V(e1);z=x+y;P(e2);将z送入Buf2中;V(f2);GotoL2;EndPo:beginL3:P(f2);W=从Buf2中读1个数;打印W;V(e2);GotoL3;EndCoend例6:举例说明P、V操作为什么要求设计成原语(即对同一信号量上的操作必