本篇开始我们进入内存虚拟化的学习,通过本篇的学习,你可以理解内存虚拟化的原理,实现方法,并且通过实际的测试用例,我们可以将一个 Guest VM bringup 起来。在本篇的内存虚拟化代码中,我们完全撇除与 CPU 虚拟化,中断虚拟化的关系,这样对于我们单纯理解内存虚拟化是十分有帮助的。
通过之前的篇幅,我们已经进入 EL2 的世界了,此时 EL2 可以完全使用底下的物理地址空间,那么此时 EL1 是否也可以使用当前的物理地址空间呢,答案是肯定的。
在 ARM64 中每个异常等级下都有一个独立的转换空间,有自己独立的虚拟地址:
- EL0 的虚拟地址转换由 OS 中指向 TTBR0_EL1 的页表控制;
- EL1 的虚拟地址转换由 OS 中指向 TTBR1_EL1 的页表控制;
- EL2 Hypervisor 的虚拟地址转换由指向 TTBR_EL2 的页表控制;