1、现代操作系统第四版第五章答案第五章 输入 /输出 习题1.芯片技术的进展已经使得将整个控制器包括所有总线访问逻辑放在一个便宜的芯片上成为可能。这对于图 1-5 的模型具有什么影响?答:(题目有问题,应该是图 1-6 )在此图中,一个控制器有两个设备。单个控制器可以有多个设备就无需每个设备都有一个控制器。 如果控制器变得几乎是自由的,那么只需把控制器做入设备本身就行了。 这种设计同样也可以并行多个传输,因而也获得较好的性能。2.已知图 5-1 列出的速度,是否可能以全速从一台扫描仪扫描文档并且通过802.1 lg 网络对其进行传输 ?请解释你的答案。答:太简单了。扫描仪最高速率为 400 KB/
2、Sec ,而总线程和磁盘都为 16.7MB/sec ,因此磁盘和总线都无法饱和。3.图 5-3b 显示了即使在存在单独的总线用于内存和用于 I/O 设备的情况下使用内存映射 I/O 的一种方法,也就是说,首先尝试内存总线,如果失败则尝试 I/O总线。一名聪明的计算机科学专业的学生想出了一个改进办法: 并行地尝试两个总线,以加快访问 I/O 设备的过程。你认为这个想法如何?答:这不是一个好主意。内存总线肯定比 I/O 总线快。一般的内存请求总是内存总线先完成,而 I/O 总线仍然忙碌。如果 CPU 要一直等待 I/O 总线完成,那就是将内存的性能降低为 I/O 总线的水平。4.假设一个系统使用
3、DMA 将数据从磁盘控制器传送到内存。 进一步假设平均花费 t2ns 获得总线,并且花费 t1ns 在总线上传送一个字( t1t2 )。在 CPU 对DMA 控制器进行编程之后,如果( a)采用一次一字模式,(b)采用突发模式,从磁盘控制器到内存传送 1000 个字需要多少时间?假设向磁盘控制器发送命令需要获取总线以传输一个字,并且应答传输也需要获取总线以传输一个字。答:( a) 1000 (t1+t2)+(t1+t2)+(t1+t2);第一个 (t1+t2) 是获取总线并将命令发送到磁盘控制器,第二个 (t1+t2) 是用于传输字,第三个 (t1+t2) 是为了确认。总之,共3000 (t1
4、+t2)纳秒。(b) (t1+t2)+t1+1000 t2+(t1+t2),第一个 (t1+t2) 是获取总线并将命令发送到磁盘控制器,第二个 t1 是为磁盘控制器获取总线,第三个 1000 t2是突发传送,第第四个 (t1+t2) 是获取总线并做确认。总 3t1+1002 。t25.假设一台计算机能够在 10ns 内读或者写一个内存字, 并且假设当中断发生时,所有 32 位寄存器连同程序计数器和 PSW 被压人堆栈。该计算机每秒能够处理的中断的最大数目是多少?答:一次中断需要入栈 34 个字。而从中断返回需要把 34 个字从栈中取出。总耗时为 680 ns 。因此,每秒最多处理 147 万次
5、中断,假设每次中断什么也不做。6.CPU 体系结构设计师知道操作系统编写者痛恨不精确的中断。取悦于 OS 人群的一种方法是当得到一个中断信号通知时,让 CPU 停止发射指令,但是允许当前正在执行的指令完成, 然后强制中断。 这一方案是否有缺点?请解释你的答案。答:当前的处理器一般采用多级流水线操作,无法准确地确定 CPU 当前正在执行的指令是哪一条,所以停止让 CPU 发送指令后,需要等待把流水线中的指令全部执行完成才能响应中断, 对于指令不按序执行的处理器而言, 会造成中断响应的不精确。7.在图 5-9b 中,中断直到下一个字符输出到打印机之后才得到应答。中断在中断服务程序开始时立刻得到应答
6、是否同样可行 ?如果是,请给出像本书中那样在中断服务程序结束时应答中断的一个理由。如果不是,为什么?答:在开始中断服务例程时就确认是可以的。 而在最后才做的原因是因为中断服务例程的代码都非常短。 通过先输出另一个字符和然后确认该中断, 如果立即发生另一个中断, 打印机将在此中断期间工作, 将使得打印稍快。 该方法的缺点是当其他中断禁用时,死机时间稍长。8.一台计算机具有如图 1-6a 所示的三阶段流水线。在每一个时钟周期,一条新的指令从 PC 所指向的地址处的内存中取出并放人流水线,同时 PC 值增加。每条指令恰好占据一个内存字。 已经在流水线中的指令每个时钟周期前进一个阶段。当中断发生时,当
7、前 PC 压入堆栈, 并且将 PC 设置为中断处理程序的地址。然后,流水线右移一个阶段并且中断处理程序的第一条指令被取入流水线。 该机器具有精确的中断吗 ?请解释你的答案。答:(题目有问题,应该是图 1-7a )具有精确的中断。入栈的 PC 指向第一条未读取的指令。之前的所有指令都已执行, 而指向的指令及其后续指令均尚未执行,这就是精确中断的条件。 精确中断在单管线的机器上不难实现, 但是当指令不按序执行时会有麻烦,此时就不再具有精确的中断。9.一个典型的文本打印页面包含 50 行,每行 80 个字符。设想某一台打印机每分钟可以打印 6 个页面,并且将字符写到打印机输出寄存器的时间很短以至于可
8、以忽略。如果打印每一个字符要请求一次中断,而进行中断服务要花费总计 5 s的时间,那么使用中断驱动的 I/O 来运行该打印机有没有意义?答:该打印机打印每分钟打印 50 80 = 624000 个字符,也就是 400 字符 /s,每个字符使用 50ns 的 CPU 时间用于中断,因此,每秒总共的中断时间是 20 ms 。使用中断驱动 I/O 余下的 980ms 可供其它使用。换句话说,中断耗时只占 CPU时间的 2%,这几乎不会影响运行的程序。10.请解释 OS 如何帮助安装新的驱动程序而无须重新编译 OS 。答: UNIX 通过以下的方法实现。有一个由设备编号索引的表,每个表项是一个C结构,
9、其中包含指向打开、关闭、读取和写入功能的指针,以及来自设备的其他一些东西。 要安装新设备, 必须在此表中新建一个条目, 并将指针填充到新加载的设备驱动程序中。11.以下各项工作是在四个 I/O 软件层的哪一层完成的?a)为一个磁盘读操作计算磁道、扇区、磁头。b)向设备寄存器写命令。c)检査用户是否允许使用设备。d)将二进制整数转换成 ASCII 码以便打印。答:(a)设备驱动程序。(b)设备驱动程序。(c)设备无关的软件。(d)用户级软件。12.一个局域网以如下方式使用:用户发出一个系统调用,请求将数据包写到网上,然后操作系统将数据复制到一个内核缓冲区中, 再将数据复制到网络控制器接口板上。当
10、所有数据都安全地存放在控制器中时, 再将它们通过网络以 10Mb/s的速率发送。在每一位被发送后, 接收的网络控制器以每微秒一位的速率保存它们。当最后一位到达时,目标 CPU 被中断,内核将新到达的数据包复制到内核缓冲区中进行检査。 一旦判明该数据包是发送给哪个用户的, 内核就将数据复制到该用户空间。如果我们假设每一个中断及其相关的处理过程花费 1ms 时间,数据包为 1024 字节(忽略包头),并且复制一个字节花费 1ns 时间,那么将数据从一个进程转储到另一个进程的最大速率是多少 ? 假设发送进程被阻塞直到接收端结束工作并且返回一个应答。 为简单起见,假设获得返回应答的时间非常短,可以忽略
11、不计。答:在这个过程中,包必须复制四次,需要 4.1 毫秒。有两个中断,占 2 毫秒。最后,传输时间为 0.83 毫秒, 1024 字节的数据包共需要 6.93 毫秒。最大数据传输速率为 147763 字节 /秒,或约 10 兆位 /秒的网络标称容量的 12% 。(如果我们考虑协议开销,结果会变得更糟)13.为什么打印机的输出文件在打印前通常都假脱机输出在磁盘上?答:如果每次输出都立即分配打印机, 某进程可以通过打印机 1 个字符来冻结打印机,然后休眠一个星期。14.3 级 RAID 只使用一个奇偶驱动器就能够纠正一位错误。 那么 2 级 RAID 的意义是什么?毕竟 2 级 RAID 也只能
12、纠正一位错误而且需要更多的驱动器。答: RAD level 2 不仅可以从故障驱动器来恢复错误位,还可以从未被检测的的瞬时差错中恢复。如果某驱动器发送一个坏数据位, RAID level 2 可以纠正,而RAIDlevel 3 不能。15.如果两个或更多的驱动器在很短的时间内崩溃,那么 RAID 就可能失效。假设在给定的一小时内一个驱动器崩溃的概率是 p ,那么在给定的一小时内具有 k个驱动器的 RAID 失效的概率是多少?答:0 次故障的概率 P0 为 (1-p)k 。1 次故障的概率 P1 为 kp(1-p)k-1 。而整个 RAID发生故障的概率为 1-P0-P1 ,也就是 1-(1-p
13、)k-kp(1-p)k-1 。16. 从读性能、写性能、空间开销以及可靠性方面对 0 级 RAID 到 5 级 RAID 进行比较。答:读取性能: RAID 级别 0,2,3,4 和 5 允许一个读请求并行读取服务。然而, RAID 级别 1 进一步允许两个读取请求同时进行。写入性能:所有 RAID 级别提供类似的写入性能。空间开销:第 0 级没有空间开销,而第 1 级 100% 的开销。第 2 级带 32 位数据字和六位奇偶校验驱动器,空间开销约 18.75% 。对于32 位数据字, 3 级的空间开销约为 3.13% 。最后,假设 4 和 5 级别具有 33 个驱动器,则他们的空间开销是 3
14、.13% 。可靠性: 0 级没有可靠性支持。所有其他RAID 级别可以在一个磁盘崩溃时保证数据。此外,对于 3,4 和 5 级别,在一个字内的一个单一的随机位错误可以被检测到, 而第 2 级,在一个字内的一个单一的随机位错误可以被检测和纠正。17.为什么光存储设备天生比磁存储设备具有更高的数据密度?注意:本题需要某些髙中物理以及磁场是如何产生的知识。答:在两个磁极之间会产生磁场。不仅难于使磁场源变小,而且磁场传播迅速,这将导致此行媒体的表面接近磁源或者传感器的机械问题。 而半导体激光可以在非常小的地方产生激光,而且激光可以从较远的地方感知这些极小的点。18.光盘和磁盘的优点和缺点各是什么?答:
15、光盘的主要优点是它们比磁盘具有更高的记录密度。 磁盘的主要优点是比光盘快一个数量级。19.如果一个磁盘控制器没有内部缓冲,一旦从磁盘上接收到字节就将它们写到内存中,那么交错编号还有用吗 ?请讨论。答:有可能。如果大多数文件被存储在逻辑上连续的扇区内, 那么就可能使得程序有时间以交叉扇区的形式处理刚刚接收的数据, 这样当下一请求发出时, 磁盘正好在正确的地方。20.如果一个磁盘是双交错编号的,那么该磁盘是否还需要柱面斜进以避免在进行磁道到磁道的寻道时错过数据?请讨论你的答案。答:也许要,也许不要。如果跨道时磁头移动少于 2 个扇区,就不需要柱面倾斜。如果大于 2 个扇区,则需要柱面倾斜。21.考
16、虑一个包含 16 个磁头和 400 个柱面的磁盘。该磁盘分成 4 个 100 柱面的区域,不同的区域分别包含 160 个、 200 个、 240 个和 280 个扇区。假设每个扇区包含 512 字节,相邻柱面间的平均寻道时间为 1ms, 并且磁盘转速为7200rpm 。计算 a)磁盘容量、 b) 最优磁道斜进以及 c) 最大数据传输率。答:( a)一个区的容量是磁道 柱面 扇区 /柱面 字节 /扇区。1 区 :16 100 160512 = 131072000 字节容量2区 :16 100 200 512 = 163840000字节容量3区 :16 100 240 512 = 19660800
17、0字节容量4区 :16 100 280 512 = 229376000字节容量总和 = 131072000 + 163840000 +196608000 + 229376000 = 720896000(b) 7200rpm 的旋转速度意味着 120 圈/秒。在 1 毫秒平均寻道里, 0.12 的圈覆盖。在第 1 区硬盘磁头在 1 毫秒将经过 0.12 160扇区,因此,最优轨迹区域1 的偏斜是 19.2 扇区。在 2 区,磁盘头在 1 毫秒将经过 0.12 200扇区,因此,最优轨迹偏移 24 扇区。在 3 区,磁头在 1 毫秒将经过 0.12 240扇区,因此,区域 3 的最佳磁道偏斜是 2
18、8.8 扇区。在 4 区,磁头在 1 毫秒经过 0.12 280扇区,因此,最优轨迹偏移是 33.6 扇区。(c)在最外层区域( 4 区)内的磁头正在读取 /写入时获得最大数据传输速率。在那个区域,在一秒钟内,280 扇区被阅读 120 次。因此,数据率为 280 120 512 = 17203200 字节 /秒。22.一个磁盘制造商拥有两种 5.25 英寸的磁盘,每种磁盘都具有 10 000 个柱面。新磁盘的线性记录密度是老磁盘的两倍。 在较新的驱动器上哪些特性更好, 哪些无变化?答:驱动器容量和传输速率是原来的 2 倍。寻道时间和平均旋转延时是相同的。23.一个计算机制造商决定重新设计 P
19、entium 硬盘的分区表以提供四个以上的分区。这一变化有什么后果?答:一个相当明显的后果是没有哪个操作系统可以生效, 因为这些操作系统都会在原来的分区表位置査找分区。 改变分区表格式将使所有操作系统都失败。 改变分区表的唯一方法是同时改变所有操作系统以使用新的格式。24.磁盘请求以柱面 10、22 、20、2、40、6 和 38 的次序进入磁盘驱动器。寻道时每个柱面移动需要 6ms ,以下各算法所需的寻道时间是多少?a)先来先服务。b)最近柱面优先。c)电梯算法(初始向上移动) 。在各情形下,假设磁臂起始于柱面 20 。答:(a) FCFS:10+12+2+18+38+34+32 = 146
20、 柱面 = 876 ms (先到先得)(b) SSF: 0+2+12+4+4+36+2 = 60 柱面 = 360 ms (每次最小移臂)(c) 电梯算法: 0+2+16+2+30+4+4 = 58 柱面 = 348 ms (一个方向)25.调度磁盘请求的电梯算法的一个微小更改是总是沿相同的方向扫描。在什么方面这一更改的算法优于电梯算法?答:在最坏的情况下,电梯算法需要两个完整的磁盘扫描才能完成一个读 /写请求服务,而改进算法最多只需要一个完整的磁盘扫描。26.在讨论使用非易失性 RAM 的稳定的存储器时,掩饰了如下要点。如果稳定写完成但是在操作系统能够将无效的块编号写入非易失性 RAM 之前
21、发生了崩溃,那么会有什么结果 ?这一竞争条件会毁灭稳定的存储器的抽象概念吗 ?请解释你的答案。答:会出现竞争,但是不要紧。 稳定写入本身已经完成, 事实上,非易失性 RAM没有被更新只是意味着恢复程序将知道哪些块被写入过。 它会读到两个相同的副本,但并不会改变它们,这是正确的操作。非易失性 RAM 在更新前系统崩溃仅仅意味着恢复程序不得不进行两次磁盘读操作。27. 在关于稳定的存储器的讨论中, 证明如果在写过程中发生了 CPU 崩溃,磁盘可以恢复到一个一致的状态(写操作或者已完成,或者完全没有发生) 。如果在恢复的过程中 CPU 再次崩溃,这一特性是否还保持?请解释你的答案。答:是的,即使在恢
22、复程序运行的过程中 CPU 再次崩溃,磁盘依然能恢复一致状态。考虑图 5-31 ,( a)或( e)中没有恢复。假设 CPU 在( b)恢复期间崩溃,如果 CPU 在驱动器 2 的块被完全复制到驱动器 1 之前崩溃,情况仍然和以前一样。随后的恢复过程将检测驱动器 1 中的 ECC 错误,然后再次从驱动器 2 复制块到驱动器 1。如果 CPU 在驱动器 2 的块被复制到驱动器 1 后崩溃,情况和(e)是一样的情况。假设 CPU 在( c)恢复期间崩溃。如果 CPU 崩溃之前,从驱动器1 块已完全复制到驱动器 2,情况和( d )是一样的。随后的恢复过程将检测驱动器 2 中的 ECC 错误,并将该
23、块从驱动器 1 复制到驱动器 2。如果 CPU 从驱动器 1 的块被复制到驱动器 2 后崩溃,情况和( e)是一样的。最后,假设CPU 在( d)恢复期间崩溃。如果 CPU 在驱动器 1 之前的块被完全复制到驱动器 2 后崩溃,情况仍然和以前一样。随后的恢复过程将检测驱动器 2 中的 ECC错误,然后再次从驱动器 1 复制块到驱动器 2。如果 CPU 从驱动器 1 的块被复制到驱动器 2 后崩溃,情况和( e)是一样的。28. 某计算机上的时钟中断处理程序每一时钟滴答需要 2ms (包括进程切换的开销),时钟以 60Hz 的频率运行,那么 CPU 用于时钟处理的时间比例是多少?答:时钟频率 6
24、0HZ ,故时钟周期 T = 1000ms/60 = 50/3ms ;CPU 用于时间处理的比例为: 2 / (50/3) 100%。= 12%29.台计算机以方波模式使用一个可编程时钟。如果使用 500MHz 的晶体,为了达到如下时钟分辨率,存储寄存器的值应该是多少?a)1ms (每毫秒一个时钟滴答) 。b)100us 。答:( a)使用一个 500 MHz 的晶体,计数器可以每 2 纳秒的递减。所以,每毫秒一次,寄存器应该是 1000000 / 2 = 500000 。( b)每 100 秒获得一个时钟刻度,持有寄存器值应为 50000 。30. 个系统通过将所有未决的时钟请求链接在一起而
25、模拟多个时钟,如图 5-34所示。假设当前时刻是 5000 ,并且存在针对时刻 5008 、5012 、5015 、5029 和5037 的未决的时钟请求。请指出在时刻 5000 、5005 和 5013 时时钟头、当前时刻以及下一信号的值。请指出在时刻 5023 时时钟头、当前时刻以及下一信号的值。答:时间 5000 :当前时间 = 5000 ;下一个信号 = 8;头 8 4 3 14。 8时间 5005 :当前时间 = 5005 ;下一个信号 = 3;头 3 4 3 14。 8时间 5013 :当前时间 = 5013 ;下一个信号 = 2 ;头 2 14 8。时间 5023 :当前时间 =
26、 5023 ;下一个信号 = 6 ;头 6 4 531.许多 UNIX 版本使用一个 32 位无符号整数作为从时间原点计算的秒数来跟踪时间。这些系统什么时候会溢出(年与月) ? 你盼望这样的事情实际发生吗?答:一年的平均秒数为 365.25 24 3600 = 31,557,600。计数器大约在 232 秒之后回绕。 232/31,557,600 = 136.1 年,也就是大约在 2106 年 2 月。如果到那时所有计算机至少是 64 位的,因此该情形将不会发生。32.个位图模式的终端包含 1280 960 个像素。为了滚动一个窗口, CPU (或者控制器)必须向上移动所有的文本行, 这是通过
27、将文本行的所有位从视频 RAM的一部分复制到另一部分实现的。 如果一个特殊的窗口高 60 行宽 80 个字符(总共 4800 个字符),每个字符框宽 8 个像素高 16 像素,那么以每个字节 50ns 的复制速率滚动整个窗口需要多长时间?如果所有的行都是 80 个字符长,那么终端的等价波特率是多少?将一个字符显示在屏幕上需要 5 s,每秒能够显示多少行?答:滚动窗口需要复制 59 行 80字符 = 4720 字符。复制 1 个字符 (16 个字节 )需800 ns ,因此整个窗口需要 3.776 ms 。向屏幕写 80 个字符需 400ns ,因此滚动和显示新的行需 4.176 ms 。大约
28、239.5 行/sec 。33.接收到一个 DEL(SIGINT) 字符之后,显示驱动程序将丟弃当前排队等候显示的所有输出。为什么?答:假设用户无意中要求编辑器打印数千条线,然后他点 DEL 停止它。如果驱动程序没有放弃输出, 则输出可能会持续几秒钟后, 当没有发生的事情时, 这将使用户一次又一次地击中 DEL 并且刷新。34.在最初 IBM PC 的彩色显示器上, 在除了 CRT 电子束垂直回扫期间以外的任何时间向视频 RAM 中写数据都会导致屏幕上出现难看的斑点。一个屏幕映像为25 80个字符,每个字符占据 88像素的方框。每行 640 像素在电子束的一次水平扫描中绘出,需要花费 63.6
29、 s,包括水平回扫。屏幕每秒钟刷新 60 次,每次刷新均需要一个垂直回扫期以便使电子束回到屏幕顶端。 在这一过程中可供写视频 RAM 的时间比例是多少?答: 25 行字符,每行高 8 个像素,需要 200 次扫描才能绘制。每秒刷新 60 次屏幕,或者 12000 次行扫描 /秒。在 63.6 微秒 /扫描,每秒中用于波束水平移动763 毫秒,留下了 237 毫秒的时间可供视频 RAM 写入。因此,视频 RAM 可用的时间占 23.7% 。35.计算机系统的设计人员期望鼠标移动的最大速率为 20cm/s 。如果一个鼠标步是 0.1mm ,并且每个鼠标消息 3 个字节,假设每个鼠标步都是单独报告的,那么鼠标的最大数据传输率是多少?答:鼠标的最大