Memory 低物理内存的PCI设备映射区域

Memory 低物理内存的PCI设备映射区域,memory,memory-management,linux-kernel,dma,pci,Memory,Memory Management,Linux Kernel,Dma,Pci,我一直在读PCI子系统是如何从启动、BIOS参与和设备地址映射(即BAR到系统内存)中配置的 从上图中,我假设地址空间是物理4GB RAM,物理地址为4GB。因此,从3GB以上可以看出,设备内存已映射。2GB物理RAM地址上的内存会发生什么变化 假设我的假设是错误的,上面的映射显示了32位系统的虚拟地址。那么,设备内存如何映射到DMA的物理地址。映射是否永久(不可交换且可更改) 请帮助我理解这个概念 如果我理解你的问题,2GB系统上没有什么不同。在2GB和3GB之间的物理地址空间中只会有一个“洞

我一直在读PCI子系统是如何从启动、BIOS参与和设备地址映射(即BAR到系统内存)中配置的

  • 从上图中,我假设地址空间是物理4GB RAM,物理地址为4GB。因此,从3GB以上可以看出,设备内存已映射。2GB物理RAM地址上的内存会发生什么变化

  • 假设我的假设是错误的,上面的映射显示了32位系统的虚拟地址。那么,设备内存如何映射到DMA的物理地址。映射是否永久(不可交换且可更改)

  • 请帮助我理解这个概念

  • 如果我理解你的问题,2GB系统上没有什么不同。在2GB和3GB之间的物理地址空间中只会有一个“洞”;也就是说,这里根本不会有硬件设备对地址进行解码。但除此之外,PCI设备没有显著差异:它们仍将在3GB以上的区域分配空间

    需要注意的是,上面显示的映射(物理地址空间)不一定在4GB(大约从1995年开始)停止。大多数现代x86处理器都有超过32个地址位。这就是为什么现在的系统通常具有超过4GB的RAM。4GB以上的地址空间也可能有额外的漏洞

    实际上,使用4GB以上的RAM需要处理器的64位模式或PAE(物理地址扩展),后者提供了一种在32位模式下寻址超过4GB物理空间的方法。[也有PSE-36{页面大小扩展},但这是不太常用的。]

  • 上面显示的映射特定于物理地址空间。x86虚拟地址空间(当处理器在32位模式下运行时)的大小为4GB,但它没有图表中的所有保留区域。实际上,虚拟地址空间的布局完全依赖于操作系统,并由操作系统决定。在linux中配置它的通常方式是,用户模式保留3GB线以下的部分虚拟地址空间,内核模式保留3GB线以上的部分虚拟地址空间。但是,可以通过内核配置更改此配置

  • 物理地址空间到虚拟地址空间的映射由操作系统内核逐页管理。虚拟页面可以定向到系统RAM或PCI设备。请注意,页面大小也可能有所不同,这取决于处理器和页面表的配置方式