📜  操作系统 |流程管理 |问题 6

📅  最后修改于: 2022-05-13 01:56:11.771000             🧑  作者: Mango

操作系统 |流程管理 |问题 6

考虑以下代码片段:

if (fork() == 0)
{ a = a + 5; printf("%d,%d\n", a, &a); }
else { a = a –5; printf("%d, %d\n", a, &a); } 

设 u, v 是父进程打印的值,x, y 是子进程打印的值。以下哪一项是正确的?

(A) u = x + 10 和 v = y
(B) u = x + 10 和 v != y
(C) u + 10 = x 和 v = y
(D) u + 10 = x 和 v != y答案: (C)
说明: fork() 在子进程中返回 0,在父进程中返回子进程的进程 ID。
在子 (x) 中,a = a + 5
在父 (u) 中,a = a – 5;
因此 x = u + 10。
parent 和 child 中 'a' 的物理地址必须不同。但是我们的程序访问虚拟地址(假设我们在使用虚拟内存的操作系统上运行)。子进程获得父进程的精确副本,并且“a”的虚拟地址在子进程中不会改变。因此,我们在父级和子级中获得相同的地址。例如,请参阅此运行。
这个问题的测验