【发布时间】:2015-06-21 20:39:13
【问题描述】:
根据我的问题“Fork 创建一个与其父进程完全相同的新进程”标题中所做的假设。我想知道操作系统是如何真正制作分叉的。
考虑到一个繁重的进程(巨大的 RAM 占用),它派生出自己来完成一项小任务(将文件列出到目录中)。根据假设,我预计子进程将与第一个进程一样大。然而,我的常识告诉我,事实并非如此。
它在现实世界中是如何工作的?
【问题讨论】:
-
en.wikipedia.org/wiki/Copy-on-write 在这里可能会有所帮助
-
@Jasper 你是说可执行代码位于 RAM 中并且两个进程共享相同的内存空间?
-
@nowox “man 2 fork”可以帮到你很多。
-
采用了一种称为 Copy-on-Write(COW) 的机制。这意味着内存的只读部分(那些仅设置了 R(ead) 或 (e)X(ecute) 位的内存页)实际上在 2 个进程之间共享。对于可写的内存,只有当子进程尝试写入时,才会为子进程创建一个页面的私有副本。
-
man 2 vfork是有趣的历史理由。