linux在调用fork创建子进程时使用了“写时复制”技术。写时复制主要是原理如下:
- 进程在调用fork时子进程不会立刻父进程所使用的物理内存页,而是子进程只会复制一份父进程的虚拟内存和物理内存的映射关系,即父子进程共用父进程的物理内存页。此时会将它们共用的内存页均设置为只读。
- 当父进程或子进程中任何一进程对内存进行写操作时,由于步骤1将内存设置为只读,因此将发生内存读写权限错误。此时将根据相关状态判断,将它们共用的物理内存复制一份,并建立新的映射关系,父子进程的内存正式分离。
通过“写时复制”技术,具有以下优势:
- 由于调用fork时仅仅复制了父进程的虚拟内存和物理内存映射关系,因此具有创建子进程速度快优势。
- 在父子进程均未写内存时,两者共用一份内存,节约了内存