操作系统第三章作业答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.用管程解决读者——写者问题,并采用公平原则。

不会做这道题

相关文档
最新文档