Considere el siguiente fragmento de código:
if (fork() == 0) { a = a + 5; printf("%d,%d\n", a, &a); } else { a = a –5; printf("%d, %d\n", a, &a); }
Sean u, v los valores impresos por el proceso padre y x, y los valores impresos por el proceso hijo. ¿Cuál de las siguientes es VERDADERA?
(A) u = x + 10 y v = y
(B) u = x + 10 y v != y
(C) u + 10 = x y v = y
(D) u + 10 = x y v != y
Respuesta: (C)
Explicación: fork() devuelve 0 en el proceso secundario y el ID del proceso secundario en el proceso principal.
En Hijo (x), a = a + 5
En Padre (u), a = a – 5;
Por lo tanto x = u + 10.
Las direcciones físicas de ‘a’ en padre e hijo deben ser diferentes. Pero nuestro programa accede a direcciones virtuales (asumiendo que estamos ejecutando un sistema operativo que usa memoria virtual). El proceso secundario obtiene una copia exacta del proceso principal y la dirección virtual de ‘a’ no cambia en el proceso secundario. Por lo tanto, obtenemos las mismas direcciones tanto en el padre como en el hijo. ver esto ejecutar por ejemplo.
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA