# 虚拟化技术分类

#### 模拟器/软件仿真

在一个主机上通过虚拟化模拟器软件，模拟出一个三件或多个硬件环境，每个环境都是独立的虚拟机，CPI、IO内存等都是模拟出来的，可以在宿主机模拟出不同当前物理机CPU指令集的虚拟机，比如可以在Windows上模拟出MAC、Linux等。

* &#x20;通过软件模拟完整的硬件环境
* &#x20;模拟器：QEMU、Bochs、PearPC

#### 全虚拟化/准地虚拟化

VM(虚拟机) 里的OS 称为 GuestOS\
物理机 里的OS 称为 HostOS

在全虚拟化的虚拟平台中，GuestOS并不知道自己是一台虚拟机，它认为自己就是物理机，全虚拟化的GuestOS具有完全的物理机特性，VMM会将一个所能够操作的CPU、内存逻辑抽象成虚拟CPU、虚拟内存，再交由GuestOS来操作使用。

准地虚拟化不做CPU和内存模拟，只对CPU和内存做相应的分配等操作

&#x20;

全虚拟化又分为：

* &#x20;软件辅助的全虚拟化
* &#x20;硬件辅助的全虚拟化

#### 软件辅助的全虚拟化

GuestOS作为一个运行在CPU用户态中的应用程序，不能直接操作硬件设备，所以VMM引用了两种机制--特权解除、陷入模拟

* &#x20;特权解除 ：
  * &#x20;VMM、GuestOS、GuestApplicationsf都是运行在Ring 1-3用户态中，当运行核心态指令时，VMM会动态的将核心态指令捕获并调用若干运行在非核心态的指令来模拟出期望得到的效果给GuestOS，从而将核心态的特权解除。
* &#x20;陷入模拟：
  * &#x20;无论是HostOS或GuestOS，都会存在敏感指令（reboot、shutdown等）,例如只想GuestOS重启结果把HostOS重启了，VMM的陷入模拟就是为了解决这种问题发生。
  * &#x20;在执行敏感指令时，VMM会将敏感指令捕获进行检测并判定其为敏感指令，此时VMM就会陷入模拟，将reboot模拟成一个只针对GuestOS进行操作，并且运行在非核心态上reboot指令，最后CPU执行虚拟机重启操作。
  * &#x20;在2005年Intel提出CPU支持虚拟化技术解决了以上问题。

#### 硬件辅助的全虚拟化

硬件辅助的全虚拟化主要使用了支持虚拟化功能的CPU支撑，分辨出GuestOS敏感指令，而不会影响到HostOS。

KVM主要负责CPU和内存虚拟化，QEMU负责I/O虚拟化。

#### 半虚拟化

半虚拟化需要修改内核源码，修改客户操作系统代码，将一些敏感指令和核心指令修改成可以和VMM直接交互的方式，实现操作系统的定制化。

KVM运行Windows时需要安装半虚拟化驱动Tools，否则无法工作

&#x20;

#### 虚拟化厂商

软件厂商：

* &#x20;Vmware
  * &#x20;Workstation
  * &#x20;vCenter
* &#x20;Microsoft
  * &#x20;Hyper-V
  * &#x20;Citrix
* &#x20;XenServer
  * Oracle
  * Redhat

&#x20;

硬件厂商：

* &#x20;Intel VT-x
  * &#x20;Intel从2015年开始支持CPU中加入硬件虚拟化的支持，intel virtualazation tochnology简称intel VT
* &#x20;AMD-v

&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lzcloudsecurity.gitbook.io/yun-an-quan-gong-fang-ru-men/di-wu-zhang-si-you-yun-yu-xu-ni-hua-gong-fang/xu-ni-hua-ji-shu-fen-lei.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
