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

123 篇文章 36 订阅 ¥49.90 ¥99.00

接前一篇文章:

本文内容参考:

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

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

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

特此致谢!

二、x86架构CPU虚拟化

3. VMX

上一回讲到了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无须再采用特权级压缩方式,Guest kernel 可以直接运行在VMX non-Root Mode的ring 0中。

1)处于VMX Root Mode的VMM可以通过执行CPU提供的虚拟化指令VMLaunch,切换到VMX non-Root Mode,因为这个过程相当于进入Guest,因此通常也被称为VM entry。

2)当Guest内部执行了敏感指令(如某些I/O操作)后,将触发CPU发生陷入的动作,从VMX non-Root Mode切换回VMX Root Mode,这个过程相当于退出VM,因此也称为VM exit。

3)然后VMM将对Guest的操作进行模拟。

相比于将Guest的内核也运行在用户模式(ring 1 ~ ring 3)的方式,支持VMX的CPU有以下三点不同:

1)运行于Guest模式时,Guest用户空间的系统调用直接陷入Guest模式的内核空间,而不再是陷入Host模式的内核空间。

2)对于外部中断,因为需要由VMM控制系统的资源,所以处于Guest模式的CPU收到外部中断后,则触发CPU从Guest模式退出到Host模式,由Host内核处理外部中断。处理完中断后,再重新切入到Guest模式。为了提高I/O效率,Intel支持外设透传模式。在这种模式下,Guest不必产生VM exit。

3)不再是所有的特权指令都会导致处于Guest模式的CPU发生VM exit,仅当运行敏感指令时,才会导致CPU从Guest模式陷入到Host模式,因为有的特权指令并不需要由VMM介入处理。

更多内容请看下回。

举报

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