现代操作系统课后答案(中文)word

上传人:wt****50 文档编号:33197600 上传时间:2018-02-14 格式:DOC 页数:19 大小:255KB
返回 下载 相关 举报
现代操作系统课后答案(中文)word_第1页
第1页 / 共19页
现代操作系统课后答案(中文)word_第2页
第2页 / 共19页
现代操作系统课后答案(中文)word_第3页
第3页 / 共19页
现代操作系统课后答案(中文)word_第4页
第4页 / 共19页
现代操作系统课后答案(中文)word_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《现代操作系统课后答案(中文)word》由会员分享,可在线阅读,更多相关《现代操作系统课后答案(中文)word(19页珍藏版)》请在金锄头文库上搜索。

1、1MODERN OPERATING SYSTEM第 一 章 答 案1. 操作系统 必须向用户提供一台扩展 (即,实际上)的机器,和它必须管理 I/O 设备和其它系 统资源。2. 多道程序 就是 CPU 在内存中多个进程之间迅速切换。 它一般被用来使 CPU 保持忙碌, 当 有一个或多个进程进行 I/O 时。3. 输 入 spooling 是作业中 的读入技术, 例如, 从卡片在磁盘, 这样当当前执行的进程完成时 , 将等候 CPU。 输出 spooling 在打印之 前首先复制打印文件, 而非直接打印。 在个人计算机上 的输入 spooling 很少,但 是输出 spooling 非常普遍 。

2、4. 多道程序 的主要原因是当等候 I/O 完成时 CPU 有事可做 。 如果没有 DMA, I/O 操作时 CPU 被完全占有,因此,多道程序无利可图 (至少在 CPU 利用方面)。无论程序作多少 I/O 操作, CPU 都是 100%的忙碌。 当然,这里假定主要的延迟是数据复制时的等待。如果 I/O 很慢的 话,CPU 可以做其它工作。5. 第二代计 算机没有必要的硬件保护操作系统免受恶意的用户程序的侵害。6. 它依然存 在。 例如, Intel 以各种各 样 的不同的属性包括速度和能力消耗来生产 Pentium I, II, III 和 4。所有这些机器的体系结构都是兼容的,仅仅是价格上

3、的不同,这些都是家族思想的 本质。7. 25 X 80 字 符的单色文本屏幕需要 2000 字节的缓 冲器。 1024 X 768 象素 24 位颜色的位图需 要 2359296 字节。1 980 年代这两种选择将分别地耗费$ 10 和 $11520。而 对于当前的价格,将 少于$ 1/MB。8. 选择(a),( c),(d) 应该被限制在内核模式。9. 个人的计 算机系统总是交互式的, 而且经常只有一个用户。 而大型机系统几乎总有许多用 户强调批处理或者分时。除了对所有资源的有效使用,大型机系统上的保护更加重要。10. 从 管 道 中 每 纳 秒 出 现 一 条 指 令 。 意 味 着 该

4、机 器 每 秒 执 行 十 亿 条 指 令 。 它 对 于 管 道 有 多 少 个阶段全然不予理睬。 即使是 10-阶 段管道, 每阶段 1 nsec, 也将执行对每秒十亿条指令。 因 为无论那种情况,管道末端输出的指令数都是一样的。11. 原稿包 含 80 X 50 X 700 = 2800000 字符。 当然 , 这不可能放入任何目前的 CPU 中, 而且 对于 1MB 的 cache 来 说也太大了,但是如果可能的话,在寄存器中只需 2.8msec,在 Cache 中需要 5.8msec。整本书 大约有 2700 个 1024 字节 的数据块,因此从磁盘扫描大约为 27 秒, 从磁带扫描

5、则需 2 分钟 7 秒。当然, 这些时间仅为读取数据的时间。处理和重写数据将增加 时间。12. 从 逻 辑 上 说 , 边 界 寄 存 器 使 用 虚 拟 地 址 或 者 物 理 地 址 没 有 任 何 关 系 。 然 而 , 前 者 的 性 能 更好。如果使用虚拟地址,虚拟地址和基址寄存器的相加,与比较可以同时开始,而且可以2并行。如果使用物理地址,相加完成之前是不能进行比较的,这就增加了存取时间。13. 也 许 。 如 果 调 用 者 取 回 控 制 , 并 且 在 最 终 发 生 写 操 作 时 立 即 重 写 数 据 , 将 会 写 入 错 误 的 数据。然而,如果驱动程序在返回之前首

6、先复制将数据复制到一个专用的缓冲器,那么调用 者可以立即继续执行。另一个可能性是允许调用者继续,并且在缓冲器可以再用时给它一个 信号,但是这需要很高的技巧,而且容易出错。14. 陷 井 由 程 序 造 成 的 , 并 且 与 它 同 步 。 如 果 程 序 一 而 再 地 被 运 行 , 陷 井 将 总 在 指 令 流 中 相 同位置的精确发生。而中断则是由外部事件和其时钟造成的,不具有重复性。15. Base = 40000,Limit = 10000。按照 本书中描述的方法 Limit = 50000 是不 正确的。这种方 法也是可以执行的, 不过这样做将等待 addree + Base

7、完成后 才能开始边界检查, 将会使计算 机速度减慢。16. 进 程 表 是 为 了 存 储 当 前 被 挂 起 、 甚 或 是 被 延 迟 和 阻 塞 的 进 程 状 态 。 在 单 一 进 程 的 系 统 中 是不需要,因为单一进程从不挂起。17. 装配文件 系统将使得装配目录中已有的任何文件都不可访问, 因此装配点通常都是空的。 然而,系统管理人员可能需要将某些位于被装配目录中的非常重要的文件复制到装配点,使 得他们在进行设备检查或修理时,可以在紧急事件中的普通路径上找到这些文件。18. 如 果 进 程表 中 没 有 空闲 的 槽 (或 者 没 有 内 存 和交 换 空 间 ), Fork

8、 将 失 败 。 如 果 所 给的 文 件 名不存在, 或者不是一个有效的可执行文件, Exec 将失败。 如果将要解除链接的文件不存在, 或者调用 Unlink 的进程没 有权限,则 unlink 将失败 。19. 如果 fd 不正确, 调用失败 , 将返回.1.。 同 样, 如果磁盘满, 调用也失败, 要求写入的字 节数和实际写入的字节数可能不等。在正确终止时,总是返回 nbytes。20. 包含字节 : 1 , 5,9 ,2 。21. 块 特 殊 文 件 包 含 被 编 号 的 块 , 每 一 块 都 可 以 独 立 地 读 取 或 者 写 入 。 而 且 可 以 定 位 于 任 何 块

9、,并且开始读出或写入。这些对于字符特殊文件是不可能的。22. 系统调 用 实际上并没有名称,除了在文件中这样描述之外。当库例程 read 陷入 内核时, 它将系统调用号码放入寄存器或者堆栈中。该号码通常用于一张表的索引。这里确实没有使 用任何名称。而另一方面,库例程的名称是十分重要的,因为它将用于程序中。23. 是的,尤 其当系统内核是消息传递系统时。24. 就 程 序 逻 辑 而 言 , 库 例 程 调 用 哪 个 系 统 调 用 是 没 有 关 系 的 。 但 是 , 如 果 需 要 考 虑 性 能 问 题,无需系统调用就可以完成的任务将使程序运行更快。所有的系统调用都会导致用户环境 和内

10、核环境的切换开销。更进一步,在多用户系统中,在系统调用完成之前,操作系统可能 调度到其他的进程,这将使得调用过程的处理更加迟缓。25. 某些 UNIX 调用没有相应的 Win32 API:Link: Win32 程序不能给文件另外一个名称, 或者使某个文件出现在多个目录中。 同时, 试图创建链接可以便于测试,并且在文件上加锁。Mount 和 umount:W indows 程序不能创建关于标准的路径的假定命名,因为具有多个 磁盘驱动器的系统上路径名,其驱动器部分是不同的。3Chmod: Windows 程序员 不得不假定所有的用户都能访问每个文件。Kill:W indows 程序员不能 kil

11、l 行为失 常的程序。26. 这些都可 以直接转换:(a) micro year = 106 X 365 X 24 X 3600 = 31.536 sec。(b) 1km。(c)有 240字节,也就是 1,099,511,627,776 字节。(d)它是 6 X 1024公斤。4SOLUTIONS TO CHAPTER 2 PROBLEM1. 从阻塞到 运行的转换是可以想象的。假设某个进程在 I/O 上阻塞, 而且 I/O 结 束,如果此 时 CPU 空闲, 该进程就可以从阻塞态直接转到运行态。 而另外一种转换(从阻塞态到就绪态) 是不可能的。一个就绪进程是不可能做任何会产生阻塞的 I/O 或

12、者别的什么事情。只有运行 的进程才能被阻塞。2. 应该有一 个寄存器包含当前进程表项的指针。 当 I/O 结束 时, CPU 将把当前的机器状态存 入到当前进程表项中。 然后, 将转到中断设备的中断向量, 读取另一个过程表项的指针(服务 例程)。然后,就可以启动这个进程了。3. 通常, 高 级语言不允许访问 CPU 硬件,而这种访问是必需的。例如,中断处理程序可能 需要禁用和启用某个特定设备的中断服务,或者处理进程堆栈区的数据。另外,中断服务例 程需要尽快地执行。4. 内核使用 单独的堆栈有若干的原因。其中两个原因如下: 首先,不希望操作系统崩溃,由于某些用户程序不允许足够的堆栈空间。 第二,

13、如果内核将数据保留在用户空间,然后从系统调用返回,那么恶意的用户可能使用这些数据找出某些关于其它进程的信息。5. 即使是有 可能实现,也是很难保持文件系统的一致性。假设某个客户进程给服务器进程 1发送请求要更新文件。该进程更新其内存的 cache 项。然后,另一个客户进程给服务器进程2 发送请求读 取该文件。 不幸的是, 如果该文件还在 cache 中 , 服务器进 程 2 对此毫 不知情 , 将返回过时的数据。如果第一个进程在缓冲后将文件写到磁盘中,而服务器进程 2 每次读取 时检查磁盘其缓存的备份是否是最新的,系统还可以工作,但是需要避免磁盘访问的所有缓 存系统。6. 当线程停 止时, 其

14、值保留在寄存器中。 当进程停止时寄存器必须被保存。 分时线程与分时 进程没有区别,因此每个线出都需要其自己的寄存器保存区。7. 不会。如 果单线程进程在键盘上阻塞,就不能创建子进程。8. 当工作 者 线程从磁盘读取 Web 页时,它就会被阻塞。如果使用用户级线程,该动作将阻 塞整个进程,而破坏多线程的价值。这就是使用内核线程的原因:某些线程的阻塞不会影响 到其他线程。9. 进程中的 线程是相互协作的, 而不是相互对立的。 如果放弃是为了应用程序, 那么线程将 放弃 CPU。毕竟,通常是同一个程序员写的代码。10. 用 户 级 线 程 不 能 按 时 钟 剥 夺 , 除 非 整 个 进 程 的

15、时 间 片 用 完 。 内 核 级 线 程 可 以 单 独 地 被 剥 夺。 在后一种情况下, 如果线程运行过久, 时钟将中断该当前进程, 因而当前线程也被中断。 内核可以自由地从同一个进程中选取其他线程运行。11. 在单线程 情况下, cache 命中需 15 msec, cache 未命中需要 90 msec。 其加 权平均为 2/3 *15 + 1/3 * 90。因此,平均请求为 40 msec,而服 务器每秒可处理 25 个。 对于多线程服务器, 所有磁盘等待都是重叠的, 因此每个请求都耗时 15 msec, 而服 务器每秒可处理 66.6666 个请 求。512. 是的。如 果服务器

16、是完全 CPU 绑定的,则不需要多线程。这只会增加不必要的复杂性。 假设某个百万人口区域的电话查号系统(类似于 114), 如果每个 (姓名, 电 话号码)记录为 64 个 字符,整个的数据库则为 64MB,这 就很容易全部读入服务器内存中以提供快速的查询。13. 指 针 是 确 实 必 要 的 , 因 为 全 局 变 量 的 大 小 是 未 知 的 。 它 可 能 是 从 字 符 到 浮 点 数 数 组 的 任 何类型。如果保存其值,就不得不把其大小传递给 create_global,这都 没有问题,但是必须 将其类型作为 set_global 的第二个参数,那么 read_global 返回 值的类型是什么呢 ?14. runtime 系统可以正好在这一时刻阻塞或者解除阻塞某个线程,并且忙于处理调度队列。 此时并不适合于时钟中断处理程序开始检查该队列是否应该进行线程切换,因为它们可能处 于不一致的状态。解决方法可以是:当进入 runtime 系统后 ,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号