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

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

答:a:160和40

b:35 C:54

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

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

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

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

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

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

int turn;

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

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);

图 Dekker 算法中的进程 Pi 结构

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

这两个进程的临界区域问题的最初的正确的软件解决方案是由 Dekker 提出的。P0、P1 两个进程,具有以下共同的变量: boolean flag[2]; /* initially false */ int turn; 进程 Pi(i==0 or1)的结构在 中已经出现过;其他进程为 Pj(j == 1 or 0)。证明这个算法满足关键问题的三个要求。

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

(1) 在标记和返回变量的使用中,互斥条件是保证的。如果两个进程将它们的标识设为真,那么只有一个进程会成功进行,即轮到的那个进程。当另一个进程更新它的返回变量时,等待的那个进程只能进入它的临界区域。

(2) 就绪的进程,通过标志,返回变量。这个算法没有提供严格的交替。如果一个进程想要进入它们的临界区域,它可以将它的标识设为真,然后进入它们的临界区域。当退出它

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

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

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

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

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

c.有限等待:有限等待需要满足以下事实:当进程 k 在打算进入临界区域时,它的标识不再置为空闲。任何序号不在轮次和 k 之间的进程不能进入临界区域。与此同时,所有序号落在轮次和 k 之间且又想要进入临界区域的进程能够进入临界区域(这是基于系统一

直在进步的事实),这个轮次值变得越来越接近 k。最后,要么轮次变为 k,要么没有哪些序号在轮次和 k 之间的进程,这样进程 k 就进入临界区域了。

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

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

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

如果一个同步元是在一个用户级程序中使用的,解释在一个单处理器系统中为什么通过停止中断去实现这个同步元是不适合的答:如果一个用户级程序具有停止中断的能力,那么它能够停止计时器中断,防止上下文切换的发生,从而允许它使用处理器而不让其他进程执行。

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

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

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