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

k4ymrczo  于 9个月前  发布在  Linux
关注(0)|答案(2)|浏览(92)

只是好奇是否可以为非文件支持的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]

字符串

qgzx9mmu

qgzx9mmu1#

maps的内容来自fs/proc/task_mmu.c中的show_map_vma函数。看一下它,如果您想要为非文件支持的Map提供自定义名称,则需要来自vma->vm_ops->namearch_vma_namearch_vm_name是特定于体系结构的(正如您从名称中所期望的那样),并且只用于为某些区域添加一些硬编码的名称,因此它对您没有用处。这使得vma->vm_ops->name成为您唯一的可能性,但是当你用MAP_ANONYMOUS调用mmap时,vma_set_anonymous会将vma->vm_ops设置为NULL。因此,如果没有自定义内核代码,严格来说你所要求的是不可能的。
如果您实际上只是希望内存不受磁盘支持,则可以使用memfd_create系统调用创建FD,或者在非磁盘支持的文件系统(如tmpfs)中创建文件(例如,/dev/shm,就像shm_open使用的那样)。这两种方法中的任何一种都将给予您对所使用的文件名的控制权(例如,/memfd:some_name (deleted)/dev/shm/some_name)。

ffx8fchx

ffx8fchx2#

除了Joseph的回答之外,从Linux版本5.17开始,您可以用prctl命名匿名私有Map。
调用示例:

prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, start, len, "mymemory");

字符串
proc中,名称将显示为[anon:mymemory]
从Linux 6.2开始,这也适用于共享匿名Map。所以,任何匿名Map都应该可以工作。

相关问题