【问题标题】:forking in linux about COW在 linux 中分叉关于 COW
【发布时间】:2016-01-19 07:49:32
【问题描述】:

在linux中,我知道它是由COW实现的,因为浪费。但是,书中说,当孩子在 fork() 之后立即调用 exec() 时,永远不会复制地址空间。 但我认为如果孩子使用 exec(),这意味着在尚未复制的地址空间中制作新的数据或代码。所以当 exec() 被调用时,地址空间被复制(Copy on Write),新的数据或代码被写入这里。

我错了吗?为什么 exec() 调用从不复制父级的东西?

或者如果child调用exec(),那么child只是创建自己的mm_struct并在自己新创建的地址空间中写入新数据?(不是从父复制)

【问题讨论】:

    标签: linux process fork copy-on-write


    【解决方案1】:

    exec 是 execve 内核调用的库包装器。在 execve 开始之前会有一些堆栈活动(即使直接调用 execve),所以在 exec 与进程上下文断开连接之前,在写入时将至少复制一个堆栈块。

    同时,在子进程断开连接之前,父进程将在写入时进行大量复制。

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 2022-01-21
      • 2022-01-25
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2020-11-30
      • 1970-01-01
      相关资源
      最近更新 更多