公平地说pci_alloc_consistent
分配一个连续的非缓存,非分页内核内存块。我问的原因是我在一些内核/驱动程序代码中看到了这个注释(不是在vanilla内核源代码中),我想我明白内存是连续的,但是不确定它是什么分配非缓存,因为缓存一致性的想法是保持缓存中的数据和DMA内存一致。
另外,不确定为什么他们称之为非分页。
E.g。 Part Ia
部分中的https://www.kernel.org/doc/Documentation/DMA-API.txt说:
一致性存储器是由设备或其写入的存储器 处理器或设备可以立即读取处理器 无需担心缓存效果。
所以我们无法推断内存非缓存,所以我倾向于认为我看到的评论有些误导。
我希望得到有用的评论。谢谢!
答案 0 :(得分:3)
在x86上,缓存是DMA一致的(这要求缓存控制器监听所有DMA流量),因此一致的内存只是正常(缓存)内存。
在大多数其他体系结构中,缓存不是DMA一致的,因此pci_alloc_consistent()
必须分配非缓存内存。
“非分页”表示内存无法交换到磁盘。但是,这是Windows驱动程序编写者所关心的事情;正常的Linux内核分配函数都没有返回可交换的内存。