PUERTA | PUERTA-CS-2005 | Pregunta 72

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. Pero en python3 v e y no serán iguales. Vea esto (para Python) y Vea esto  (para C).
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 *