【问题标题】:Does fork() in linux copy all the parent's memory pages to the child?linux中的fork()是否将所有父级的内存页面复制到子级?
【发布时间】:2016-04-04 10:39:59
【问题描述】:

我读过关于写时复制的内容,但我不明白。这是否意味着在子进程写入内容之前不会复制内存页面?

【问题讨论】:

  • 直到子进程或父进程向共享页面写入内容。或者直到孩子或父母做exec()...
  • 只有在父母或孩子修改了其中的内容后,才会复制页面。

标签: linux unix operating-system


【解决方案1】:

只要没有对子内存页执行写操作,它们对于用户进程就等同于父内存页。因此,只要页面不被写入,它就可以用于父子节点。

但是,如果执行写入操作,则父版本和子版本不同。此时,父页面被复制并分配给子页面以代替父页面。此副本称为“写时复制”,因为该副本是在页面被写入时执行的。

请注意,“写入时复制”只是对forking 操作的优化。一个简单的实现只是立即为子级复制父级的页面。通过注意到尚未写入的页面不需要复制,该复制被推迟到孩子真正写了一些东西(术语“懒惰”通常用于延迟),这可能根本不会发生。

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 2011-08-02
    • 2018-06-14
    • 2020-03-19
    • 2015-08-14
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多