计算机操作系统课后答案 下载本文

内容发布更新时间 : 2024/5/13 23:18:29星期一 下面是文章的全部内容请认真阅读。

6

答:

semaphore S1=1;

semaphore S2,S3,S4=0,0,0;

int count =0;

semaphore mutex=1;

void P1()/*发送进程*/ void P2()/*接收进程*/ void P3()/*接受进程*/ void P4()/*接受进程*/ { while(true) { while(true) { while(true) { while(true) { { { {

P(S1); P(S2); 发送消息; 接收消息; P(mutex); P(mutex); count=0; count=count+1; V(mutex); if (count==3) V(S1); V(S2); V(mutex)} V(S3); } V(s4);} } 7

答: semaphore mutex=1; semaphore empty=n; semaphore full=0; int i,j;

ITEM buffer[n];

ITEM data_p,data_c;

void producer()/*生产者进程*/ {while(true) {produce an item in data_p; P(mutex); P(empty); buffer[i]=data_p; i=(i+1)%n; V(mutex); V(full);} }

6.

答:semaphore Wmutex,Rmutex=1;

int Rcount=0;

semaphore mutex=1

void reader() /*读者进程*/ {while(true) {P(mutex); P(Rmutex); If(Rcount==0) P(wmutex); P(S3); P(S4);

接收消息; 接收消息; P(mutex); P(mutex);

count=count+1; count=count+1; if (count==3) V(S1); if (count==3) V(S1); V(mutex)} V(mutex)} } } void consumer() /*消费者进程*/ {while(true) {P(full); P(mutex);

data_c=buffer[j]; j=(j+1)%n; V(mutex); V(empty);

consume the item in data_c} } void writer() /*写者进程*/ {while(true) {P(mutex); P(wmutex); ?;

Rcount=Rcount+1 ; write;/*执行写操作*/ V(Rmutex); ?;

V(mutex); V(Wmutex); ?; V(mutex); read;/*执行读操作*/ }} ?;

P(Rmutex);

Rcount=Rcount-1;

if (Rcount==0) V(wmutex); V(Rmutex);} }

7.

答:semaphore chopstick[5]={1,1,1,1,1};

semaphore mutex=1;

void philosopher ()/*哲学家进餐*/ {while(true) {P(mutex);

P(chopstick[i]);

P(chopstick[(i+1)%5]); V(mutex); ?;

eat;/*进餐*/ ?;

V(chopstick[i]);

V(chopstick[(i+1)%5]); ?;

think;/*思考*/ ?;} }

第四章 调度与死锁

思考与练习题

1. 某进程被唤醒后立刻投入运行,能说明该系统采用的是可剥夺调度算法吗?

2. 在哲学家进餐问题中,如果将先拿起左边筷子的哲学家称为左撇子,先拿起右边筷子的

哲学家称为右撇子。请说明在同时存在左、右撇子的情况下,任何的就坐安排都不能产生锁死。

3. 系统中有5个资源被4个进程所共享,如果每个进程最多需要2个这种资源,试问系统

是否会产生锁死?

4. 计算机系统有8台磁带机,由N个进程竞争使用,每个进程最多需要3台。问:N为多

少时,系统没有死锁的危险?

5. 系统有5个进程,它们的到达时间和服务时间如表4-8所示。新进程(没有运行过)与

老进程(运行过的进程)的条件相同时,假定系统选新进程运行。 表4-8 进程情况 进程名 A B C D E 到达时间 0 2 4 6 8 服务时间 3 6 4 5 2 若按先来先服务(FCFS)、时间片轮法(时间片q=1)、短进程优先(SPN)、最短剩余时间优先(SRT,时间片q=1)、响应比高者优先(HRRN)及多级反馈队列(MFQ,第一个队列的时间片为1,第i(i>1)个队列的时间片q=2(i-1))算法进行CPU调度,请给出各个进程的完成时间、周转时间、带权周转时间,及所有的进程的平均周转时间和平均带权周转时间。

6. 设系统中有5个进程P1、P2、P3、P4、P5,有3种类型的资源A、B、C,其中A资源

的数量是17,B资源的数量是5,C资源的数量是20,T0时刻系统状态如表4-9所示。 表4-9 T0时刻系统状态 已分配资源数量 最大资源需求量 仍然需求资源数 进程 A B C A B C A B C P1 P2 P3 P4 P5 (1) (2) (3) (4)

2 4 4 2 3 1 0 0 0 1 2 2 5 4 4 5 5 4 4 4 5 3 0 2 2 9 6 11 5 4 3 1 0 2 1 4 3 0 2 1 7 4 6 1 0 计算每个进程还可能需要的资源,并填入表的“仍然需要资源数”的栏目。 T0时刻系统是否处于安全状态?为什么?

如果T0时刻进程P2又有新的资源请求(0,3,4),是否实施资源分配?为什么? 如果T0时刻,若进程P4又有新的资源请求(2,0,1),是否实施资源分配?为什么?

(5) 在(4)的基础上,若进程P1又有新的资源请求(0,2,0),是否实施资源分配?为

什么?

答案

1. 答:不能。如果当前就绪列队为空,这样被唤醒的进程就是就绪队列中的唯一的一个进程,于是调度程序自然选中它投入运行。

2. 答:该题的关键是证明该情况不满足产生死锁的四个必要条件之一。在死锁的四个必要条件中,本体对于互斥条件、请求与保持条件、不可剥夺条件肯定是成立的,因此必须证明环路条件不成立。

对于本体,如果存在环路条件必须是左、右的哲学家都拿起了左(或右)边的筷子,而等待右(或左)边的筷子,而这种情况只能出现在所有哲学家都是左(或右)撇子的情况下,但由于本题有右(或左)撇子存在,因此不可能出现循环等待链,所以不可能产生死锁。

3. 答:由于资源数大于进程数,所以系统中总会有一个进程获得资源数大于等于2,该进程已经满足了它的最大需求,当它运行完毕后会把它占有的资源归还给系统,此时其余3个进程也能满足最大需求而顺利运行完毕。因此系统不会产生死锁。

4. 答:当N<4时,系统没有死锁的危险。因为当N为1时,它最多需要3台磁带机,系统中共有8台,其资源数已足够一个进程使用,因此绝对不会产生死锁,,当N为2时,两个进程最多需要6台磁带机,系统中共有8台,其资源数也足够两个进程使用,因此也不会产生死锁;当N为3时,无论如何分配,3个进程中必有进程得到3台磁带机,该进程已经达到它的最大需求,当它运行完毕后可是放这3台磁带机,这就保证了其他两个进程也可顺利执行完毕。因此当N<4时,系统没有死锁的危险。

当N=4时,假设4个进程都得到两个资源,此时系统中已没有剩余资源,而4个进程都没有到达它们的最大需求,所以系统有可能产生死锁。同理,当N>4时,也有产生死锁的危险。 5.

(1)先来先服务(FCFS)

平均周转时间 T=(3+7+9+12+12)/5=43/5=8.6

平均带全周转时间 W=(1+1.17+2.25+2.4+6)/5=12.82/5=2.56 (2)采用时间片轮转(时间片q=1)

平均周转时间 T=(4+16+13+14+7)/5=54/5=10.8

平均带权周转时间 W=(1.33+2.67+3.25+2.8+3.5)/=13.55/5=2.71 (3)短进程优先(SPN)

平局周转时间 T=(3+7+11+14+3)/5=38//5=7.6

平均带权周转时间 W=(1+1.17+2.75+2.8+1.5)/5=38/5=7.6 (4)采用最短剩余时间(SRT,时间片q=1) 平局周转时间 T=(3+18+4+9+2)/5=36/5=7.2

平均带权周转时间 W(1+3+1+1.8+1)/5=7.8/5=1.56 (5)采用响应比高者优先(HRRN)

平均周转时间 T=(3+7+9+14+7)/5=40/5=8

平均带全周转时间 W=(1+1.17+2.25+2.8+3.5)/5=10.72/5=2.14 (6)采用多级反馈队列(MFQ,第1个队列的时间片为1 ,第(ii>1)个队列的时间片 q=2

(i-1))

平均周转时间 T=(3+15+14+14+6)/5=52/5=10.4

平均带权周转时间 W=(1+2.5+3.5+2.8+3)/5=12.8/5=2.56