操作系统课后习题答案 联系客服

发布时间 : 星期一 文章操作系统课后习题答案更新完毕开始阅读cdabaaf9d3f34693daef5ef7ba0d4a7302766cc9

flag的所有成员被初始化为idle;turn的初始值无关紧要(在0和n-1之间)。进程pi的结构见图6.26。试证明这个算法满足临界区问题的所有三个要求。

do{

while(TRUE){ }

flag[i] = in cs; j= 0;

while((j

j++;

flag[i] = want in; j = turn; while(j != i){

if(flag[j] != idle){

j = turn;

else

j = (j+1)%n;

if((j >= n) && (turn == I || flag[turn] == idle)) }

break;

//critical section

j =(turn + 1)%n; while(flag[j] == idle)

j = (j + 1)%n;

turn = j; flag[i] = idle;

//remainder section

}while(TRUE);

图6.26Eisenberg和McGuire算法中的进程pi结构

答:(1)互斥:注意到一个进程只有在下列条件满足时才能进入临界区域:没有其他进程在 CS 中有设置的标识变量。保证没有两个进程同时进入临界区域。

(2)有空让进:当多进程同时在 CS 中设置它们的标识变量时,检查是否有其他进程在 cs 中设置标识变量。这种情况发生时,所有的进程意识到这里存在进程竞争,在外层 while(1)的循环下进入下一次迭代,重置它们的标识变量到 want 中。这个进程仅能进入临界区域。

(3)有限等待:当进程 k 在打算进入临界区域时,它的标识不再置为空闲。任何序号不在轮次和 k 之间的进程不能进入临界区域。与此同时,所有序号落在轮次和 k 之间且又想要进入临界区域的进程能够进入临界区域(这是基于系统一直在进步的事实),这个轮次值变得越来越接近 k。最后,要么轮次变为 k,要么没有哪些序号在轮次和 k 之间的进程,这样进程 k 就进入临界区域了。

6.9试说明如果wait()和signal()操作不再是原子化操作,那么互斥可能是不稳定的。 答:买卖操作自动递减和信号量有关的值。如果两个买卖操作在信号量的值为 1 的信号量上执行,而且这两种操作不是自动执行的,那么这两个操作在进展中会递减信号量的值,从而干扰互斥。

6.11理发店问题。一家理发店有一间有n把椅子的等待室和一间有一把理发椅的理发室。如果没有顾客,理发师就去睡觉。如果顾客来时所有的椅子都有人,那么顾客就会离去。如果理发师在忙,而又有空闲的椅子,那么顾客会坐在其中一个空闲的椅子上。如果理发师在睡觉,顾客会摇醒他。编写一个程序来协调理发师和顾客。

答:当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产者。因此此题可看作是n个生产者和1个消费者问题。顾客作为生产者,每到来一个就使计数器count增加1,以便让理发师理发(相当于消费)至最后一个顾客(相当于产品)。并且,第1个到来的顾客应负责唤醒理发师;如果不是第1个到达的顾客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计数器count获得),所以可以通过一个有界缓冲区把理发师和顾客联系起来通过对信号进行P、V操作来实现有关问题和相关描述。

控制变量waiting 用来记录正在等候顾客的理发师数;

信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程; 信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程。 信号量mutex用于互斥。 初始化:

int long waiting(0);//正在等待的顾客的数目 customers,barbers,mutex:semaphore; customers:0;

barbers:=1; waiting:=0; mutex:=NULL;

理发师进程: barber() begin

顾客进程:

do{

P(customers)

;//若无顾客,理发师睡眠 p(mutex) ;//进程互斥 waiting-- ;//等候顾客减1 V(barbes)

;//理发师为下一个顾客理发 V(mutex) ;//开放临界区 cut-hair() ;//正在理发

}while(TURE)//是否还有顾客

customer() begin

do{

P(mutex);//进程互斥 if(waiting){

waiting++;//等待顾客数加1

} else

V(customers);//唤醒理发师 V(mutex);//开放临界区

P(barbers);//理发师没空,顾客等候 get-haircut;//顾客准备理发

V(utex);//无空闲位,顾客离开

}while(TRUE)

6.15试论述读者-写者问题的操作公平性及吞吐量,并设计一个新方法解决读者-写者问题且不会产生饥饿。

答:读者-作者问题中吞吐量是受利益多的读者所影响的,而不是让一个作家独占式地获得。另一个方面,有利于读者则可能会导致饥饿的作者。在读者-写者问题中能够通过保持和等待进程有关的时间来避免。当作者完成他的任务,那么唤醒那些已经等了最长期限的进程。当读者到达和注意到另一个读者正在访问数据库,那么它只有在没有作者等待的情况下才能进入临界区域。