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

123 篇文章 36 订阅 ¥49.90 ¥99.00

接前一篇文章:

本文内容参考:

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

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

特此致谢!

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

一、CPU虚拟化介绍

1. CPU虚拟化简介

2. VMX架构简介

Intel通过在原来x86 CPU的基础上增加VMX架构来实现CPU的硬件虚拟化。 VMX(Virtual Machine eXtension) 架构是Intel公司的一种虚拟化技术,主要用于增强x86架构处理器支持 虚拟机 的能力。 VMX提供了一种高级别的硬件虚拟化层 使得操作系统能够在单个物理处理器上运行多个独立的虚拟机(VMs),每个VM都有自己的CPU视图、内存管理和I/O控制器等资源 。VMX通过设置特定的标志位以及使用虚拟化扩展指令集,让宿主机操作系统可以控制和隔离虚拟机的行为。

VMX架构下定义了两类软件角色 虚拟机监控器 (Virtual Machine Monitor, VMM )和 虚拟机 (Virtual Machine, VM )。VMM对整个系统的CPU和硬件有完全的控制权,其抽象出虚拟的CPU给各个VM,并且能够将VM的CPU直接调度到物理CPU上运行。每个VM都是一个虚拟机实例,能支持操作系统以及各种软件栈和应用程序,VM本身不会意识到其处在虚拟化环境中。每一个VM都相互独立,有自己独立的CPU、内存、中断和设备等,这些资源都是VMM提供的。

VMM需要对各个VM进行管理 ,包括 创建、配置、删除VM实例 为其分配资源 确保各个VM之间的隔离与独立 ,还需要 处理对资源的访问 、确保公平,所有这些都需要 VMM运行的权限高于VM 。只有这样,VMM才能够实现对整个系统资源和对VM的管理。

上一回已提到,由于历史原因,操作系统内核已经运行在了最高级ring0,因此为了让CPU支持VMM和VM两种软件,Intel位CPU引入了一种新的模式:VMX operation。VMM执行的模式叫作VMX root operation模式;VM执行的模式叫作VMX non-root operation模式,这两种模式间的转换叫作VMX转换。从VMX root转换到VMX non-root的过程叫作VM Entry;而从VMX non-root转换到VMX root的过程则叫作VM Exit。

要让CPU进入VMX operation,首先需要执行一个VMXON指令。因为VMM本身也需要记录一些数据,所以在执行VMXON指令之前,需要先分配一个VMXON的区域,并进行初始化。

通过VM Entry,VMM可以使一个VM进入到运行状态 。首次进入VM,是通过VMLAUNCH指令发起的。 每一个VM都有一个对应的虚拟机控制结构(Virtual Machine Control Structure,VMCS)区域与之对应 ,用来 保存该VM的相关信息 。因此在进行VMLAUNCH之前,需要提前对VMCS进行分配并初始化。

当VM内部执行特殊指令、以及其它一些事件发生时,会发生VM Exit。VM不知道自己处于虚拟化环境中,因此不会主动进行VM Exit。只有当VM的CPU发生预定指令或者是在VMCS中配置一些事件时,才会进行VM Exit。VM会退出到VMM指定的一个地址,此时VMM开始执行,可以对VM的退出进行处理。

VMM可以通过执行VMXOFF指令退出VMX operation。

每种模式都有自己的ring0和ring3结构。VMX operation与CPU特权级是正交的。在普通的 QEMU /KVM架构中,QEMU等用户态软件以及KVM等宿主机的内核都运行在VMX root模式下,而在虚拟机种,也有自己的ring0和ting3。当然,VM中执行指令的行为肯定不能完全与VMM中相同,否则也用不着VMX架构了 。在VMX non-root模式中,各种指令是严格受到限制的,执行一些特殊的指令(如上一回提到的影响系统全局的指令),或者发生一些特殊的事件都会导致VM Exit,使VM推出到VMM,这样,VMM就有机会控制所有VM的处理器行为。 VMX operation的引入不仅使得传统的操作系统能够控制全局资源,而且也让虚拟机的操作系统不需要修改就能够运行 。这极大地简化了虚拟化平台、也即VMM的开发。

更多内容请看下回。

举报

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