同物理机器上的物理地址空间一样,虚拟机的 IPA 地址空间也包含了用于访问内存和外围设备的区域,如下图所示:
Hypervior 可以通过将 IPA 与实际物理外设地址映射,从而使虚拟机可以直接通过二阶段的地址映射来访问物理设备,比如我们之前实现的虚拟机上的 PL011 支持,就是直接将 IPA 映射到物理地址上,实现设备直通。
但是在一些场景下,比如我么后面要提到的中断虚拟化支持中,如果虚拟机通过 GICD_*或者 GICR_*寄存器配置中断控制器时,这时候就不能让虚拟机直接访问硬件设备了,而是需要通过一些手段让 Hypervisor 能够截获虚拟机访问这些设备时的操作,这样我们就可以在 Hypervisor 中做一些软件模拟了,同时 MMIO 也是实现之后要讲的半虚拟化 VIRTIO 的基础。