虚拟化和云

虚拟化的主要思想是虚拟化监控程序(virtual Machine Monitor,VMM)在同一物理硬件上创建出有多台虚拟机器的假象,VMM又称作虚拟机管理程序(hypervisor);

这种方法的好处是一台虚拟机的故障不会影响其他虚拟机,在应该虚拟化系统中,不同的服务器可以运行在不同的虚拟机上,从而以更低的开销和更好的可维护性保留计算机系统具有的局部故障模型,而且,可以在同一硬件上运行多个不同的操作系统,并且享受虚拟机隔离带来的安全性和其他好处;

在虚拟机下的好处:物理机数量的减少节省了硬件和电力开销以及机架空间的占用,设置检查点和虚拟机迁移,比在普通操作系统上运行的迁移给更加容易的多;

虚拟机技术目前更时髦的是云,云的核心思想:将你的计算或存储需求外包给一个管理良好的数据中心,领域专家组成的公司专门运营这个数据中心,由于数据中心通常是他人所有,因此你需要为使用的资源付费,但你不需要考虑机器,供电,冷却和维护等问题;

历史

虚拟化的必要条件

虚拟机来讲,重要的一点是要像真实的机器那样运转,虚拟机管理程序需要在三个维度有良好的表现:

  1. 安全性:虚拟机管理程序应完全掌控虚拟资源
  2. 保真性:程序在虚拟机上执行的行为应在裸机上相同
  3. 高效性:虚拟机中运行的大部分代码应不受虚拟机管理程序的干涉

解释器中逐条考虑指令并准确执行其行为是一种安全执行指令的方式。有些指令可以直接执行,例如解释器可以按原样执行INC(增量)指令。其他不能安全地直接执行的指令需要由解释器进行模拟。例如,不能真正允许客户操作系统禁用整台机器的中断,或者修改页表映射。模拟的技巧是使虚拟机管理程序上运行的操作系统认为自己已经禁用了中断或修改了页表映射。目前,可以认为解释器能够保证安全性,如果精心实现甚至能做到高保真,但是解释器的性能堪忧。为了满足性能要求,我们将看到虚拟机管理程序试图直接执行大多数代码。

虚拟化结构要保证保真性的前提下,每个包含内核态和用户态的CPU都有一个特殊的指令,Popek和Goldberg称为敏感指令,还有另一个指令集,其中指令在用户态执行时导致陷入,称为特权指令;指出机器可虚拟化的一个必要条件是敏感指令为特权指令的子集;简单来说就是如果用户态想要做不应该在用户态做的事情,硬件必须陷入

执行特权IO指令,或者修改CPU的特权控制寄存器,这些指令的结构必须要限制在虚拟机内部,不能影响其他虚拟机或者虚拟机管理程序自身,因此,一条不安全的IO指令会被替换成一个陷入操作,经过安全性检查后,执行等价的指令并返回结果,由于进行了改写操作,因此可以替换调不属于特权操作的敏感指令,其他的指令可直接执行,这项技术被称为二进制翻译(binary translation);

另一种不同的虚拟化是半虚拟化:半虚拟化提供一层类似物理机器的软件接口,显式暴露出自身是一个虚拟化的环境,提供一组虚拟化调用;允许客户机向虚拟机管理程序发出显式的请求;

第一类和第二类虚拟机管理程序

第一类虚拟机管理程序:第一类虚拟机管理程序就像一个操作程序,因为它是唯一一个运行在最高特权级的程序。它的工作是支持真实硬件的多个虚拟机拷贝,类似于普通操作系统支持的进程;

第二类虚拟机管理程序:它是依赖windows或linux等操作系统分配和调度资源的程序,像一个普通的进程,第二类虚拟机管理程序仍伪装成具有cpu和各种设备的完整计算机;

两类虚拟机管理程序都必须以一组安全的方式执行机器指令;

运行在两类虚拟机管理程序上的操作系统都称为客户操作系统(guest operating system),对于第二类虚拟机管理程序,运行在底层硬件上的操作系统称作为宿主操作系统(host operating system);

高效虚拟化技术

虚拟机上的操作系统认为自己运行在内核态(实际上不是(~ ̄▽ ̄)~),我们称为虚拟内核态(virtual kernel mode),虚拟中也运行用户进程,这些进行也认为自己运行在用户态(实际上确实是的>﹏<);

在不支持虚拟化的平台上实现虚拟化

利用二进制翻译和x86平台确实存在的硬件特性(如处理器的特却级)构建出虚拟机系统

X86支持四个特权级:用户程序运作第三级,权限最少;0级权限最高

虚拟机管理程序确保敏感指令的不再执行,每个敏感指令进行改写,一次一个基本块(basic block)的改写,基本块是以转移指令结尾的一小段顺序指令序列,逐步进行更改,一个基本块执行完毕后,控制流返回虚拟机管理程序,以定位下一个基本块,如果下一个基本块已经翻译过,就能立刻执行,否则下一个继续翻译,缓存。执行;程序以满速运行;

虚拟化的开销

虚拟化的翻译程序可能会产生大量的陷入;使用二进制翻译后,代码既有可能变快,也有可能变慢;

虚拟机管理程序是正确的微内核吗

半虚拟化采用了不同的方法,要求修改客户操作系统的源代码,半虚拟化的客户机执行虚拟化调用而不是敏感指令,客户操作系统像是一个用户程序,像操作系统虚拟机管理程序发起系统调用,为此,虚拟机管理系统必须定义一套调用接口,以供客户操作系统使用,这套调用接口实际上构成了应用编程接口

内存虚拟化

虚拟地址空间的页面映射到物理内存的页面,这个映射由(多级)页表定义,操作系统设置CPU的一个指向顶级页表的控制寄存器来改变映射,虚拟化增加了内存管理的复杂度;

对每台虚拟机,虚拟机管理程序都需要创建一个影子页表(shadow page table),将虚拟机使用的虚拟页映射到它分配给虚拟机的实际物理页上,糟糕的是:每次客户操作系统修改页表,虚拟机管理程序都需要修改影子页表;

两种办法解决

  1. 让虚拟机管理程序跟踪客户机虚拟内存中保存顶级页表的页面,当客户机首次尝试载入指向顶级页表的硬件寄存器时,需要敏感指令,虚拟机管理程序能够获得顶级页表所在页面信息。虚拟机管理程序在此时创建影子页表,将顶级页表及其下级页表设为只读;如果在试图修改会导致缺页异常;将控制给虚拟机管理程序;原则上可行
  2. 虚拟机管理程序允许客户机向页表添加任何新映射,而影子页表不做任何改动

这两种办法都会造成大量的缺页异常;这样又会造成大量的开销来解决缺页异常,缺页异常又会导致虚拟机退出(VM exit);

  1. 嵌套页表的硬件支持:避免影子页表的巨大开销,芯片添加了嵌套页表(nested page table)的硬件支持;嵌套页表是AMD,intel是EPT 扩展页表,但是目的相似,都是未来无需陷入的情况下由硬件处理虚拟化应付的额外页操作,降低开销;
  2. 回收内存:运行在相同物理硬件上的所有虚拟机都有自己的物理内存页,认为自己支配着整个机器,这种设计内存需要回收就会发生问题,特别是内存过量使用(overcommitment)功能结合时,内存过量使用是指虚拟机管理程序向所有虚拟机提供物理内存总量会超过系统中实际的物理内存的大小,虚拟机管理程序可以同时创建更多配置更高的虚拟机

I/O虚拟化

I/O虚拟化:客户操作系统启动时通常会检测连接了那些IO设备,这些探测陷入虚拟机管理程序,应该怎么处理?

每个客户端操作系统都认为自己拥有整个磁盘分区,而虚拟机的数量可能比磁盘分区多的多,解决方案是让虚拟机管理程序在实际磁盘创建一个文件或一块区域作为虚拟机的磁盘,由于客户端操作系统试图按实际硬件中的磁盘进行控制,因此虚拟机管理程序能理解其控制方式,将访问的块编号转换用于存储的文件或区域的偏移量,并进行I/O;

  1. IO MMU :IO模拟中另一个需要考虑的DMA使用绝对内存地址的问题
  2. 设备域:IO指定一个虚拟机运行普通操作系统,将其他虚拟机的所有IO调用映射过滤,在半虚拟化中这种方法由更大的优势;
  3. 单根I/O虚拟化:运行驱动程序与设备绕过虚拟机管理程序进行通信,支持设备能为每个使用该设备的虚拟机提供独立的地址空间,中断和DMA流,此设备看起来像多个独立的设备,分别分配到不同的虚拟机;

虚拟装置

如何安装新的应用程序??

开发人员构造虚拟机,装上需要操作系统,编译器,运行库和应用程序代码,固定整个虚拟机使之运行,客户得到是能实际运行的完整包,它们使用的操作系统和安装的其他包无关,这种‘盒装’虚拟机被称为虚拟装置

多核CPU上的虚拟机

虚拟机与多核CPU的结合创造了一个可用CPU数量由软件设置的新世界,如有4个CPU核心,每个核心最多可运行8个虚拟机;虚拟机之间共享内存;虚拟机内存共享只需将物理页映射到多个虚拟机地址空间中;这个就是去重,去重避免了重复保存相同的数据;

授权问题

有些软件按CPU授权;

云的五大特征:

  1. 按需自助服务:无需人为操作能自动为用户提供资源
  2. 普适的网络服务:所有资源都可通过网络用标准化的机制访问,以支持各种异构设备
  3. 资源池:云提供商拥有的资源可服务多个用户并动态再分配,用户通常不知道它们使用的资源具体位置
  4. 快速可伸缩:能根据用户需求弹性甚至自动获取和释放资源
  5. 服务可计量:云提供商按服务类型计量用户使用的资源

云即服务

同一个云中可能运行着不同的操作系统(这些操作系统很可能运行再同一个物理机上),这种云被称作基础设施即服务平台即服务

虚拟机迁移

云提供商想要更换硬盘应该如何解决?

现代虚拟化解决方案提供了热迁移,虚拟机迁移时仍能运行;内存预复制迁移,能在虚拟机提供服务的同时复制内存页,大多数内存页的写并不繁琐,直接复制,应用程序不会受到影响,就称作无缝热迁移;

检查点

可以暂停一个虚拟机,如果暂停的虚拟机的状态保存在磁盘上,就成为了运行中虚拟机的快照,当软件导致运行中的虚拟机崩溃时,就可以回滚到快照保存的状态,若无其事的继续运行;


版权声明:本文为qq_29498749原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_29498749/article/details/109603113