首页 > 技术文章 > 什么是虚拟化?

sometingintheway 2018-07-09 01:11 原文

   虚拟化技术是为了进行云计算相关得学习。虚拟化技术是云计算的基石,那到底什么是虚拟化呢?

虚拟化

    虚拟化是资源的逻辑表示,它不受物理限制的约束。

    虚拟化就是由位于下层的软件模块,根据上一层软件模块的期待,抽象出一个虚拟的软件或者硬件接口,使上一层软件可以直接运行在与自己所期待的运行环境完全一致的虚拟环境上。

  虚拟化可以发生在各个层次上,如图。

       

  其中,硬件抽象层(Hardware Abstraction Layer,HAL)是计算机中软件所能控制的硬件的抽象接口,通常包括CPU各种寄存器、内存管理模块。操作系统通过调用HAL来操作硬件。

  API抽象层抽象的是一个进程所能控制的系统功能的集合,包括创建新进程、内存申请、文件系统和网络操作等等。

 

应用在不同层级间的虚拟化

  硬件抽象层上的虚拟化

  硬件抽象层上的虚拟化是指通过虚拟硬件抽象层来实现虚拟机,为客户机{Guest Machine(被虚拟出来的资源被称为客户Guest,相对于Guest的被虚拟的物理机被称为Host)}操作系统呈现和物理硬件相同或相近的HAL。

  通常情况下,由于客户机和宿主机的ISA(Instruction Set Architecture,指令集架构)是相同的,guest大部分指令可以在host处理器上直接运行。不能直接运行的指令通过虚拟化软件进行处理,当guest对硬件抽象层访问时,虚拟化软件需要对此进行截获并模拟(模拟的HAL进行对虚拟化指令的处理)。

  比较知名的硬件抽象层上的虚拟化由VMware的系列产品、Xen等。

 

  操作系统层上的虚拟化

  操作系统层上的虚拟化是之操作系统的内核可以提供多个互相隔离的用户态实例(经常被称为容器)。它是对操作系统内核的虚拟化。每个容器中的操作系统通常必须是同一种操作系统。它们之间互相独立,每个容器之间的功能只有通过分配才能拥有,所以容器中的进程所看到的资源是被分配过的,并不是计算机的所有资源。

 

  库函数层上的虚拟化

  操作系统通常会通过应用级的库函数提供给应用程序一组服务,例如文件操作服务、时间操作服务等。这些库函数可以隐藏操作系统内部的一些细节,是的应用程序编程更为简单。

  但是不同的操作系统有不同的服务接口。库函数层上的虚拟化就是通过虚拟化操作系统的应用级库函数的服务接口,使得应用程序不需要修改,就可以在不同的操作系统中无缝运行,从而提高系统间的互操作性。

  例如WINE系统是在Linux上模拟了Windows的库函数接口,使得一个Windows的应用程序能够在Linux上正常运行。

 

  编程语言层上的虚拟化

  一些编程语言上的虚拟机被称为语言级虚拟机,例如JVM。程序的代码由虚拟机运行时支持系统首先翻译为硬件的机器语言,然后再执行。它作为一个进程运行在物理计算机系统上,所以它属于进程级的虚拟化。

 

系统虚拟化

  系统虚拟化是指将一台物理计算机系统虚拟化为一台或多台虚拟计算机系统。每个虚拟机都拥有自己的虚拟硬件,每个虚拟机都是互相独立的。

  通过虚拟化层的模拟,虚拟机中的操作系统认为自己仍然是独占一个系统在运行。每个虚拟机中的操作系统可以完全不同,并且他们的执行环境是完全独立的。这个虚拟化层被称为虚拟机监控器(Virtual Machine Monitor,VMM)。

  事实上虚拟机上的ISA和物理机上的ISA可以完全不同,不同的指令通过VMM尽行虚拟指令转化成物理机上的指令在进行执行,所以高效的虚拟机,它们的ISA通常都是和物理机上的ISA基本一致,有少数的指令通过VMM处理或模拟,大多数是直接运行在物理机上。

 

 虚拟化实现方式

  当前有两种主流的实现方式:

  TPYE 1:VMM直接运行在硬件平台上,控制所有硬件并管理Guest OS。Guest OS运行在比VMM更高的级别。例如Xen就是这样实现的。

  

 

  TYPE 2:VMM运行在一个传统的操作系统里(第一软件层),可以看作是第二软件层,而客户机操作系统则是第三软件层了,KVM就是这样实现的。

  

 

推荐阅读