《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术(2)

发布时间:2024年01月24日

接前一篇文章:《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术(1)

13.1 IOMMU

在多进程环境下,处理器使用MMU机制,使得每一个进程都有独立的虚拟地址空间,从而在各个进程运行在独立的地址空间中,互不干扰。MMU具有两大功能一是进行地址转换,将分属不同进程的虚拟地址转换为物理地址二是对物理地址的访问进行权限检查,判断虚实地址转换的合理性

在多数操作系统中,每一个进程都具有独立的页表,以存放虚拟地址到物理地址的映射关系和属性。但是如果进程每次访问物理内存时都需要访问页表,将严重影响进程的执行效率。为此,处理器设置了TLB(Translation Lookaside Buffer,旁路转换缓冲)作为页表的Cache。如果进程的虚拟地址在TLB命中时,则从TLB中直接获得物理地址,而不需要使用页表进行虚实地址的转换,从而极大地提高了访问存储器的效率。

从地址转换的角度来看,IOMMU与MMU较为类似,只是IOMMU完成的是外部设备地址到存储器地址的转换。可以将一个PCI设备模拟成为处理器系统的一个特殊进程,当这个进程访问存储器时使用特殊的MMU(即IOMMU)进行虚实地址转换,然后再访问存储器。在这个IOMMU中,同样存在IO页表存放虚实地址转换关系和访问权限,而且处理器为了加速这种虚实地址的转换,还设置了IOTLB作为IO页表的Cache。单纯从这个角度来看,许多HOST主桥和RC也具备同样的功能,如Powerp/c处理器的Inbound窗口和Outbound窗口,也可以完成这种特殊的地址转换。但是这些窗口仅能完成PCI总线域到一个存储器域的地址转换,无法实现PCI总线域到多个存储器域的转换

目前,设置IOMMU的主要作用是支持虚拟化技术。当然,使用IOMMU也可以实现其它功能,如使“仅支持32位地址的PCI设备”访问4GB以上的存储器空间。IA处理器和AMD处理器分别使用“VT-d”和“IOMMU”实现外部设备的地址转换。这两种技术(VT-d和IOMMU)都可以将PCI总线域地址空间转换为不同的存储器域地址空间,便于虚拟化技术的设计与实现。

13.1.1 IOMMU的工作原理

根据虚拟化的理论,假设在一个处理器系统中存在两个Domain,其中一个为Domain 1、而另一个为Domain 2。这两个Domain分别对应不同的虚拟机,并使用独立的物理地址空间,分别为GPA1(GPA即Guest Physical Address)和GPA2空间,其中在Domain 1上运行的所有进程都使用GPA1空间,而在Domain 2上运行的所有进程都使用GPA2空间。

GPA1和GPA2采用独立的编码格式,其地址都可以从各自GPA空间的0x00000000地址开始,只是GPA1和GPA2空间在System Memory中占用的实际物理地址HPA(Host Physical Address)并不相同。HPA也被称为MPA(Machine Physical Address),是处理器系统中真实的物理地址。而PCI设备依然使用PCI总线域地址空间PCI总线地址需要通过DMA-Remapping逻辑转换为HPA地址后,才能访问存储器。DMA-Remapping逻辑的组成结构如图13-1所示:

图13-1 DMA-Remapping实现

对于DMA-Remapping机制的详细讲解,放在下一回中。

文章来源:https://blog.csdn.net/phmatthaus/article/details/135814922
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。