虚拟机如何让GuestOS认为自己正运行在一个真实的计算机

我们知道云计算平台上的云主机其实是虚拟机,但是我们感觉不到。它与真正的服务器没有什么不同。这一切都归功于虚拟化技术(Virtualization)。可以说,虚拟化技术是实现云计算基础设施层(IaaS)的核心技术。那么这种虚拟化技术究竟是什么?

云计算中使用的虚拟化技术实际上并不是一项新技术。1998年成立的VMWare公司是做虚拟机软件的,后来被数据存储技术公司EMC(Essential)收购,后来EMC又被戴尔收购。

先不说VMware的历史,重点说说他们的虚拟机软件:VMware Workstation。该软件允许同时创建和运行多个 x86 虚拟机。每个虚拟机实例都可以运行自己的客户操作系统(Guest OS),如Windows、Linux、BSD等。说白了,VMware Workstation允许一台真实的计算机同时运行多个操作系统。

从底层操作系统的角度来看,每个虚拟机都是一个用户进程;从虚拟机中的Guest OS的角度来看,它拥有整台计算机。

虚拟机如何工作

虚拟机软件解决了一个关键的技术问题:如何让Guest OS 认为它是在真实的计算机上运行。

VMware 架构图

管理多个虚拟机的软件称为 VMM(虚拟机监视器)或管理程序。VMM 做了三件事来欺骗客户操作系统:虚拟 CPU、虚拟内存和虚拟 I/O。

图片[1]-虚拟机如何让GuestOS认为自己正运行在一个真实的计算机-老王博客

虚拟CPU:为每个虚拟机的CPU准备一个虚拟寄存器数据结构,跟踪CPU所有寄存器中的值。CPU的整个状态其实就是所有寄存器的值。只要寄存器的值在Guest OS眼中是OK的,Guest OS就可以正常执行。

作为用户进程cpu虚拟化技术名词解释,Guest OS 实际上运行在 CPU 的 ring3 模式(最小特权),但是 VMM 让它认为它运行在 CPU 的 ring0 模式(特权模式)。如果来宾操作系统以 ring3 模式访问寄存器,VMM 将不关心。但是,如果Guest OS试图在ring3模式下访问一些寄存器,VMM直接修改虚拟寄存器的值,让Guest OS认为它真的操作了只能在这些特权模式下访问的寄存器。

虚拟内存:VMM实现了从虚拟内存到虚拟机物理内存再到物理内存的三级地址转换,解决了guest OS访问内存的问题。在Guest OS看来,地址仍然是从虚拟内存映射到物理内存。

Virtual I/O:如果 VMM 发现 Guest OS 想要在 I/O 设备上运行,它会使用软件来模拟这个过程。例如,为了读取和写入磁盘,VMM 将操作更改为读取和写入文件。

通常,来宾操作系统的操作由 VMM 密切监视。在权限允许的范围内cpu虚拟化技术名词解释,Guest OS 可以做任何事情,但是如果超出权限,VMM 会进行干预。

虚拟化技术与云计算

目前常用的虚拟机技术有VMWare、Xen、KVM。虽然虚拟化的思路类似,但具体使用的虚拟化技术还是有区别的。

VMWare 是需要付费的商业软件,不是开源的。Xen 和 KVM 都是开源的。但是Xen操作复杂,维护成本高。官方 Linux 内核已移除对 Xen 的支持。KVM 是 Linux Kernel 的一部分,因此会随着 Linux 内核的升级而不断优化和完善。云计算领域使用最多的虚拟机技术是KVM。

云计算管理软件通过libvirt接口管理虚拟机

目前比较流行的云计算管理软件是Openstack,它支持各种虚拟机技术。libvirt 是一套免费开源的 C 函数库,支持 Linux 下的主流虚拟化工具。libvirt 最初是一个专门针对 Xen 的管理 API,后来扩展为支持多个虚拟机管理程序。云计算管理软件可以通过libvirt接口控制各种虚拟化技术创建的虚拟机。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论