我一直在努力获取这方面的信息,但仍然没有任何可靠的信息。所以,到目前为止我学到的是 IOMMU 将 DMA 提供的 IOVA 转换为物理地址,并从/向内存读取或写入。我的问题如下:
1) IOMMU 是否为每个设备存储不同的内存映射?每个设备是否在其虚拟地址空间中看到从零开始的地址范围
2)这些IOMMU内存映射存储在哪里?
3) 如果每个设备都在其虚拟地址空间中看到从零开始的虚拟地址,IOMMU 如何知道请求来自哪个设备?
4) 设备是否还传输某种设备特定 ID 或 IOMMU 识别并使用它来取消映射 IOVA 并保护该设备看到或写入的其他内存地址?