基于软件的 CPU 的虚拟化
基于软件的 CPU 虚拟化,故名思议,就是通过软件的形式来模拟每一条指令。通过前面的文章我们知道常
用的软件虚拟化技术有两种:优先级压缩和二进制代码翻译。这两种是通用技术,可以用在所有虚拟化类
型中。我们就结合 intercept 和 virtualize 来看看 CPU 软件虚拟化是怎么做的。
首先,一些必须的硬件知识要知道,X86 体系架构为了让上层的软件(操作系统、应用程序)能够访问硬
件,提供了四个 CPU 特权级别,Ring 0 是最高级别,Ring 1 次之,Ring 2 更次之,Ring 3 是最低级别。
一般,操作系统由于要直接访问硬件和内存,因此它的代码需要运行在最高级别 Ring 0 上,而应用程序的
代码运行在最低级别 Ring 3 上,如果要访问硬件和内存,比如设备访问,写文件等,就要执行相关的系统
调用,CPU 的运行级别发生从 Ring 3 到 Ring 0 的切换,当完成之后,再切换回去,我们熟悉的用户态和
内核态切换的本质就来自这里。
虚拟化的实现也是基于这个思想,VMM 本质上是个 Host OS,运行在 Ring 0 上,Guest OS 运行在 Ring 1
上,再往上是相应层次的应用程序运行在 Ring 2 和 Ring 3 上。
学员评价