![b77fe570479873f70e999c571a6184fd.png](https://i-blog.csdnimg.cn/blog_migrate/42d341e45939a1143521bdd24a6714f0.png)
大型操作系统(比如Linux)的内存管理的内容是很丰富的,而内存的虚拟化技术在OS内存管理的基础上又叠加了一层复杂性,比如我们常说的虚拟内存(virtual memory),如果使用虚拟内存的OS是运行在虚拟机中的,那么需要对虚拟内存再进行虚拟化,也就是vitualizing virtualized memory。本文将仅从“内存地址转换”和“内存回收”两个方面探讨内存虚拟化技术。
【虚拟机内存地址转换】
在Linux这种使用虚拟地址的OS中,虚拟地址经过page table转换可得到物理地址(参考这篇文章):
![6a1878f4e47b1b8667a917de7ad1634f.png](https://i-blog.csdnimg.cn/blog_migrate/defe8127894e0f61bed6fde64ff27fe5.jpeg)
如果这个操作系统是运行在虚拟机上的,那么这只是一个中间的物理地址(Intermediate Phyical Address - IPA),需要经过VMM/hypervisor的转换,才能得到最终的物理地址(Host Phyical Address - HPA)。从VMM的角度,guest VM中的虚拟地址就成了GVA(Guest Virtual Address),IPA就成了GPA(Guest Phyical Address)。
![c956a78367c2d89ee77a517763d63e70.png](https://i-blog.csdnimg.cn/blog_migrate/2a0289abd7aface1ba83cfddae9f5c53.jpeg)
可见,如果使用VMM,并且guest VM中的程序使用虚拟地址(如果guest VM中运行的