最新操作系统第三章作业答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章作业
1.下进程之间存在相互制约关系吗?若存在,是什么制约关系?为什么?
①几个同学去图书馆借同一本书。
答:互斥,只能有一个借到
②篮球比赛中两队同学争抢篮板球。
答:互斥,只能有一个抢到
③果汁流水线生产中捣碎、消毒、灌装、装箱等各道工序。
答:同步时进行,相互不影响
④商品的入库出库。
答:同步时进行,相互无影响
⑤工人做工与农民种粮。
答:同步进行,相互无影响
2.在操作系统中引入管程的目的是什么?条件变量的作用是什么?
答:引入管城是为了实现进程的同步和互斥。
条件变量的作用是:设置多个信号量,使用大量的P、V操作,还要仔细安排多个P操作的排列次序,否则会出现错误的结果或出现死锁现象。
3.说明P、V操作为什么要设计成原语。
答:用信号量S表示共享资源,其初值为1表示有一个资源。设有两个进程申请该资源,若其中一个进程先执行P操作。P操作中的减1操作有3条指令组成:去S送寄存器R;R-1送S。若P操作不用原语实现,在执行了前述三条指令中的2条,即还未执行R 送S时(此时S值仍为1),进程被剥夺CPU,另一个进程执行也要执行P操作,执行后S的值为0,导致信号量的值错误。正确的结果是两个进程执行完P操作后,信号量S的值为-1,进程阻塞。
4.设有一个售票大厅,可容纳200人购票。如果厅内不足200人则允许进入,超过则在厅外等候;售票员某时只能给一个购票者服务,购票者买完票后就离开。试问:
①购票者之间是同步关系还是互斥关系?
答:互斥关系
②用P、V操作描述购票者的工作过程。
如下:
semaphore mutex=1;
semaphore full=200;
void customer()
{ p(metux);
P(full);
Buying
V(mutex);
V(full);
}
5.进程之间的关系如图3-16所示,试用P、V操作描述它们之间的同步。
如下:
设:s1→s2为a s1→s3为b s2→s6为c s3→s4 为d s3→s5为e s4→s6为f s5→s6为g
semaphore a,b,c,d,g,f,g=0,0,0,0,0,0,0;
{ s1;v(a);v(b);}
{ p(a);s2;v(a);}
{ p(b);s3;v(b);}
{ p(d);s4;v(d);}
{ p(e);s5;v(e);}
{ p(c);s6;}
{ p(f);p(g);s6}
6.有4个进程P1、P2、P3、P4共享一个缓冲区,进程P1向缓冲区存入消息,进程P2、
P3、P4从缓冲区中去消息,要求发送者必须等三个进程都去过本消息后才能发送下
调消息。缓冲区内每次只能容纳一个消息,用P、V操作描述四个进程存取消息的情
况。
如下:
Semaphore: metux=0;
{ p1;v(metux);}
{ p(metux); { p(metux); { p(metux);
P2; p3; p4;
V(metux); v(metux); v(metux);
} } }
7.分析生产者——消费者问题中多个P操作颠倒引起的后果。
semaphore mutex=1;
semaphore empty=n;
semaphore full=0;
int i,j;
ITEM buffer[n];
ITEM data_p,data_c;
void producer()
{
While(ture)
{
Produce an item in data_p;
P(empty);
P(mutex);
buffer[i]=data_p;
i=(i+1)%n;
v(empty);
v(full);
}
Void consumer()
{
While(ture)
{
P(full);
P(mutex);
data_c= buffer[j];
j=(j+1)%n;
v(metux);
v(empty);
coumer the item in data_c;
}
8.读者——写者问题中写者优先算法的实现。
semaphore Wmutex,Rmutex=1;
int Rcount=0;
semaphore mutex=1
void reader()void writer(){while(true) { while(true)
{P(mutex); {P(mutex);
P(Rmutex); P(wmutex);
If(Rcount==0) P(wmutex);
Rcount=Rcount+1 ; 写;
V(Rmutex);
V(mutex); V(Wmutex);
V(mutex);
读; }
}
P(Rmutex);
Rcount=Rcount-1;
if (Rcount==0) V(wmutex);
V(Rmutex);}
}
9.写一个用信号量解决哲学家进餐问题不产生锁死的算法。
如下:
Semaphore chopstick[5]={1,1,1,1,1};
Semaphore mutex;
Void profession(int n)
{
While (ture)
{ p(chopstick[i];
p(chopstick[(i+1)%5]);
p(metux);
进餐;
V(chopstick[i];
V(chopstick[(i+1)%5]);
思考;
V(metux);
}
}
10.一个文件可有若干个不同的进程所共享,每个进程具有唯一的编号。假定文件可有满足下列限制的若干个不同的进程同时访问,并发访问该文件的哪些进程的编号的总和不得大于n,设计一个协调对该文件访问的管程。
不会做这道题
11.用管程解决读者——写者问题,并采用公平原则。
不会做这道题