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

标签 linux process linux-kernel pthreads

当我们调用 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/

相关文章:

linux - 如果失败则嵌套 - 伪代码示例

linux - 如何使用 shell 脚本找到离给定位置最近的网格点?

process - 进程调度上下文中调度程序和调度程序有什么区别

linux - 如何在 Linux 中注册设备

linux-kernel - 从 linux 内核模块访问串行端口

c++ - 带有嵌套 Actor 的 cluttermm 鼠标事件

linux - make modules_install 重启配置过程

Java杀死弹出进程

用fork创建进程

memory-management - 用于多个进程的内核驱动程序中的内存池