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

123 篇文章 36 订阅 ¥49.90 ¥99.00

接前一篇文章:

本文内容参考:

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

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

从头开始了解和使用Hypervisor(第3部分) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

特此致谢!

上一回简要介绍了VMX架构,本回继续对基于硬件CPU虚拟化的VT-x技术进行简要介绍。

一、CPU虚拟化介绍

1. CPU虚拟化简介

2. VMX架构简介

3. VMCS介绍

上一回提到,每一个VM都有一个对应的 虚拟机 控制结构(Virtual Machine Control Structure,VMCS)。每个虚拟机的VCPU都有一个VMCS区域。VMCS用来管理VMX non-root Operation的转换以及控制VCPU的行为。操作VMCS的指令包括VMCLEAR、VMPTRLD、VMREAD和VMWRITE。  VMCS区域的大小为4KB,VMM通过它的64位地址来对该区域进行访问。

VMCS之于VCPU的所用类似于进程描述符之于进程的作用。传统上,操作系统的进程会共享物理CPU资源,操作系统负责在多个进程之间分配CPU,每个进程都有进程描述符来保存进程的信息,并且在进程切换时保存硬件上下文,使得进程能够在下次被调度的时候正常运行。同样,VCPU之间会共享物理CPU,VMM负责在多个VCPU之间分配物理CPU,每个VCPU都有自己的描述符,当VMM在切换VCPU运行时需要保存此刻的VCPU状态,从而在下次的VCPU调度中,使得VCPU能够从被中断的那个点开始正常运行。

VMCS区域的内容如下所示:

在VMCS的格式中,前8个字节是固定的。

  • Byte 0~3

VMCS的第一个4字节的第0位到第30位表示修正标识符,用来标识不同的VMCS版本,VMM必须初始化这个值;第一个4字节的第31位是 shadow -VMCS indicator,VMM需要根据VMCS是一个普通的VMCS还是一个shadow VMCS来设置shadow-VMCS indicator。

  • Byte 4~7

VMCS的第二个4字节是VMX-abort indicator,当VM Exit发生错误时,会产生VMX-abort,导致处理器进入关闭状态,处理器写入一个非零值到VMX-abort indicator。

剩下的就是VMCS数据区了,它控制着VMX non-root和VMX root之间的转换。这个区域的格式是由实现决定的,VMM通过VMREAD和VMWRITE指令在这里读写。

关于VMCS数据区的详细介绍,请看下回。

举报

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