gpt4 book ai didi

linux - 调用fork后什么时候创建用户空间栈?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:18 24 4
gpt4 key购买 nike

当我们调用 fork() 时。它调用系统调用 clone,后者调用 do_fork 函数,并在该函数内部调用 copy_processcopy_process 调用 dup_task_struct 为新进程创建新的内核堆栈、新的 task_struct、新的 thread_info。如果 exec 调用它创建新进程。

But when does user space stack created in this sequence of creating process? I have same question for thread.

Does user space stack also has pointer to task_struct or thread_info type of structure ?

如果我问了一些愚蠢的问题,请帮助我并纠正我。

最佳答案

在 fork() 中,没有创建用户栈。用户堆栈由 mm_struct 的 vm_area_struct 表示。 do_fork 调用 copy_mm,仅当未设置 CLONE_VM 标志时,它才会复制调用 fork 的新进程 mm_struct。如果设置,在线程创建的情况下,它只是增加 mm_user 的计数,新任务 mm 指向当前任务 mm。

只有当exec被调用时do_execve被调用whic调用bprm_mm_init,allocate_mm被调用从mm_cachep slab分配(当然内存也需要复制mm用于新进程),然后mm_init初始化mm结构并分配页全局目录的内存。

然后调用 __bprm_mm_init 创建用户空间栈,即栈的 vm_area_struct 结构

关于linux - 调用fork后什么时候创建用户空间栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33505708/

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