gpt4 book ai didi

linux - 为什么在 fork 后立即调用 exec() 的子进程不需要父地址空间的单独副本?

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:40 25 4
gpt4 key购买 nike

我正在阅读 Robert Love 的“Linux 内核开发,第二版”。 (是的,它有点过时了)。我从第 3 章:进程管理中了解到,在 COW(写时复制)中,父进程和子进程共享父进程的地址空间,直到其中一个进程写入地址空间。这是为了防止父地址空间甚至没有被写入时不必要的重复。

但是,它提到如果子进程在 fork() 之后立即调用 exec(),则不需要复制父进程的地址空间和页面并作为单独的副本给 child 。那就是我迷路的地方。

根据手册,“exec() 系列函数用新的过程镜像替换了当前的过程镜像。”手册没有说明任何关于 exec() 为新的进程镜像创建新的地址空间。因此,如果子进程与其父进程共享地址空间,这是否意味着 exec() 会将可执行镜像加载到父进程的地址空间(与子进程共享)?

因为这意味着父进程的地址空间将被覆盖,我不明白在 fork() 之后执行 exec() 的子进程如何不需要要写入的其父地址空间的单独副本。我在这里遗漏了什么吗?

最佳答案

写时复制机制意味着,子进程中的任何修改都不会影响父进程

子进程调用 exec 也不异常(exception):它只改变子进程的地址空间,而不是父进程。

关于linux - 为什么在 fork 后立即调用 exec() 的子进程不需要父地址空间的单独副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37695684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com