读书笔记-现代操作系统-8多处理机-8.3虚拟化

来源:互联网 发布:淘宝装修全能助手 编辑:程序博客网 时间:2024/05/16 17:21

8.3 虚拟化

虚拟化(virtualization)这种技术允许一台机器中存在多台虚拟机,每一台虚拟机可能运行不同的操作系统。
虚拟化起作用的原因是:
大部分服务器停机的原因不是因为硬件的故障,而是因为臃肿、不可靠、有漏洞的软件,特别是操作系统。使用虚拟化技术,唯一一个运行在内核态的软件是管理程序(hypervisor),它的代码量比一个完整操作系统的代码量少两个数量级,漏洞更少。

优势:
- 减少了物理机器的数量从而节省了硬件、电源的开支以及占用更少的空间。
- 检查点和虚拟机的迁移比在一个普通的操作系统中进行进程迁移更加容易。
- 运行那些不再被支持或不能再当前硬件上工作的操作系统中遗留的程序
- 在软件开发中,一个程序员想要在不同的操作系统上测试软件

8.3.1 虚拟化的条件

管理程序分为两种

I型管理程序(虚拟机监控器)
它实质上就是一种操作系统,因为他是唯一一个运行子内核态的程序。它的工作是支持多个副本,也称作虚拟机(virtual macine),与普通的操作系统所支持的进程类似。

II型管理程序
它只是一个运行在操作系统平台上,能够“解释”机器指令集的用户程序,它也创建了一个虚拟机。

运行在管理系统之上的操作系统统称为客户操作系统(guest operating system)
在II型管理程序的情况下,运行在硬件上的操作系统称为宿主操作系统(host operating system)

敏感指令(sensitive instruction):每个内核态和用户态的处理器有一组只能在内核态执行的指令集合,比如IO指令、改变MMU状态的指令等。
特权指令(privileged instruction):如果在用户态情况下执行会引起陷入。

当且仅当敏感指令是特权指令的子集时,机器才是可虚拟化的。

IMB/370具有这样的特性,但是intel386是不具有这样的特性的,所以虚拟机有两种类型。
后来intel引入了VT技术(Virtualization Technology)。AMD引入SVM(Secure Virtual Machine)。
VT等技术的基本思想是:创建容器使得虚拟机可以在其内运行,当一个客户操作系统在一容器内启动,它将继续运行直到它引起了异常而陷入到管理程序。

8.3.2 I型管理程序

I型管理程序
在支持VT技术的处理器上,当客户操作系统运行一条敏感指令时,发生到内核的陷入。管理程序分析分析指令,如果它是来自虚拟机中的客户操作系统还是来自虚拟机中的用户程序。
如果是操作系统指令,管理程序调度将要执行的指令。
如果是用户程序指令,它仿真面对运行在用户态的敏感指令时真是硬件的行为。如果虚拟机支持VT,则陷入到虚拟机的客户操作系统中,如果不支持指令被忽略。

8.3.3 II型管理程序

它实际上是VT技术出现之前的替代品。典型的应用是VMware。优点是即使在不可虚拟化的硬件上,它也能正常工作。

具体工作原理省略。这里说明一点,II性管理程序未必比I型的慢甚至还要更快。

8.3.4 准虚拟化

另一个流行的处理方法是更改操作系统的源代码,从而略过敏感质量的执行,转而调用管理程序调用。这个过程调用集合实际上形成了API,只是这个API用于操作系统调用。
这样的优势是以内核态运行在硬件上的程序应该短小、可靠,由更少的代码组成。
这里写图片描述
但是准虚拟化也有一些问题:
如果所有指令都被管理指令所代替,操作系统如何在物理机器上运行呢?
市场上有多种管理指令,如果兼容他们

一个解决方案是当内核需要执行一些敏感操作时会转而调用特殊的例程,这些特殊的例程称为(VMI虚拟机接口),形成的底层与硬件或管理程序进行交互。这些例程不依赖于特定硬件和管理程序。
在VMI之下有一些兼容不同管理程序或硬件的函数库从而实现适配。
这里写图片描述

8.3.5 内存的虚拟化

从虚拟地址到物理地址的页面映射。这个映射由(多级)页表所定义。通过操作系统设置处理器中的控制寄存器,使之指向顶级页表,从而动态设置页面映射。
管理程序必须为每一台虚拟机创建一个影子页表(shadow page table),用以实现该虚拟机使用的虚拟页面到管理程序分配给他们的物理页面之间的映射。

问题在于每次操作系统改变页表,管理程序必须相应的改变其影子页表。但是操作系统改变内存就行,由于不需要敏感指令,管理程序根本不用知道这种改变,所以就不会更新它的由实际硬件使用的影子页表。

一种糟糕的方式:管理程序监视客户虚拟内存中保存顶级页表的内存页。每次变动都重新映射。
将来的VT技术:通过硬件实现两级映射从而提供帮助。
准虚拟化:准虚拟化的客户操作系统知道当它结束的时候需要改进进程页表,此时它需要通知管理程序。

8.3.6 IO设备的虚拟化

客户操作系统在启动的时候会探测有哪些设备。

一种方法是想客户操作系统报告设备信息,然后客户操作系统加载响应的设备驱动程序以使用这些设备。当设备驱动器试图进行IO操作时,他们会读写设备的硬件寄存器。这些指令是敏感指令,将会陷入到管理程序,管理程序根据需要读取写入数据。
这样的问题是每个操作系统都认为它拥有全部的磁盘分区,而是灰机上虚拟机比分区多的多,需要管理程序在物理磁盘上为每个虚拟机创建一个文件或区域作为它的物理磁盘,并为其完成偏移量操作。这样也带来一些好处,可以为软件屏蔽硬件升级或更换带来的影响。
另一个问题是DMA,DMA使用物理地址,管理程序在DMA操作开始之前介入,并完成地址转换。不过带有IO的MMU出现后解决了这个问题

另一种操作IO的方法是让其中一个虚拟机运行标准的操作系统,并把其他虚拟机的IO请求全部反射给它去处理。这个虚拟操作系统成为domain0。

对于II型管理程序:宿主操作系统保留所有连接到计算机上的所有怪异的IO驱动程序。
对于I型管理程序:或者自身包含驱动,或者调用domain0中的驱动(类似于宿主操作系统)。

8.3.7 虚拟工具

安装好了的虚拟机通常称为虚拟工具(virtual appliance)

8.3.8 多核处理机上的虚拟机

8.3.9 授权问题

1 0
原创粉丝点击