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) { { 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); { while(true) { while(true) { {
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(Rmutex); P(wmutex);
If(Rcount==0) 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))