Sistemas Operativos | Gestión de Procesos | Pregunta 6

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *