系统级虚拟机

来源:互联网 发布:点位图软件 all 编辑:程序博客网 时间:2024/04/29 09:03

本文仅是基于“了解基本概念”层面,所以会写的比较简单,想深入了解的同学可以读一下两篇很经典的paper:Disco: running commodity operating systems on scalable multiprocessors和Virtual Machine Monitors
肘子直接吃了其他人站在巨人肩膀上摘下的苹果了。

JVM是程序级虚拟机,在这里就不赘述。

基本概念

虚拟机(Virtual Machine,VM)

可以像物理机器一样执行程序的一类运行在机器上的软件

分类

系统级虚拟机:提供一个足以支撑起一个完整操作系统运行的平台
比如,VMWare
这里写图片描述
程序级虚拟机:为了运行单个外来程序而设计的
比如,JVM
这里写图片描述

hypervisor/VMM

系统级虚拟机是由虚拟机监视器(hypervisor或者Virtual Machine Monitor,VMM)控制管理的,它提供了复用host机器的硬件资源(CPU,內存,I/O)硬件仿真接口的一类软件。
这里写图片描述

分类

全虚拟化(full visualization)
每个客户操作系统(Guest OS)所发出的指令都要被翻译成CPU能识别的指令格式
所以Hypervisor的工作负荷会很大,因此会占用一定的资源,所以在性能方面不如裸机,但是运行速度要快于硬件模拟。
全虚拟化最大的优点就是运行在虚拟机上的操作系统没有经过任何修改,唯一的限制就是操作系统必须能够支持底层的硬件。
这里写图片描述
比如,KVM
这里写图片描述

半虚拟化
在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API(Hypercalls),这个API可以将客户操作系统发出的指令进行最优化,即不需要Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小,因此整体的性能也有很大的提高。
缺点就是,要修改包含该API的操作系统,但是对于某些不含该API的操作系统(主要是windows)来说,就不行能用这种方法。
这里写图片描述
比如,Xen
这里写图片描述

随着硬件虚拟化技术的逐渐演化,运行于Intel平台的全虚拟化的性能已经超过了准虚拟化产品,这一点在64位的操作系统上表现的更为明显。加之,全虚拟化不需要对客户机操作系统做任何修改的固有优势。
参考:http://godben.blog.51cto.com/8919725/1734752

虚拟机的实现

主要涉及三大方面:CPU的虚拟化,內存虚拟化,I/O虚拟化

CPU Virtualization

CPU虚拟化旨在解决:如何安全地有效地让CPU执行GuestOS的指令
根据CPU mode可以将指令分类如下:

对于Host OS:

  • 特权指令(privilege instructions)
    Instructions that are trapped if the machine is in user mode
    比如,进程切换
  • 非特权指令(Non-Privileged instructions)
    All other instructions
    比如,常规的算术运算

对于Guest OS:

  • Sensitive instructions
    Instructions that need to be captured and handled by VMM
    比如: Instruction to modify page table base register
  • Non-Sensitive instructions
    All other instructions (execute normally in Guest OS)
    比如,常规的算术运算

privilege instructions与sensitive instructions的联系:

  • visualization CPU
    这里写图片描述
    When Guest OS executes sensitive instrs, the execution will be trapped to hypervisor which is running on privilege mode automatically

-Non-Virtualizable CPU
这里写图片描述
For non-privilege mode, when Guest OS wants to execute sensitive instrs, For privilege & sensitive instrs, they will be trapped into hypervisor running on privilege mode automatically
For critical instrs, they will NOT be trapped into hypervisor automatically. Hypervisor designers need to let critical instrs be trapped to hypervisor, and let hypervisor emulate their behaviors.

eg. x86和ARM都是Non-Virtualizable CPU。

以Inel VT-X为例,Non-Virtualizable CPU执行过程
这里写图片描述

內存虚拟化

目的是为了解决如何让GuestOS访问內存
这里写图片描述

I/O虚拟化

目的在于模拟GuestOS访问I/O设备。
这里写图片描述

以KVM中GuestOS的应用需要访问I/O设备为例
这里写图片描述

示例

了解一下就好了

KVM,XEN,VMWare对比

链接

【后记】
虚拟机的坑很深,要是想要深入了解,最好办法是实践,比如,“KVM与其它虚拟化工具或云计算平台的结合方案 (QEMU、Virtio、OpenStack)”

0 0
原创粉丝点击