操作系统概念第七版习题答案(中文版)完整版 联系客服

发布时间 : 星期四 文章操作系统概念第七版习题答案(中文版)完整版更新完毕开始阅读9b5451d36f1aff00bed51e4b

5.11用Window XP的调度算法,下列什么是数字优先的线程。

a.相对优先级的值为REALTIME_PRIORITY_CLASS的属于实体优先类型的线程 b.相对优先级的值为NORMAL_PRIORITY_CLASS的属于NORMAL类型的线程 c.相对优先级的值为HIGH_PRIORITY_CLASS的属于ABOVE_NORMAL类型的线程 答:a.26 b.8 c.14

5.12考虑在Solaris操作系统中的为分时线程的调度算法:

a:一个优先权是10的线程的时间片是多少?优先权是55的呢?

b:假设优先权是35的一个线程用它所有的时间片在没有任何阻止的情况下,这调度算法将会分配给这个线程什么样新的优先权?

c:假设一个优先权是35的线程在时间片结束前阻止I/O操作。这调度算法将会分配给这个线程什么样新的优先权?

答:a:160和40 b:35 C:54

5.13传统UNIX调度在优先数和优先级间成反比关系:数字越高,优先权越低。该调度进程利用下面的方程重新计算进程的优先权一次一秒: 优先权= (最近CPU使用率/ 2 ) +基本数

这里的基本数= 60,最近的 CPU使用率是指一个表明优先权从上一次重新计算后开始进程被CPU使用的情况。

假设最近进程p1的CPU使用率是40个,p2是18 ,p3是10。当优先权重新计算后这三个进程的新的优先权是什么?在此信息的基础上,传统UNIX的调度会不会提高或降低CPU限制的进程的相对优先权?

答 : 分配给这些进程的优先权分别是80,69和65.这调度降低了CPU限制的进程的相对优先权。

第六章 管程

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

boolean flag[2]; /*initially false*/ int turn;

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

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

if(turn==j){ flag[i]=false; while(turn==j); flag[i]=true; } }

临界区

turn=j;

flag[i]=false;

剩余区

}while(1);

图7.27 Dekker算法中的进程Pi结构

答:该算法满足三个相互排斥条件。(1)相互排斥是为了确保使用的变量和标志是可变的。如果所有进程都把他们的变量设置为真,只有一个会成功,那就是哪个进程轮到的问题了。等待中的进程只能够进入它的重要部分当其他进程在更新变量值时。

6.1这两个进程的临界区域问题的最初的正确的软件解决方案是由Dekker提出的。P0、P1两个进程,具有以下共同的变量: boolean flag[2]; /* initially false */

int turn;

进程 Pi(i==0 or1)的结构在6.25中已经出现过;其他进程为Pj(j == 1 or 0)。证明这个算法满足关键问题的三个要求。

答:这个算法满足临界区域的三个条件:

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

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

(2)就绪的进程,通过标志,返回变量。这个算法没有提供严格的交替。如果一个进程想要进入它们的临界区域,它可以将它的标识设为真,然后进入它们的临界区域。当退出它的临界区域,它可以设置转向其他进程的值。如果这个进程想要在其他进程之前再次进入它的临界区域,它会重复这样的进程:进入它的临界区域,在退出时转向另一个进程。

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

6.2针对有n个进程在带有较低时间限制的等待n-1个的轮次这样一个临界区域最早的解决该问题的正确方法是由艾森伯格和麦圭尔提出的。这些进程有以下的共同的变量: 枚举pstate{idle, want in, in cs}; pstate flag[n];

int turn;

所有的枚举标志被初始为空,轮次的最初值是无关紧要的(在0和n-1之间)。进程p的结构在6.26中有说明。证明这个算法满足临界区域问题的三项要求。

答:a.互斥:注意到一个进程只有在下列条件满足时才能进入临界区域:没有其他进程在CS中有设置的标识变量。这是由于进程在CS中设置自身的标识变量之前要先检查其他进程的状态。我们保证没有两个进程将同时进入临界区域。

b.有空让进:考虑以下情况,当多进程同时在CS中设置它们的标识变量,然后检查是否有其他进程在cs中设置标识变量。当这种情况发生时,所有的进程意识到这里存在进程竞争,在外层while(1)的循环下进入下一次迭代,重置它们的标识变量到want中。现在只有唯一的进程将设置它的轮次变量到cs中,这个唯一的进程就是其序号是最接近轮次的。从这个角度来说,对于哪些序号次接近轮次的新的进程就能决定进入临界区域,而且能同时在CS中设置它们的标识。随后这些进程意识到这里存在竞争的进程,于是重新启动进入临界区域的进程。在每次迭代中,进程在cs中设置的序号值将变得更加接近轮次,最后我们得出以下结论:只有进程k在cs中设置它的标识,而其他哪些序号在轮次和k之间不能在cs中设置它们的标识。这个进程仅能进入临界区域。

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

6.3忙等待的含义是什么?在操作系统中还有哪些其他形式的等待?忙等待能完全避免吗?给出你的答案。

答:忙等待意味着一个进程正在等待满足一个没有闲置处理器的严格循环的条件。或者,一个进程通过放弃处理器来等待,在这种情况下的块等待在将来某个适当的时间被唤醒。忙等待能够避免,但是承担这种开销与让一个进程处于沉睡状态,当相应程序的状态达到的时候进程又被唤醒有关。

6.4解释为什么自旋锁不适合在单处理器系统,而经常在多处理器系统下使用?

答:自旋锁不适合在单处理器系统是因为从自旋锁中打破一个进程的条件只有在执行一个不同的进程时才能获得。如果这个进程没有闲置处理器,其他进程不能够得到这个机会去设定一个第一个进程进展需要的程序条件。在一个多处理器系统中,其他进程在其他处理器上执行,从而为了让第一个进程从自旋锁中释放修改程序状态。

6.5如果一个同步元是在一个用户级程序中使用的,解释在一个单处理器系统中为什么通过停止中断去实现这个同步元是不适合的?

答:如果一个用户级程序具有停止中断的能力,那么它能够停止计时器中断,防止上下文切换的发生,从而允许它使用处理器而不让其他进程执行。

6.6解释为什么在一个多处理器系统中中断不适合同步元?

答:由于只有在防止其他进程在一个中断不能实现的处理器上执行来停止中断,中断在多处理器系统中是不够的。在对于进程能在其他处理器上执行是没有心智的,所以进程停止中断不能保证互斥进入程序状态。

6.7

6.8服务器能够设计成限制打开连接的数量。比如,一台服务器可以在任何时候有n个插座连接。这n个连接一形成,服务器就不能接收再有进来的连接直到一个现有的连线释放。解释为什么信号量能够通过服务器限制当前连线的数量而被使用。

答:信号量初始化为允许开放式的插座连接的数量。当一个连接被接受,收购方法调用。当连接释放时,释放方法调用。如果系统道道了允许开放式的插座连接的数量,相继调用收购方法将受阻直到一个现有的连线终止,释放方法调用。

6.9证明如果获得和释放的信号量操作没有动态地执行,那么互斥会受干扰。

答:收购操作自动递减和信号量有关的值。如果两个收购操作在信号量的值为1的信号量上执行,而且这两种操作不是自动执行的,那么这两个操作在进展中会递减信号量的值,从而干扰互斥。

6.10(程序,不用翻)(6.13)

6.12证明管程和信号量是相当于它们能在执行相同类型的同步问题时使用

答:在用下列方法使用信号量时,管程可以实施。每个条件变量是由一个队列中的线程等待条件组成的。每个线程有一个和它的队列进入有关的信号量。当线程表现出等待操作时,它创造一个心得信号量(初始化为0),附加信号量到和条件变量有关的队列中,在新创造的信号量上执行阻塞信号递减操作。

6.15讨论在读者-作者问题中的公平和吞吐量的权衡问题。提出一种解决读者-作者问题而不引起饥饿的方法

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