-
重新认识fork
当fork函数被当前进程调用时,内核为新进程创建各种数据结构,并分配给它一个唯一的PID。为了给这个进程创建虚拟内存,它创建了当前进程的mm_struct,区域结构和页表的原样副本。它将两个进程中的每个页都标记为只读,并将两个进程中的每个区域结构都标记为私有的写时复制。当fork在新进程返回时,新进程现在的虚拟内存刚好和调用fork时存在的虚拟内存相同。当这两个进程中的任一个进程进行写操作时,写时复制机制就会创建新的页面。(如图所示,当进程1调用fork创建进程2时候,他们的虚拟内存映射到同一个物理内存中,当进程2进行写操作时,进程2会将改变的部分新映射到新的物理内存中)