Copy On Write
仅作为个人笔记

参考:https://zhuanlan.zhihu.com/p/366707663

大致理解

在 Linux 系统中,调用 fork 系统调用创建子进程时,并不会把父进程所有占用的内存页复制一份,而是与父进程共用相同的内存页,而当子进程或者父进程对内存页进行修改时才会进行复制 —— 这就是著名的 写时复制 机制。

虚拟内存与物理内存

虚拟内存地址 需要映射到 物理内存地址

过程

fork:父进程创建子进程,此时虚拟内存指向同一共用物理内存地址,并将虚拟内存设置为只读,此时两个进程公用同一物理内存地址

父/子进程写操作:因为虚拟内存设置为只读,所以当写操作时会触”缺页异常”,此时linux内核在缺页异常处理函数中进行物理内存页的复制,此时父进程和子进程的物理内存不同。同时父进程的是可读写的

优点

加速创建子进程速度
减少进程对物理内存的使用