Linux kernel pci_alloc_一致非缓存内存

Linux kernel pci_alloc_一致非缓存内存,linux-kernel,dma,pci,pci-e,Linux Kernel,Dma,Pci,Pci E,公平地说,pci\u alloc\u consistent分配一个连续的非缓存、非分页内核内存块。我问这个问题的原因是我在一些内核/驱动程序代码(不是普通的内核源代码)中看到了这条评论,我想我理解内存是连续的,但是不确定它是否分配为非缓存的,因为缓存一致性的思想是保持缓存中的数据与DMA内存一致 还有,我不知道他们为什么叫它无页面 例如,第Ia部分的章节中说: 一致性内存是指设备或计算机对其进行写操作的内存 处理器或设备可以立即读取处理器 无需担心缓存效果 所以我们不能推断内存是非缓存的,所以我

公平地说,
pci\u alloc\u consistent
分配一个连续的非缓存、非分页内核内存块。我问这个问题的原因是我在一些内核/驱动程序代码(不是普通的内核源代码)中看到了这条评论,我想我理解内存是连续的,但是不确定它是否分配为非缓存的,因为缓存一致性的思想是保持缓存中的数据与DMA内存一致

还有,我不知道他们为什么叫它无页面

例如,
第Ia部分的章节中说:

一致性内存是指设备或计算机对其进行写操作的内存 处理器或设备可以立即读取处理器 无需担心缓存效果

所以我们不能推断内存是非缓存的,所以我倾向于认为我看到的评论有点误导


如能得到有用的意见,我将不胜感激。谢谢

在x86上,缓存是DMA一致的(这要求缓存控制器监视所有DMA流量),因此一致性内存只是普通(缓存)内存

在大多数其他体系结构上,缓存不是DMA一致的,因此
pci\u alloc\u consistent()
必须分配非缓存内存

“未分页”表示内存无法交换到磁盘。然而,这是一个Windows驱动程序编写器会关心的事情;普通的Linux内核分配函数都不会返回可交换内存