gpt4 book ai didi

c - Linux 中的 "pinned"页如何呈现(或实际上是 "pin")自身

转载 作者:行者123 更新时间:2023-12-04 11:12:03 32 4
gpt4 key购买 nike

我正在使用 get_user_pages在 Linux 内核驱动程序中,为了 [硬件] DMA 固定内存。一切似乎都很好 - 但我很难证明“固定”正在做正确的事情。

当我在做 get_user_pages 后检查物理页面上的标志时- 页面不会出现“锁定”(正如人们可能认为的那样)。事实上,我认为其他“事件”页面的标志与我通过 get_user_pages“固定”的标志之间没有区别。 .

我看到的唯一区别是 get_user_pages 在页面上进行了引用计数。所以我想我的问题是 - 单独持有这个引用是否足以保证这个页面永远不会被换出、移动,或者我的用户空间的 vaddr 仍然/总是引用相同的底层页面?

我能找到的所有驱动程序源似乎都使用这种机制,文档似乎表明这是正确的方法 - 但我很难“证明”这会给我正确、可靠、预期的行为。

最佳答案

持有 refcount 看起来足以防止页面被推出、失效或迁移;因此对于 dma 类型的操作是安全的。迁移在 Documentation/vm/page_migrate 中讨论;其他人需要在 vm 代码中进行探索。简短的版本是推送页面需​​要删除其所有引用。

请注意,refcount 和 mapcount 是不同的概念——mapcount 只是意味着某人对它有一个虚拟引用; refcount 意味着他们有一个实际的引用。换出的页面可以有很大的映射计数。

另请注意,截至 https://lkml.org/lkml/2019/11/25/684有一个不那么晦涩的界面。

关于c - Linux 中的 "pinned"页如何呈现(或实际上是 "pin")自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48931940/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com