首页 文章

共享内存的页面缓存

提问于
浏览
0

在顶部第4张图片中的以下链接中:

http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files

  • 描述的场景是共享文件的两个进程"render"和"3drender" . 作者将描述共享机制如何与页面缓存一起播放 .

  • 最初渲染将其虚拟页面映射到页面缓存 .

  • 在步骤4中,"render"被分配了一个新的匿名页面,它将包含某些更改,它们要对"scene.dat #2"进行更改 .

  • 一旦"render"进行了更改,这个更改如何反映到"3drender",它继续指向包含"scene.dat #2"的页面缓存页面框架?

  • 另外,不应该't this change made by 2375948 , make it'的方式回到页面缓存,那里通过替换"scene.dat #2"的旧页面缓存副本?

  • 对我来说仍然不清楚的部分是"after"其中一个进程写入共享页面,以及"update"如何使其进入页面缓存和磁盘,以便共享同一文件的其他进程看到此更改 .

如果有人可以投光,那就太好了 .

谢谢,VIjay

1 回答

  • 1

    在链接文章中描述的场景中,render和render3d具有单个文件的私有内存映射副本 . 就进程可以看出,操作系统在每个进程的地址空间中分配了一堆页面,并且只是复制了那里的文件内容 . 如果他们修改这些页面,则不会发生任没有更改返回到文件 . 渲染和render3d之间没有任何变化 . 这就是拥有 private 映射意味着什么 .

    当然,为每个进程提供文件的完整副本非常慢,因此操作系统使用虚拟内存技巧 . 在进程写入文件之前,它可以使用共享副本(与其他进程和页面缓存共享,也称为缓冲区缓存) . 私有副本仅在进程首次尝试更改页面时发生 .

相关问题