微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以为非文件支持的 mmap 区域添加自定义名称?

如何解决是否可以为非文件支持的 mmap 区域添加自定义名称?

只是好奇是否可以为非文件支持的 mmap 区域指定名称?类似于以下示例中的 [New VMA area]

$ cat /proc/12345/maps
...
7fc062ef2000-7fc062f84000 r-xp 00000000 08:01 22688328                   /usr/local/musl/lib/libc.so
7fc062f85000-7fc062f86000 r--p 00092000 08:01 22688328                   /usr/local/musl/lib/libc.so
7fc062f86000-7fc062f87000 rw-p 00093000 08:01 22688328                   /usr/local/musl/lib/libc.so
7fc062f87000-7fc062f8a000 rw-p 00000000 00:00 0                          [New VMA area]
7fff6c384000-7fff6c3a5000 rw-p 00000000 00:00 0                          [stack]
7fff6c3bd000-7fff6c3c0000 r--p 00000000 00:00 0                          [vvar]

解决方法

maps 的内容来自 the show_map_vma function in fs/proc/task_mmu.c。看看它,如果你想要一个非文件支持的映射的自定义名称,它需要来自 vma->vm_ops->namearch_vma_namearch_vm_name 是特定于体系结构的(正如您对名称所期望的那样)并且仅用于为某些区域添加一些硬编码名称,因此它对您没有用处。这使 vma->vm_ops->name 成为您唯一的可能性,但是当您使用 mmap 调用 MAP_ANONYMOUS 时,vma_set_anonymous 会将 vma->vm_ops 设置为 NULL。因此,如果没有自定义内核代码,您所要求的严格来说是不可能的。

但是,您仍然可以做您想做的事情。如果您实际上只是希望内存不受磁盘支持,则可以使用 memfd_create 系统调用或非磁盘支持的文件系统(例如 tmpfs(例如 /dev/shm ,如 shm_open 使用)。这两种方法中的任何一种都可以让您控制所使用的文件名(例如,/memfd:some_name (deleted)/dev/shm/some_name)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。