什么是虚拟机(virtual machine)

虚拟机(virtual machine )是一种说明计算机硬件和软件关系的有效方法

在安德鲁 · 塔嫩鲍姆(Andrew Tanenbaum)的书《结构化计算机组织》(Structured Computer Organization)中可以找到对这个模型广为人知的解释。要说明这个概念,先从计算机的最基本功能开始,即执行程序。

计算机通常可以执行用其原生机器语言编写的程序。这种语言中的每一条指令都简单到可以用相对少量的电子电路来执行。为了简便,称这种语言为 L0

由于 L0 极其详细,并且只由数字组成,因此,程序员用其编写程序就非常困难。如果能够构造一种较易使用的新语言 L1,那么就可以用 L1 编写程序。有两种实现方法:

  • 解释(Interpretation):运行 L1 程序时,它的每一条指令都由一个用 L0 语言编写的程序进行译码和执行。L1 程序可以立即开始运行,但是在执行之前,必须对每条指令进行译码。
  • 翻译(Translation):由一个专门设计的 L0 程序将整个 L1 程序转换为 L0 程序。然后,得到的 L0 程序就可以直接在计算机硬件上执行。

虚拟机

与只使用语言描述相比,把每一层都想象成有一台假设的计算机或者虚拟机会更容易一些。通俗地说,虚拟机可以定义为一个软件程序,用来模拟一些其他的物理或虚拟计算机的功能。

虚拟机,将其称为 VM1,可以执行 L1 语言编写的指令。虚拟机 VM0 可以执行 L0 语言编写的指令:
 

什么是虚拟机(virtual machine)


每一个虚拟机既可以用硬件构成也可以用软件构成。程序员可以为虚拟机 VM1 编写程序,如果能把 VM1 当作真实计算机予以实现,那么,程序就能直接在这个硬件上执行。否则,用 VM1 写出的程序就被翻译 / 解释为 VM0 程序,并在机器 VM0 上执行。

机器 VM1 与 VM0 之间的差异不能太大,否则,翻译或解释花费的时间就会非常多。如果 VM1 语言对程序员来说还不够友好到足以用于应用程序的开发呢?

可以为此设计另一个更加易于理解的虚拟机 VM2。这个过程能够不断重复,直到虚拟机 VMn 足够支持功能强大、使用方便的语言。

Java 编程语言就是以虚拟机概念为基础的。Java 编译器把用 Java 语言编写的程序翻译为 Java 字节码(Java byte code)

后者是一种低级语言,能够在运行时由 Java 虚拟机(JVM)程序快速执行。JVM 已经在许多不同的计算机系统上实现了,这使得 Java 程序相对而言独立于系统。

特定的机器

与实际机器和语言相对,用 Level 2 表示 VM2,Level 1 表示 VM1,如下图所示。计算机数字逻辑硬件表示为 Level 1 机器。其上是 Level 2,称为指令集架构(ISA, Instruction Set Architecture) 。通常,这是用户可以编程的第一个层次,尽管这种程序包含的是被称为机器语言的二进制数值。
 

什么是虚拟机(virtual machine)


指令集架构(Level 2)计算机芯片制造商在处理器内部设计一个指令集来实现基本操作,如传送、加法或乘法。这个指令集也被称为机器语言。每一个机器语言指令或者直接在机器硬件上执行,或者由嵌入到微处理器芯片的程序来执行,该程序被称为微程序。

汇编语言(Level 3)在 ISA 层,编程语言提供了一个翻译层,来实践大规模软件开发。汇编语言出现在 Level 3,使用短助记符,如 ADD、SUB 和 MOV,易于转换到 ISA 层。汇编语言程序在执行之前要全部翻译(汇编)为机器语言。

高级语言(Level 4)Level 4 是高级编程语言,如 C、C++ 和 Java。这些语言程序所包含的语句功能强大,并翻译为多条汇编语言指令。比如,查看 C++ 编译器生成的列表文件输出,就可以看到这样的翻译。汇编语言代码由编译器自动汇编为机器语言。

虚拟机是以什么形式存在的


  vm的具体存在形式是一个文件夹。文件夹中包含虚拟机必要的文件,也正是这些文件组成了虚拟机。 
  一句话解释:虚拟机是运行在物理平台基础之上的由一堆文件构成的文件夹。

什么是虚拟机(virtual machine)

  这样我们的创建的虚拟机,都以文件的形式存放在我们的存储当中。

什么是虚拟机(virtual machine)

  接下来看看我们的vm中的文件构成: 

什么是虚拟机(virtual machine)
  下面来介绍几个主要的文件: 
1、configuration file: 
  这是一个以vm_name.vmx命名vmx格式的文件与虚拟机所以相关的东西都写在这个文件中,这是虚拟机的核心配置文件,如果它丢失了,那么我们的虚拟机也就报废了。 
2、swap file : 
  这是一个以vm_name.vswp命名vmx-vm_name.vswp命名vswp格式的两个文件。这是一个交换文件。 
  Vm_name.vswp 文件作为虚拟机虚拟内存的补充文件,当虚拟机内存不够的时候,会以这个文件当做内存来使用。 
  Vmx_vm_name.vswp文件时esxi运行虚拟机产生的内存开销文件。它是exsi运行vm时当内存不够时产生的物理补充文件。类似一个QQ程序,他会在运行的不同时刻消耗不同的开销,当物理开销不足时,就会用这个文件来补充。 
  Ps:这两个文件是随着虚拟机开机而存在,关机而消失的。第一个文件在正常情况下士与我们的虚拟机的匹配内存的大小几乎一致的,第二个文件时浮动变化大小的。 
3、bios file : 
  这是一个以vm_name.nvram命名nvram格式的文件。BIOS 文件相信大家都已经熟悉的不能再熟悉了。 
4、log file 
  这是一个以Vmware.log命名log格式的文件主要记录vm的开机关机日志,和一下基本操作日志等。 
5、template file 
  这是一个以vm_name.vmtx命名vmtx格式的文件被称为模板文件,我们可以使用母版文件来快速创建大量虚拟机,其配置与这个虚拟机相同。但是他与configuration file“不共存”。 
  他俩的关系是这样的:通过模板文件来创建虚拟机时,vm_name.vmx文件时通过vm_name.vmtx文件改名而来的。在一个文件夹中不可能同时存在vm_name.vmx文件和vm_name.vmtx文件。如果一个文件夹中包含vm_name.vmtx文件,就说明这是一个模板。 
6、raw device map file 
  这是一个以vm_name-rdm.vmdk命名vmdk格式的文件,是以裸设备映射挂在到虚拟机上的磁盘。

  经过上面的大致的讲解我们不难看出,vm和传统物理机的区别,下面我们来大致的说一下:

vm和我们传统物理机的对比


1. 在传统的物理机中: 
  a. 传统的物理机架构中:操作系统独占我们的硬件资源,比如网卡,硬盘,内存。 
  b. 操作系统上面的程序也是独占我们的硬件资源。

什么是虚拟机(virtual machine)

2. 在虚拟机中 
  a. esxi独占我们的物理资源,包括cup,内存,网卡等。 
  b. 而我们的虚拟机通过vsphere共享我们底层的物理资源,包括cup等。 

什么是虚拟机(virtual machine)
vm和传统物理机的最大的区别:


  1、vm不是直接运行在物理层上面。 
  2、vm是现在物理机上插入一个VMware层,插入VMware后,然后分割物理资源,转换为虚拟机资源,
比如虚拟内存,虚拟硬盘等等。分割资源以后安装系统,安装系统之后在安装相关的应用。

什么是虚拟机(virtual machine)

  通过对比,我们不难发现vm的优点:

使用虚拟机的优点:

1. 使用物理机: 
 a. 设备移动 
  i. 停机:如果我们一台运行的物理需要移动位置,我们必然需要关机,那么此时我们就将面临着业务中断等问题。 
  ii. 受限于我们设备本身的一些问题:如果一台设备运行很久了,可能一关机就无法再次开启机器。相信做过运维的小伙伴都遇到过。 
 b. 难管理 
  i. 设备管理需要停机:如升级硬件资源。 
  ii. 设备故障:设备故障,需要停机维护,时间花费太长,同时带来业务中断。 
 c. 硬件限制 
  i. 设备之间是相互隔离的。 
  ii. 硬件更好时需要考虑应用程序与硬件的兼容性。
2. 使用虚拟机: 
 a. 移动方便
  i. 虚拟机被封装成文件,便于移动。 
  ii. 虚拟机建立在vsphere层之上的,因此vm是独立于物理硬件之外的。为此我们无论吧虚拟机移动到什么地方,只要有vsphere层即可运行。 
 b. 简单管理 
  i. 虚拟机之间是相互逻辑隔离的,方便管理。 
  ii. 不受限于硬件变更的影响,因为我们vm使用的cup,内存,都是vsphere层虚拟机出来的标准格式,不需要考虑兼容性问题。 
 c. 兼容比较古老的程序 
 d.服务器的整合比很高