《现代操作系统》第七章习题答案

  1. 有许多原因促使进行服务器整合,其中包括节省硬件投资成本、机架空间和电力,同时使管理成千上万台服务器变得更加容易。

  2. 如果硬件配置得到升级,虚拟化可以隐藏这一点,并允许旧软件继续运行。

  3. 有许多原因使得在单个桌面机器上使用多种平台进行软件开发测试更有价值,如 Windows 7、Windows 8、Linux、FreeBSD、OS X 等。此外,虚拟机在遇到软件错误导致崩溃时,重新启动速度更快,这有助于提高开发效率。

  4. 在升级到新的计算机和操作系统后,个人可能希望运行一些在旧计算机上有的软件。虚拟化使得在同一台计算机上运行旧系统和新系统成为可能,从而保存旧软件。

  5. 很少有程序员能够访问 IBM 大型机,因为从 20 世纪 80 年代开始,Intel x86 系列主导了计算机领域,这种架构不支持虚拟化。虽然二进制翻译可以解决这个问题,但直到 20 世纪 90 年代后期才提出这个想法。

  6. 任何改变页表或内存映射的指令肯定是敏感的,还有涉及输入 / 输出的任何指令。任何能够读取计算机真实状态的指令也是敏感的。

  7. 有很多,包括移动、算术指令、跳转和调用指令、位移等。

  8. 完全虚拟化意味着模拟硬件,使虚拟机上的操作系统行为与裸机相同。半虚拟化则需要更改操作系统,避免难以虚拟化的操作。在缺乏硬件支持的情况下,复杂架构如x86的完全虚拟化较难,而RISC机器则相对容易。如果有硬件支持,完全虚拟化不那么困难,而半虚拟化操作系统可能需要更多工作。对于多个操作系统,半虚拟化可能需要更多努力。

  9. 是的,当然。Linux 已经进行了半虚拟化,正是因为其源代码是开放的。Windows 已经被微软进行了半虚拟化处理(因为微软拥有源代码),但尚未发布任何半虚拟化版本。

  10. 虚拟机与磁盘分区没有直接关系。虚拟机监视器可以将磁盘分区划分为子分区,并将每个虚拟机赋予其中一部分。原则上,可以有成百上千个子分区。它可以静态地将磁盘划分为 n 个部分,也可以按需划分。在托管的虚拟机中,常常使用主机上的文件来存储虚拟机的磁盘镜像。

  11. 在运行时,通过使用虚拟化层在应用程序和操作系统之间,实现应用程序或进程的虚拟化。这个层根据需要修改应用程序的指令,而应用程序对底层层的存在是透明的。Windows 仿真器(WINE)是例子之一,它可以在其他操作系统上执行 Microsoft Windows 的二进制可执行文件,通过实时映射 Windows API 调用到 POSIX 调用实现。

  12. 类型 1 的虚拟机监视器需要改变计算机的引导过程,先加载虚拟机监视器,然后创建虚拟机并安装操作系统,这通常对普通用户来说过于复杂。类型 2 的虚拟机监视器的设计目标是简化安装过程,使其与安装应用程序一样简单。此外,由于使用主机操作系统服务本地外设,虚拟机监视器不需要为所有外设提供驱动程序,而是使用主机操作系统中的驱动程序。

  13. 是的。当客户操作系统进行 I/O 操作时,虚拟化硬件会捕获它,并将控制权传递给类型 2 虚拟机监视器,然后虚拟机监视器决定如何处理。通常,这会涉及向主机操作系统发出 I/O 请求,但虚拟机监视器无需担心捕获 I/O 指令,确实简化了处理过程。

  14. 在虚拟化硬件不存在的早期,这项技术得以发明。它是必要的,以防止在用户模式下运行的客户操作系统执行未受特权保护的敏感指令。随着硬件的进步,现代硬件在用户模式程序执行敏感指令时会出现陷阱。然而,在某些情况下,二进制翻译比陷阱更快。然而,随着硬件的改进,对二进制翻译的需求将减少。

  15. 通常,ring 0(具有最高特权级别)用于在内核模式下运行;ring 3 用于用户模式。有些虚拟机监视器使用 ring 0 来在内核模式下运行虚拟机监视器;客户操作系统在 ring 1 上运行。当客户操作系统调用特权指令时,它可能会陷入虚拟机监视器,虚拟机监视器在验证访问权限、权限等后执行这些指令。还有其他的方式也是可能的。

  16. 已经证明了基于 VT-enabled CPU 的方法导致了很多陷阱,这是由于陷阱-模拟方法的使用。由于陷阱处理开销大,存在一些情况下,基于翻译的方法优于基于硬件的方法。

  17. 当客户操作系统发出“清除中断”指令(例如 CLI)时,在一些 CPU(如具有深度流水线的 CPU)中以硬件方式执行可能非常耗时。另一方面,在虚拟化系统中,虚拟机监视器不需要实际在硬件上禁用中断,只需使用一个变量来表示指定的客户操作系统的“中断标志”被设置为零,从而使执行 CLI 指令更快。

  18. 它可以预先翻译整个程序。不这样做的原因是许多程序有大段的代码从不被执行。通过按需翻译基本块,没有未使用的代码被翻译。按需翻译的一个潜在劣势是可能稍微不那么高效地启动和停止翻译器,但这种影响可能很小。此外,由于 x86 上的间接分支(目标在运行时计算的分支)和可变大小指令,对 x86 代码进行静态分析和翻译很复杂。因此,您可能不确定要翻译哪些指令。最后,还有自修改代码的问题。

  19. 纯虚拟机监视器只是模拟真实硬件,没有其他功能。纯微内核是一个小型操作系统,为使用它的程序提供基本服务。在纯虚拟机监视器上运行的虚拟机运行传统操作系统,如 Windows 和 Linux。在微内核的顶层通常是实现操作系统服务的进程,但以分散方式实现。

  20. 如果多个客户操作系统都将它们认为是物理页 k 分配给他们的某个进程,就会出现问题。需要一种方法来执行第二次页面映射,因为虽然客户可能会认为自己控制物理页面,但实际上并不是如此。这就是为什么需要嵌套页表。

  21. 机器不仅需要内存来容纳正常(客户)操作系统和所有应用程序,还需要内存来容纳虚拟机监视器的功能和执行客户操作系统敏感指令所需的数据结构。类型 2 虚拟机监视器还具有主机操作系统的额外成本。此外,每个虚拟机将拥有自己的操作系统,因此在内存中将存储 N 个操作系统副本。减少内存使用的一种方法是识别“共享代码”,并仅在内存中保留一份该代码的副本。例如,一个 Web 托管公司可以运行多个虚拟机,每个虚拟机都运行相同版本的 Linux 和 Apache web 服务器代码。在这种情况下,代码段可以在虚拟机之间共享,尽管数据区域必须是私有的。

  22. 每个客户操作系统将维护一个页表,将其虚拟页号映射到(在其所共享的虚拟内存中的)物理帧号。为了防止不同的客户操作系统错误地引用相同的物理页号,虚拟机监视器创建了一个影子页表,将虚拟机的虚拟页号映射到虚拟机监视器提供的物理帧号。

  23. 页表只能由客户操作系统修改,而不能由客户中的应用程序修改。当客户操作系统完成修改表后,必须通过发出 RETURN FROM TRAP 等敏感指令切换回用户模式。这个指令将产生一个陷阱,并给予虚拟机监视器控制权。然后,虚拟机监视器可以检查客户操作系统的页表是否已被修改。虽然这种方法可能奏效,但必须在每个由客户应用程序执行的系统中检查所有的页表,也就是每次客户操作系统返回到用户模式时都要进行检查。每秒可能会发生数千次这样的转换,因此不太可能像使用只读页面的页表那样高效。

  24. 当虚拟机监视器(hypervisor)的页面用尽时,它无法确定客户操作系统真正重视哪些页面。解决办法是在客户操作系统中包含 " 气球驱动 "(balloon drivers)。然后,虚拟机监视器向气球驱动发出信号,扩展其内存使用量,迫使客户操作系统决定哪些页面被淘汰。这确实是作弊,因为虚拟机监视器不应与客户操作系统的特定部分进行交互。它实际上不应该知道虚拟机中的情况。但这种技术以一种简单的方式解决了一个问题,因此所有人都假装不知道其中有什么问题。

  25. 如果虚拟机监视器不知道运行在其虚拟机上的客户操作系统的任何信息,则气球驱动无法正常工作。如果无法在客户操作系统中包含气球驱动,例如,如果它们不支持可加载驱动程序并且源代码不可用,因此无法重新编译以包含气球驱动,则气球驱动也无法正常工作。

  26. 考虑一个情况,同一个客户操作系统的多个虚拟机副本存在于系统中。在这种情况下,没有必要在内存中维护只读部分(如代码段)的多个副本。只需要维护一个副本,从而减少内存需求并允许在系统上运行更多的虚拟机。这种技术被称为去重。VMware 将其称为“透明页共享”。

  27. 是的。早期的直接内存访问(DMA)硬件使用绝对内存地址。如果一个客户操作系统开始对其认为是物理地址 k 的 DMA 操作,它很可能不会传输到应该传输的缓冲区,可能会覆盖一些重要内容。早期的虚拟机监视器必须重写使用 DMA 的代码以使用不会引起问题的地址。

  28. 使用云服务意味着您无需设置和维护计算基础架构。您还可以外包备份的任务。此外,如果您的计算需求快速变化,您可以轻松添加或删除计算机。但是,云服务提供商可能轻易窃取您的机密数据,并且承诺的可扩展性可能只是一种幻觉,如果您需要额外的容量,而沃尔玛或其他一些大客户恰好决定使用 10,000 台机器。此外,您与云之间的带宽可能是一个问题。其带宽很可能远远低于本地带宽,因此如果需要在您和云之间传输大量数据,这可能会成为一个问题。此外,如果您正在进行实时工作,您与云之间的带宽可能会随时产生大幅波动,引发问题。

  29. 显然存在许多提供不同服务的提供商,但提供虚拟的 x86 机器的提供商将提供基础设施即服务 (IAAS)。提供 Windows 8 或 Linux 机器的提供商将提供平台即服务 (PAAS)。提供在云中运行的字处理程序(例如 Microsoft Word)的提供商将提供软件即服务 (SaaS)。

  30. 假设在一台服务器上启动了许多虚拟机。最初,它们都完成相同数量的工作并且需要相同的资源,情况很好。突然之间,其中一个虚拟机开始使用大量资源(CPU、内存等),干扰了其他所有虚拟机。这可能是将其迁移到专用服务器的好时机。

  31. 物理 I/O 设备仍然存在问题,因为它们无法随虚拟机迁移,但它们的寄存器可能保存着对系统正常运行至关重要的状态。想象一下对已发出但尚未完成的设备(例如磁盘)的读取或写入操作。网络 I/O 尤其困难,因为其他机器将继续向虚拟机发送数据包,而不知道虚拟机已经移动。即使数据包可以重定向到新的虚拟机管理程序,虚拟机在迁移期间将无响应,这可能需要很长时间,因为整个虚拟机,包括它上面运行的客户操作系统和所有进程,必须迁移到新的机器。结果,如果设备 / 虚拟机管理程序缓冲区溢出,数据包可能会遇到很大的延迟甚至丢包。

  32. 为了迁移特定的进程,必须存储并传递进程状态信息,包括打开的文件、警报、信号处理器等。在状态捕获任务期间可能会出现错误,导致可能不正确、不完整或不一致的状态信息。在虚拟机迁移的情况下,整个内存和磁盘映像被移动到新系统,这更容易实现。

  33. 标准迁移需要停止虚拟机并保存内存映像为文件,然后传输文件到目标位置,再重新启动虚拟机。这会导致应用程序短暂停机。而动态迁移则是在虚拟机运行时移动页面,并在所有页面到达目标位置后检查是否有变化,如有变化则再次复制,直到所有页面都是最新的。因此,应用程序可以在没有停机时间的情况下完成迁移。

  34. 三个主要要求是:兼容性(能够以虚拟机的形式运行现有的客户操作系统,无需任何修改);性能(在虚拟机执行期间的开销最小;否则,用户不会选择在虚拟机中运行他们的应用程序)和隔离性(保护硬件资源免受恶意或未经授权的访问)。

  35. VMware 不可能为数以千计的不同 I/O 设备拥有驱动程序。通过使 VMware Workstation 成为类型 2 虚拟机管理程序,它可以间接使用已在主机操作系统中安装的驱动程序来解决这个问题。

  36. VMware ESXi 被设计为小型,可以放入服务器的固件中。服务器启动时,BIOS 将 ESXi 复制到 RAM 并开始创建虚拟机,简化了启动和部署过程。

  37. 可以在 http://virtualboximages.com 上找到几个示例。这些示例包括各种预安装的开源操作系统分发版。例如,不必获取新 Linux 版本的 ISO 文件,经历安装过程,然后启动虚拟机,而是更容易地下载预安装的 VDI。还有类似的用于 VMWare 的虚拟机。其他示例可以在 http://www.turnkeylinux.org 上找到。

你可能感兴趣的:(《现代操作系统》习题答案,学习,笔记,linux,unix,c语言)