- 论坛徽章:
- 0
|
本帖最后由 我爱芒果叶 于 2014-03-17 21:50 编辑
arch/x86/kernel/process_32.c
asmlinkage int sys_clone(struct pt_regs regs)
{
unsigned long clone_flags;
unsigned long newsp;
int __user *parent_tidptr, *child_tidptr;
clone_flags = regs.ebx;
newsp = regs.ecx;
parent_tidptr = (int __user *)regs.edx;
child_tidptr = (int __user *)regs.edi;
if (!newsp)
newsp = regs.esp;
return do_fork(clone_flags, newsp, ®s, 0, parent_tidptr, child_tidptr);
}
《深入Linux内核架构》一书中这样说:在生成线程时,可能需要这样做,线程可能与父进程共享地址空间,但线程自身的栈可能在另一个地址空间。
求解释,线程与父进程共享地址空间,而栈在另外一个地址空间。什么情况下会如此?当栈在另外一个地址空间时,ecx仅仅是个32位的寄存器而已,它的值就可以指明在哪个地址空间吗? |
|