上QQ阅读APP看书,第一时间看更新
第2章 内存虚拟化
要想彻底理解如何从软件层面为虚拟机虚拟出物理内存,我们首先需要了解操作系统是如何使用物理内存的。因此,本章中,我们首先简单探讨了内存寻址的基本原理。
以往,很多讨论内存虚拟化的资料都聚焦于影子页表等地址翻译部分,但是几乎没有资料探讨VMM如何为虚拟机准备物理内存,以及VMM如何将其为虚拟机准备的内存上报给虚拟机,而这是讨论地址翻译的基础,所以,在本章中我们将从这里开启内存虚拟化过程之旅。
我们知道,x86物理CPU重置后都是从实模式开始运行,然后切入保护模式,所以boot loader或者操作系统内核都是从实模式开始运行的。而在实模式下并没有页表的概念,那么虚拟机又是如何实现寻址的呢?因此,在接下来的部分,我们讨论了运行在实模式下Guest的内存寻址。
随后,我们讨论了运行在保护模式下的Guest的寻址方式,即大家比较熟知的影子页表方式。
因为影子页表的低效,包括带来额外的虚拟机退出的额外开销、软件方式遍历页表、内存占用过多等问题,Intel在硬件层面对内存虚拟化进行了支持,加入了另外一级支持地址映射的硬件单元EPT。在本章的最后,我们讨论了EPT模式下的地址翻译过程,以及EPT页表的建立。