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

123 篇文章 36 订阅 ¥49.90 ¥99.00

接前一篇文章:

本文内容参考:

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

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

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

特此致谢!

二、x86架构CPU虚拟化

3. VMX

VMX 实际上前文( QEMU源码全解析 —— CPU虚拟化(2)-CSDN博客 )已经讲过了,这里再来讲解一下,反复加深印象。

虽然很多人从软件层面采用了多种方案来尝试解决x86架构在虚拟化时遇到的问题,但是这些解决方除了引入额外的开销外,还给VMM的实现带来了巨大的复杂性。于是,Intel从硬件方面尝试解决这个问题。Intel并没有将那些非特权的敏感指令修改为特权指令,因为并不是所有的特权指令都需要拦截处理。

举一个典型案例:每当操作系统内核切换进程时,都会切换cr3寄存器,使其指向当前运行进程的页表。但是,当使用影子页表进行GVA(Guest Virtual Address )到HPA(Host Physical Address)的映射时,VMM模块需要捕获Guest每一次设置cr3寄存器的动作(操作),使其指向影子页表。如下图所示:

而当启用了硬件层面的EPT支持后,cr3寄存器不再需要指向影子页表,其仍然指向Guest的进程的页表。因此,VMM无须再捕捉Guest设置cr3寄存器的操作,也就是说,虽然写cr3寄存器是一个特权操作,但该操作不需要陷入VMM。

Intel开发了VT技术以支持虚拟化,为CPU增加了Virtual-Machine eXtensions,简称VMX。一旦启动了CPU的VMX支持,CPU将提供两种运行模式:VMX Root Mode(VMX根模式)和VMX non-Root Mode(VMX非根模式)。每一种模式都支持ring 0 ~ ring 3。VMM运行在VMX Root Mode,除了支持VMX外,VMX Root Mode和普通的模式并无本质区别;VM运行在VMX non-Root Mode,Guest无须再采用特权级压缩方式(特权级压缩的概念前文已提到:在陷入和模拟模型下, 虚拟机 的用户程序仍然运行在用户模式,但是虚拟机的内核也将运行在用户模式,这种方式称为特权级压缩,Ring Compression),Guest kernel可以直接运行在VMX non-Root Mode的ring 0中。VMX运行模式如下图所示:

更多内容请看下回。

举报

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