fork 时的写时复制是怎样实现的?
先自己想一想,再看参考要点
参考要点
- fork 时内核只复制页表,并把私有可写的页在父子两边都标为只读,不复制物理页
- 哪一方先写,哪一方就触发缺页异常,内核把这一页复制到新的页框并改为可写,没被写过的页一直共享
- 这类缺页的区域本身允许写,只是页表项暂时标为只读,属于正常的缺页,不会发出 SIGSEGV
- 例如子进程把 256 MB 内存再写一遍,按 4 KB 一页触发 65536 次缺页,父进程中的值不受影响
参考要点
学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。