CS-Notes 学习笔记
Java 后端 · 操作系统

fork 时的写时复制是怎样实现的?

先自己想一想,再看参考要点

参考要点

  • fork 时内核只复制页表,并把私有可写的页在父子两边都标为只读,不复制物理页
  • 哪一方先写,哪一方就触发缺页异常,内核把这一页复制到新的页框并改为可写,没被写过的页一直共享
  • 这类缺页的区域本身允许写,只是页表项暂时标为只读,属于正常的缺页,不会发出 SIGSEGV
  • 例如子进程把 256 MB 内存再写一遍,按 4 KB 一页触发 65536 次缺页,父进程中的值不受影响
在学习站中自测这道题

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。