【问题标题】:Linux kernel's vm_offset in anonymous mappingLinux内核匿名映射中的vm_offset
【发布时间】:2021-10-13 23:38:35
【问题描述】:

vm_pgoff 在 Linux 内核的“匿名”映射 (vm_area_struct) 中是否有目的?

对于文件映射,这很明显,但在匿名映射中,似乎在所有情况下都只是vm_start >> PAGE_SHIFT。这是真的吗?有人可以解释或指出正确的方向吗?

谢谢!

【问题讨论】:

  • 我想你的意思是vm_pgoff。大概设置为vm_start >> PAGE_SHIFT,让内核代码更方便。
  • 看起来是这样,但我正在处理的是,当映射被移动(使用mremap 重新映射)时,这会导致问题。偏移量不匹配且映射无法合并,这会导致不必要的碎片化,尤其是如果 vm_pgoff 无论如何都不用于匿名映射。

标签: c linux-kernel mmap


【解决方案1】:

来自 linux 手册页:

MAP_ANONYMOUS
映射没有任何文件支持;它的内容被初始化为零。这 fd 参数被忽略;但是,如果某些实现要求 fd 为 -1 指定了 MAP_ANONYMOUS(或 MAP_ANON),可移植应用程序应确保 这。偏移量参数应该为零。结合使用 MAP_ANONYMOUS 自内核 2.4 起,Linux 才支持使用 MAP_SHARED。

所以对于匿名映射,它应该始终为 0。

【讨论】:

  • 是的,对于 mmap 调用来说确实如此,但是在 vm_area_struct 的内核内部有 vm_offset,据我所知,它总是 vm_start >> PAGE_SHIFT,因此问题是,如果总是这样。跨度>
猜你喜欢
  • 1970-01-01
  • 2012-07-27
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
相关资源
最近更新 更多