Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 系统调用fork如何返回两个不同的值?_Operating System_Fork - Fatal编程技术网

Operating system 系统调用fork如何返回两个不同的值?

Operating system 系统调用fork如何返回两个不同的值?,operating-system,fork,Operating System,Fork,我正在学习一门操作系统课程,并为其中一个课程项目实现fork 代码基本上是这样的 1.查找未使用的进程 2.复制虚拟地址数据 3.在活页夹框架上复制 4.将返回值寄存器(rax)设置为0 5.将子进程设置为可运行 6.返回子进程的pid 所以我的问题是,既然子进程与父进程完全相同,就不会知道它在哪里(第4行)?然后继续执行fork(第5行和第6行),并最终返回它自己的pid。子进程是它的父进程的(几乎)精确副本。父级的内存内容在创建时复制到子级 但是,子对象有自己的堆栈。由于返回值在堆栈上传递,

我正在学习一门操作系统课程,并为其中一个课程项目实现fork

代码基本上是这样的

1.查找未使用的进程 2.复制虚拟地址数据 3.在活页夹框架上复制 4.将返回值寄存器(rax)设置为0 5.将子进程设置为可运行 6.返回子进程的pid

所以我的问题是,既然子进程与父进程完全相同,就不会知道它在哪里(第4行)?然后继续执行fork(第5行和第6行),并最终返回它自己的pid。

子进程是它的父进程的(几乎)精确副本。父级的内存内容在创建时复制到子级

但是,子对象有自己的堆栈。由于返回值在堆栈上传递,fork()可以返回两个不同的值,每个进程一个