预计阅读本页时间:-
8.3.6 I/O设备的虚拟化
了解了处理器和内存的虚拟化,下面我们来研究一下I/O的虚拟化。客户操作系统在启动的时候会探测硬件以找出当前系统中都连接了哪种类型的I/O设备。这些探测会陷入到管理程序。那么管理程序会怎么做呢?一种方法是向客户操作系统报告设备信息,如磁盘、打印机等真实存在的硬件。于是客户操作系统加载相应的设备驱动程序以使用这些设备。当设备驱动程序试图进行I/O操作时,它们会读写设备的硬件寄存器。这些指令是敏感指令,将会陷入到管理程序,管理程序根据需要从硬件中读取或向硬件中写入所需的数据。
但是,现在我们有一个问题。每一个客户操作系统都认为它拥有全部的磁盘分区,而同时实际上虚拟机的数量比磁盘分区数多得多(甚至可能是几百个)。常用的解决方法是管理程序在物理磁盘上为每一个虚拟机创建一个文件或区域作为它的物理磁盘。由于客户操作系统试图控制真正的物理磁盘(如管理程序所见),它会把需要访问的磁盘块数转换成相对于文件或区域的偏移量,从而完成I/O操作。
客户操作系统正在使用的磁盘也许跟真实的磁盘不同。例如,如果真实的磁盘是带有新接口的某些新品牌、高性能的磁盘(或RAID),管理程序会告知客户操作系统它拥有的是一个旧的IDE磁盘,让客户操作系统安装IDE磁盘驱动。当驱动程序发出一个IDE磁盘命令时,管理程序将它们转换成新磁盘驱动的命令。当硬件升级、软件不做改动时,可以使用这种技术。事实上,虚拟机对硬件设备重映射的能力证实VM/370流行的原因:公司想要买更新更快的硬件,但是不想更改它们的软件。虚拟技术使这种想法成为可能。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
另一个必须解决的I/O问题是DMA技术的应用。DMA技术使用的是绝对物理内存地址。我们希望,管理程序在DMA操作开始之前介入,并完成地址的转换。不过,带有I/O MMU的硬件出现了,它按照MMU虚拟内存的方式对I/O进行虚拟化。这个硬件解决了DMA引起的问题。
另一种处理I/O操作的方法是让其中一个虚拟机运行标准的操作系统,并把其他虚拟机的I/O请求全部反射给它去处理。当准虚拟化技术得到运用之后,这种方法被完善了,发送到管理程序的命令只需表明客户操作系统需要什么(如从磁盘1中读取第1403块),而不必发送一系列写磁盘寄存器的命令,在这种情况下,管理程序扮演了福尔摩斯的角色,指出客户操作系统想要做什么事情。Xen使用这种方法处理I/O操作,其中完成I/O操作的虚拟机称为domain0。
在I/O设备虚拟化方面,II型管理程序相对于I型管理程序所具备的优势在于:宿主操作系统包含了所有连接到计算机上的所有怪异的I/O设备的驱动程序。当应用程序试图访问一个不常见的I/O设备时,翻译的代码可以调用已存在的驱动程序来完成相应的工作。但是对I型管理程序来说,它或者自身包含相应的驱动程序,或者调用domain0中的驱动程序,后一种情况与宿主操作系统很相似。随着虚拟技术的成熟,将来的硬件也许会让应用程序以一种安全的方式直接访问硬件,这意味着驱动程序可以直接链接到应用程序代码或者作为独立的用户空间服务,从而解决I/O虚拟化方面的问题。