美文网首页
你真的知道匿名映射是什么吗?

你真的知道匿名映射是什么吗?

作者: JamFF | 来源:发表于2021-03-26 09:36 被阅读0次

《认真分析mmap:是什么 为什么 怎么用》中提到了匿名映射,只要在 flags 参数中增加 MAP_ANONYMOUS,即为匿名映射。此时,会忽略参数 fd,映射区不与任何文件关联,而且映射区域无法和其他进程共享。

根据 mmap 映射是否与文件相关联,可以将 Linux 内核中映射可以分为两种:匿名映射和文件映射。

  • 匿名映射:没有映射对应的相关文件,这种映射的内存区域的内容会被初始化为0。
  • 文件映射:映射和实际文件相关联,通常是把文件的内容映射到进程地址空间,这样应用程序就可以像操作进程地址空间一样读写文件。

根据文件关联性、映射区域是否共享这两个属性,mmap的映射类型,又可以分为如下4种:

私有映射 共享映射
匿名映射 私有匿名映射 - 通常用于内存分配 共享匿名映射 - 通常用于进程间共享内存
文件映射 私有文件映射 - 通常用于加载动态库 共享文件映射 - 通常用于内存映射IO,进程间通信
  1. 私有匿名映射
    当使用参数 fd=-1 且 flags=MAP_ANONYMOUS | MAP_PRIVATE 时,创建的 mmap 映射是私有匿名映射。私有匿名映射最常见的用途是在 glibc 分配大块内存中,当需要的分配的内存大于 MMAP_THREASHOLD(128KB) 时,glibc会默认使用 mmap 代替 brk 来分配内存。

  2. 共享匿名映射
    当使用参数 fd=-1 且 flags=MAP_ANONYMOUS | MAP_SHARED 时,创建的 mmap 映射是共享匿名映射。共享匿名映射让相关进程共享一块内存区域,通常用于父子进程的之间通信。

    创建共享匿名映射有如下两种方式:

    • fd=-1 且 flags= MAP_ANONYMOUS|MAP_SHARED。在这种情况下,do_mmap_pgoff()->mmap() 函数最终调用 shmem_zero_setup() 来打开一个 "/dev/zero" 特殊的设备文件。
    • 直接打开 "/dev/zero" 设备文件,然后使用这个文件句柄来创建 mmap。
  3. 私有文件映射
    私有文件映射时 flags 的标志位被设置为 MAP_PRIVATE,那么就会创建私有文件映射。私有文件映射的最常用的场景是加载动态共享库。

  4. 共享文件映射
    创建文件映射时 flags 的标志位被设置为 MAP_SHARED,那么就会创建共享文件映射。如果 prot 参数指定了 PROT_WRITE,那么打开文件需要制定 O_RDWR 标志位。

    共享文件映射通常有如下场景:

    • 读写文件:
      把文件内容映射到进程地址空间,同时对映射的内容做了修改,内核的回写机制(writeback)最终会把修改的内容同步到磁盘中。
    • 进程间通信:
      进程之间的进程地址空间相互隔离,一个进程不能访问到另外一个进程的地址空间。如果多个进程都同时映射到一个相同的文件,就实现了多进程间的共享内存的通信。如果一个进程对映射内容做了修改,那么另外的进程是可以看到的。

作者:yooooooo
链接:https://www.cnblogs.com/linhaostudy/p/13467118.html
来源:博客园
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • 你真的知道匿名映射是什么吗?

    在《认真分析mmap:是什么 为什么 怎么用》[https://www.jianshu.com/p/57fc583...

  • 九型人格-----当之无愧的管理心理学

    你真的了解自己吗? 你知道你是什么性格的吗? 你知道你的家人是什么性格吗? 你知道你的同事朋友,领导是怎样的人吗?...

  • 想要的

    你要的是什么?你真的知道你想要的是什么吗?你确定你真的知道你想要的是什么吗?别骗自己,那样你会很痛苦的,问自己想要...

  • 想要实现你的梦想,你必须要读的书

    你了解自己吗? 你真的了解自己吗? 你知道自己的天赋和热情是什么吗? 你知道自己的梦想是什么吗? 你有一份属于自己...

  • 喜欢

    你知道自己喜欢什么吗?你知道自己的梦想是什么吗?你真的知道吗?喜欢的都是正确的吗? 这是问过自己,思考...

  • 我杀人了

    “我杀人了。” “你在开玩笑吗?” “我真的杀人了!” “你知道这个是什么电话吗?” “我知道,是报警电话。” “...

  • 证据的效力

    你的证明是什么? 你怎么知道他说是真的? 证据在哪里? 你为什么相信他? 你确信他是真的吗? 你能证明吗? 这些...

  • 你真的知道智商是什么吗?

    从小白开始学心理学 在谈及智商之前 智商的由来是第一个关注的点,最初并没有这样的说法,智商的出现也就100多年,具...

  • 现代人的崩溃,是什么样子的,你真的知道吗

    现代人的崩溃,是什么样子的,你真的知道吗? 现代人的崩溃,是什么样子的,你真的知道吗? 现代人的崩溃,是一种默不作...

  • 晨读感悟:简单思考 看重点

    都说顾客是上帝,你真的知道上帝最需要的是什么吗?你真的知道你给的都是上帝想要的吗? 目前竞争激烈的时代,超市为了拉...

网友评论

      本文标题:你真的知道匿名映射是什么吗?

      本文链接:https://www.haomeiwen.com/subject/gmpacltx.html