操作系统课件复件习题课.ppt
《操作系统课件复件习题课.ppt》由会员分享,可在线阅读,更多相关《操作系统课件复件习题课.ppt(28页珍藏版)》请在三一文库上搜索。
1、例1:修改书上读者优先的程序为读写公平,var rc: integer; w, mutex: semaphore; rc := 0; w := 1; mutex := 1; procedure read begin P(mutex); rc := rc +1; if rc = 1 then P(w); V(mutex); 读文件; P(mutex); rc := rc 1; if rc = 0 then V(w); V(mutex); end;,procedure wite begin P(w); 写文件; V(w); end;,分析:读写公平,即一旦有写者到达,后续的读者必须等待,无论是否有
2、读者在读,而在写者前到达的读者可以继续执行。可以增加一个信号量,用于在写者到达后封锁后续的读者,r=1;,P(r),V(r),P(r),V(r),例2:用PV操作解决读者和写者之间的同步问题,且写者优先,分析: (1)增加一个写者计数器writecount, 为了对该计数器进行互斥访问,增加信号量wmutex (2)设置信号量x,使一个读者和一个写者竞争访问文件,只要在x上等待的写者能继续执行,其他写者便可以直接竞争写者之间文件的互斥访问权,从而实现写者优先,int readcount, writecount; semaphore mutex=1,wmutex=1,rwmutex=1,x=1;
3、 void reader( ) while(1) p(x) p(rmutex) +readcount; if(readcount=1) p(rwmutex); v(rmutex); v(x); read data; p(rmutex); - - readcount; If(readcount=0) v(rwmutex); v(rmutex); ,int readcount, writecount; semaphore mutex=1,wmutex=1,rwmutex=1,x=1; void writer( ) while(1) p(wmutex) +writecount; if(writeco
4、unt=1) p(x); v(wmutex); p(rwmutex); write data; v(rwmutex); p(wmutex); - - writecount; If(writecount=0) v(x); v(wmutex); ,例3:改进书上的哲学家进餐算法,通过限制同时进餐的人数来防止死锁,分析1:可引入一个额外的信号量mutex来控制对临界资源叉子的访问权,初值为1 分析2:引入一个初值为4的信号量来限制同时进餐的人数,semaphore fork5; semaphore count=4; for(int i=0;i5;i+) forki=1; cobegin proces
5、s phiosopher_i() /i=0,1,2,3,4 while(true) think(); P(count); P(forki); P(fork(i+1)%5); eat(); V(forki); V(fork(i+1)%5); v(count); coend;,例4:现有四个进程:R1,R2,W1和W2,它们共享可以存放一个数的缓冲区B。进程R1每次把从键盘上读入的一个数存到缓冲区B中,供进程W1打印输出;进程R2每次把从磁盘上读一个数存放到缓冲区B中,供进程W2打印输出。怎样用P、V操作协调四个并发进程的工作。,设信号量e,f1,f2; 其初值分别为 e=1,f1=0,f2=0,
6、R1: R2:,W1: W2:,例5:设有3个并发执行的进程:输入进程Pi、计算进程Pc和输出进程Po。其中进程Pi不断地从键盘读入整数,放入缓冲区Buf1,Pc按输入顺序从Buf1中取数据,每次取出2个整数,计算其和,将结果放入缓冲区Buf2。Po负责将Buf2中的数据按顺序输出。设缓冲区Buf1、Buf2可存放的整数个数分别为m、n(m、n0)。要求利用信号量的P、V操作写出进程Pi、Pc、Po的算法。,设信号量e1,f1,e2,f2,其初值分别为:e1=m,f1=0,e2=n,f2=0 3个并发进程分别为:,例6:举例说明P、V操作为什么要求设计成原语(即对同一信号量上的操作必须互斥)
7、(1)设信号量S的初值为1,当一个P操作执行完S=S-1后,S的值为0,该P操作不应被阻塞。但若P操作不是一个原语,也就是说在一个P操作执行过程中可以由另一个P操作同时,则这时的S的值为-1。这是第一个P操作将会被阻塞。这样的P操作不符合P操作的语义。,(2)设信号量S的初值为-1,当一个V操作执行完S:=S+1后,S的值为0,该V操作应该唤醒一个被P操作阻塞得进程。但若V操作不是一个原语,也就是说在一个V操作执行的过程中可以有另一个V操作同时在执行。加入第2个V操作在第1个V操作执行判断语句IFS=0前夜执行了S :=S+1操作,则这时的S值为1。这时第1个操作将不再去唤醒被阻塞得进程。这样
8、的V操作不符合V操作的语义。 (3)同样地,当P操作的执行过程中插入了V操作,也会出现不符合原语语义的情况。例如,在P操作执行完:后,的值为,经判断,该进程应该被阻塞。但若要在进行判断后阻塞进程前执行完另外操作,则该操作并没有可以唤醒的被阻塞得进程。而当操作执行完后继续执行操作时,该操作仍将阻塞该进程,这一进程将不被唤醒。对于操作的执行过程中插入了操作,也会出现不符合原语语义的情况。例如。在操作执行完:后,的值为,该进程无需唤醒其他进程。但若在进行判断前执行了一个操作,则在后续操作中需要唤醒一个阻塞进程。,例7:试分析m个生产者n个消费者共享K缓冲区问题中各信号量(empty,full,mut
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课件 复件 习题
链接地址:https://www.31doc.com/p-2249101.html