QEMU源码全解析 —— CPU虚拟化(6)

123 篇文章 36 订阅 ¥49.90 ¥99.00

接前一篇文章:

本文内容参考:

《趣谈 Linux操作系统 》 —— 刘超, 极客时间

QEMU /KVM》源码解析与应用 —— 李强,机械工业出版社

《深度探索 Linux 系统虚拟化原理与实现》—— 王柏生 谢广军, 机械工业出版社

特此致谢!

二、x86架构CPU虚拟化

本系列前边几篇文章介绍了CPU虚拟化,包括VMX架构以及VMCS相关内容的讲解。本回来看一下x86架构CPU的虚拟化。

Gerald J.Popek和Robert P.Goldberg在1974年发表的论文《Formal Requirements for Virtualizable Third Generation Architectures》中提出了虚拟化的三个条件:

(1)等价性

即VMM需要在宿主机上位 虚拟机 模拟出一个本质上与物理机一致的环境。虚拟机在此环境下运行与其在物理机上运行别无二致,除了可能因为资源竞争或者VMM的干预导致在虚拟环境中表现略有差异。比如虚拟机的IO、网络等因宿主机的限速或者多个虚拟机共享资源,导致速度可能要比独占物理机时慢一些。

(2)高效性

即虚拟机指令执行的性能与其在 物理机 上运行时的性能相比并无明显损耗。该标准要求虚拟机中的绝大部分指令无须VMM干预而直接运行在物理CPU上。比如,在x86架构上通过 Qemu 运行的ARM并不是虚拟化、而是模拟。

(3)资源控制

即VMM可以完全控制系统资源。由VMM控制协调宿主机资源给各个虚拟机,而不能由虚拟机控制宿主机的资源。

1. 陷入和模拟模型

为了满足Gerald J.Popek和Robert P.Goldberg提出的虚拟化三条件,一个典型的解决方案是陷入和模拟(Trap and Emulate)模型。

一般来说,处理器分为两种运行模式:系统模式和用户模式。相应地,CPU指令也分为特权指令和非特权指令。特权指令只能在系统模式运行,如果在用户模式运行就会触发处理器异常。操作系统允许内核运行在系统模式,因为内核需要管理系统资源,需要运行特权指令;而普通的用户程序则运行在用户模式。

在陷入和模拟模型下,虚拟机的用户程序仍然运行在用户模式,但是虚拟机的内核也将运行在用户模式,这种方式成为特权级压缩(Ring Compression )。实际上,之前文章已经提到了这个问题,如下所示:

在特权级压缩方式下,虚拟机中的非特权指令直接运行在处理器上,满足了虚拟化标准中高效的要求,即大部分指令无须VMM干预、直接在处理器上运行。然而,当虚拟机执行特权指令时,因为是在用户模式下运行,将触发处理器异常,从而陷入到VMM中,由VMM代理虚拟机完成系统资源的访问,即所谓的模拟(emulate)。如此(此种机制下),又满足了虚拟机标准中VMM控制系统资源的要求,虚拟机将不会因为可以直接运行特权指令而修改宿主机的资源,从而破坏宿主机的环境。

更多内容请看下回。

举报

选择你想要举报的内容(必选)
  • 内容涉黄
  • 政治相关
  • 内容抄袭
  • 涉嫌广告
  • 内容侵权
  • 侮辱谩骂
  • 样式问题
  • 其他