虚拟地址是CPU视角下的地址,物理地址是总线视角下的地址。
很简单,CPU发出寻址的请求时,该地址是CPU视角下的地址,也称为逻辑地址,因为CPU也称逻辑处理单元,如果没有启动MMU通过页表(Page Table)进行转译(Translate),该地址会直接发到总线上面,通过总线去寻址,找到对应的访问空间。此时,CPU视角的地址,简称 CPU地址,就是总线地址。
如果启动了MMU,经过也表转移,那CPU地址就会转移成另一个总线地址,此时,CPU地址跟总线地址就会不一样,由此,通过虚拟地址和物理地址的概念加以区分。
当加上IOMMU的时候,意味着其它外设也有类似MMU的设备进行地址转移,也就是说,带有MMU或IOMMU的设备,其设备视角下有对应的地址,经过MMU或IOMMU转移出去后,会有总线地址,由此,虚拟地址的概念便引入到设备角度上,会产生更多的混淆。
因此,要很好地区分虚拟地址和物理地址,我们只要确定是以哪个设备(包括CPU)视角出发来看待对应的地址。