Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

第九十五章:共享内存与内存映射

复习

  • 页面缓存把文件内容作为内存中的页保存。

TL;DR

  • 内存映射把文件内容安排进进程地址空间。
  • 共享内存让多个进程映射同一批物理页。

正文

  既然文件缓存本来就是页面,内核可以把文件的某一段映射到进程的虚拟地址空间。程序随后像读写普通数组一样读写那段地址;第一次访问仍可能缺页,修改后的页也仍按文件系统规则写回。这就是内存映射

  若两个进程把同一批物理页映射到自己的地址空间,就得到共享内存。传递大块数据时,它避免了反复复制;代价是两个进程仍要用锁、条件变量等机制规定读写顺序。

  文件、缓存和页表已经连成一张图。可一旦断电恰好发生在多处元数据更新之间,磁盘上会留下什么?

思考题

共享内存为什么不自动保证两个进程看到一致结果?

小结

  • 内存映射把文件访问和虚拟内存统一起来。
  • 共享页面传递数据很快,仍需同步。

思考题答案(仅供参考)

  共享只意味着看见同一批字节,不会替两个进程安排读写的先后顺序。

协议

本文采用 CC BY-NC-SA 4.0 协议发布。