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

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

5.1为什么对调度程序而言,区分CPU约束程序和I/O约束程序很重要?

答:在运行I/O操作前,I/0限制的程序只运行很少数量的计算机操作。而CPU约束程序一般来说不会使用很多的CPU。另一方面,CPU约束程序会利用整个时间片,且不做任何阻碍I/O操作的工作。因此,通过给I/O约束程序优先权和允许在CPU 约束程序之前运行,可以很好的利用计算机资源。

5.3考虑用于预测下一个CPU区间长度的指数平均公式。将下面的值赋给算法中的参数的含义是什么? A.a=0 且t0=100 ms

B.a=0.99 且t0=10 ms

答:当a=0且t0=100ms时,公式总是会预测下一次的CPU区间为100毫秒。当 a=0.99且t0=10毫秒时,进程将给予更高的重量以便能和过去相比。因此,调度算法几乎是无记忆的,且简单预测未来区间的长度为下一次的CPU执行的时间片。

5.4考虑下面一组进程,进程占用的CPU区间长度以毫秒来计算:

进程 P1 P2 P3 P4 P5

区间时间 10 1 2 1 5

优先级 3 1 3 4 2

假设在0时刻进程以P1、P2、P3、P4、P5的顺序到达。

a.画出 4 个 Gantt 图分别演示用 FCFS、SJF、非抢占优先级(数字小代表优先级高)和 RR(时间片=1)算法调度时进程的执行过程。 b.每个进程在每种调度算法下的周转时间是多少? c.每个进程在每种调度算法下的等待时间是多少? d.哪一种调度算法的平均等待时间最小? 答a.

FCFS:

P1 0 SJF: P2 0 1 P4 2 P3 4 P5 9 P1 19 P2 10 11 P3 P4 13 14 P5 19 非抢占优先级: P2 0 RR:

P1 P2 P3 P4 P5 P1 P3 P5 P1 P5 P1 P5 P1 P5 0

b.周转时间:

P1 P2 P3 P4 P5 FCFS 10 11 13 14 19 SJF 19 1 4 2 9 非抢占优先级 16 1 18 19 6 RR 19 2 7 4 14 P5 1 6 P1 16 P3 P4 18 19 P1 19 1 2 3 4 5 6 7 8 9 10 11 12 13 14

c.等待时间:

P1 P2 P3 P4 P5 FCFS 0 10 11 13 14 SJF 9 0 2 1 4 非抢占优先级 6 0 16 18 2 RR 9 1 5 3 9

d.从上表中可以看出SJF的等待时间最小。

5.5下面哪种调度算法能导致饥饿? a.先到先服务 b.最短作业优先 c.轮转法 d.优先级

答:最短作业优先和优先级调度算法能导致饥饿。因为对于优先级较低的作业来说,最短作业优先和优先级调度算法会使其无穷等待CPU,长期得不到调用,这就导致了饥饿问题,也叫无穷阻塞。

5.9考虑下面的动态改变优先级的抢占式优先级调度算法。大的优先级数代表高优先级。当一个进程在等待 CPU 时(在就绪队列中,但未执行),优先级以α速率改变;当它运行时,优先级以β速率改变。所有的进程在进入等待队列时被给定优先级为 0。参数α和β可以进行设定得到许多不同的调度算法。 a.β>α>0是什么算法? b.α<β<0时是什么算法?

答:a.FCFS先到先服务调度算法。当进程进入到就绪队列时,其PCB链接到队列的尾部,优先级以α速率改变;当CPU空闲时,CPU分配给位于队列头的进程,优先级加快,以β速率改变,接着该运行进程从队列中删除。

b.LIFO后进先服务调度算法。同上,当进程进入到就绪队列时,优先级以α速率改变,等待后进的进程先调度,之后轮到该进程时,优先级加快,以β速率改变,完成调度。

6.1第一个著名的正确解决两个进程的临界区问题的软件方法是Dekker设计的。两个进程P0和P1共享以下变量:

boolean flag[2]; int turn;

进程Pi(i==0或1)的结构见6.25,,另一个进程为Pj(j==0或1)。证明这个算法满足临界区问题的所有三个要求。 do{

flag[i]=TRUE; while(flag[j]){

/*initially false*/

if(turn==j){

flag[i]=false; while(turn==j) ; //do nothing flag[i]= TRUE;

} }

//critical section turn==j; flag[i]=FALSE; //remainder section }while(TRUE);

图6.25 Dekker算法中的进程pi结构 答:这个算法满足临界区问题的三个要求: (1)

在标记和返回变量的使用中,互斥条件是保证的。如果两个进程将它们的标识设为

真,那么只有一个进程会成功进行,即轮到的那个进程。当另一个进程更新它的返回变量时,等待的那个进程只能进入它的临界区域。 (2)

就绪的进程,通过标志,返回变量。这个算法没有提供严格的交替。如果一个进程

想要进入它们的临界区域,它可以将它的标识设为真,然后进入它们的临界区域。当退出它的临界区域,它可以设置转向其他进程的值。如果这个进程想要在其他进程之前再次进入它的临界区域,它会重复这样的进程:进入它的临界区域,在退出时转向另一个进程。 (3)

在双 T 返回变量的使用过程中,临界等待受阻。假设两个进程想要进入它们的责

任所在的临界区域。它们都将它们的标志的值设为真;而只有轮到的那个线程可以执行;其他的线程处于等待状态。如果临界等待没有受阻,当第一个进程重复“进入-退出”它的临界区域这一过程。Dekker 算法在一个进程中设置一个转向另一个进程的值,从而保证另一个进程接下来进入它的临界区域。

6.2 第一个将等待次数降低到n-1范围内的正确解决n个进程临界区问题的软件解决方法是由Eisenberg和Mcguire设计的。这些进程共享以下变量:

enum pstate{idle, want in, in cs}; pstate flag[n]; int turn;