Volver al temario
Tema 03 · 54 páginas

La gestión de procesos

Tema completo Modo estudio
TEXTO ORIGINAL · Páginas 5152 Ver PDF

Solucionario

Texto íntegro de la conversión. Las figuras y la disposición de las notas se pueden consultar en el PDF.

Página 51

Solucionario

Ejercicios de autoevaluación

  1. El estado zombie es previo a la destrucción total del proceso mientras éste espera que el proceso padre, o en su defecto el proceso init, recoja el parámetro de finalización. Una vez recogido se acaban de liberar los recursos del proceso.

Figura 16

  1. Como la llamada crear_proceso obliga a cargar un nuevo ejecutable, es imposible que el hijo herede el código del proceso padre, por lo que no se puede especificar mediante el programa cómo se debe cambiar el entorno de entrada/salida del proceso hijo. En estas condiciones, con los parámetros de la llamada crear_proceso se debe poder especificar los dispositivos lógicos que se quieren asociar a los dispositivos virtuales estándares del proceso hijo. Por ejemplo:

crear_proceso(nombre_ejeecutable,fichero1,fichero2,fichero3,otros parámetros...)

donde fichero1 corresponde a la entrada estándar, fichero2 a la salida estándar y fichero3 a la salida de error. Si se quisiera hacer más flexible para permitir redireccionar cualquier dispositivo con cualquier modo de acceso, habría que incluir más parámetros.

  1. La salida se efectuará de la manera siguiente:

a) El ejecutable "primero" escribe "A" para la salida estándar.

b) Se cierra la salida estándar.

c) Se cambia de ejecutable. Se carga "segundo" y todo el código que el ejecutable "primero" tiene por debajo de la llamada exec desaparece, y no se ejecutará más.

d) El ejecutable "segundo" escribe "error" para la salida de error estándar, ya que está cerrada, tal como hemos comentado en el punto b.

e) El ejecutable "segundo" escribe un carácter indeterminado para la salida de error estándar, ya que la variable a del ejecutable "segundo" se ha creado en el momento de su carga, y no ha sido inicializada.

f) El ejecutable "segundo" escribe" B" para la salida de error estándar.

  1. Se han de guardar el contador de programa (a), que indica la próxima instrucción que se tiene que ejecutar, y el valor de los registros del procesador (e), que contienen, básicamente, valores parciales de los cálculos que se están llevando a cabo y el puntero a la última posición de la pila. Se deben guardar todos aquellos elementos dinámicos que configuran el punto de ejecución donde se encuentra el programa que contiene el proceso. El resto de los elementos, aunque configuran el entorno de ejecución, ya están guardados en el PCB, de manera que no hay que volver a guardarlos.

  2. La respuesta correcta es la e. Los procesos padre e hijo comparten los punteros de lectura/ escritura de los ficheros que el padre tiene abiertos en el momento de la creación del hijo. Así, las operaciones de lectura que haga cualquiera de los dos modifican el mismo puntero. Por otra parte, los dos procesos se ejecutan de manera concurrente y, por lo tanto, no podemos saber cuál de los dos efectuará primero la operación de lectura. Por este motivo se pueden dar las dos salidas.

Página 52

  1. La solución correcta es la b. La herencia de la llamada fork es de copia. Por lo tanto, el proceso hijo tendrá, una vez creado, una copia del mismo código y los mismos datos que el padre. A partir del momento de la creación, cada uno de ellos evolucionará independientemente y con sus variables.

  2. La respuesta correcta es la a. El proceso padre ejecuta el código A y después crea un proceso hijo que ejecuta el código B. A continuación, el padre crea un segundo proceso hijo que ejecuta de manera concurrente el código C. Una vez creados los dos hijos, el proceso padre espera a que sus dos procesos hijos hayan acabado, y ejecuta D.

Ver fragmento extraído sin normalizar
## Página 51

<!-- source-page: 51 -->

GNUFDL • PID_00214802                                                                                  51                                                                                                      La gestión de procesos

Solucionario

Ejercicios de autoevaluación

1. El estado zombie es previo a la destrucción total del proceso mientras éste espera que el
proceso padre, o en su defecto el proceso init, recoja el parámetro de finalización. Una vez
recogido se acaban de liberar los recursos del proceso.



























Figura 16

2. Como la llamada crear_proceso obliga a cargar un nuevo ejecutable, es imposible que el hijo
herede el código del proceso padre, por lo que no se puede especificar mediante el programa
cómo se debe cambiar el entorno de entrada/salida del proceso hijo. En estas condiciones, con
los parámetros de la llamada crear_proceso se debe poder especificar los dispositivos lógicos
que se quieren asociar a los dispositivos virtuales estándares del proceso hijo. Por ejemplo:

crear_proceso(nombre_ejeecutable,fichero1,fichero2,fichero3,otros parámetros...)

donde fichero1 corresponde a la entrada estándar, fichero2 a la salida estándar y fichero3 a la
salida de error. Si se quisiera hacer más flexible para permitir redireccionar cualquier dispo-
sitivo con cualquier modo de acceso, habría que incluir más parámetros.

3. La salida se efectuará de la manera siguiente:

a) El ejecutable "primero" escribe "A" para la salida estándar.

b) Se cierra la salida estándar.

c) Se cambia de ejecutable. Se carga "segundo" y todo el código que el ejecutable "primero"
tiene por debajo de la llamada exec desaparece, y no se ejecutará más.

d) El ejecutable "segundo" escribe "error" para la salida de error estándar, ya que está cerrada,
tal como hemos comentado en el punto b.

e) El ejecutable "segundo" escribe un carácter indeterminado para la salida de error estándar,
ya que la variable a del ejecutable "segundo" se ha creado en el momento de su carga, y no
ha sido inicializada.

f) El ejecutable "segundo" escribe" B" para la salida de error estándar.

4. Se han de guardar el contador de programa (a), que indica la próxima instrucción que se
tiene que ejecutar, y el valor de los registros del procesador (e), que contienen, básicamente,
valores parciales de los cálculos que se están llevando a cabo y el puntero a la última posición
de la pila. Se deben guardar todos aquellos elementos dinámicos que configuran el punto de
ejecución donde se encuentra el programa que contiene el proceso. El resto de los elementos,
aunque configuran el entorno de ejecución, ya están guardados en el PCB, de manera que
no hay que volver a guardarlos.

5. La respuesta correcta es la e. Los procesos padre e hijo comparten los punteros de lectura/
escritura de los ficheros que el padre tiene abiertos en el momento de la creación del hijo. Así,
las operaciones de lectura que haga cualquiera de los dos modifican el mismo puntero. Por
otra parte, los dos procesos se ejecutan de manera concurrente y, por lo tanto, no podemos
saber cuál de los dos efectuará primero la operación de lectura. Por este motivo se pueden
dar las dos salidas.

## Página 52

<!-- source-page: 52 -->

GNUFDL • PID_00214802                                                                                  52                                                                                                      La gestión de procesos

6. La solución correcta es la b. La herencia de la llamada fork es de copia. Por lo tanto, el
proceso hijo tendrá, una vez creado, una copia del mismo código y los mismos datos que el
padre. A partir del momento de la creación, cada uno de ellos evolucionará independiente-
mente y con sus variables.

7. La respuesta correcta es la a. El proceso padre ejecuta el código A y después crea un proceso
hijo que ejecuta el código B. A continuación, el padre crea un segundo proceso hijo que
ejecuta de manera concurrente el código C. Una vez creados los dos hijos, el proceso padre
espera a que sus dos procesos hijos hayan acabado, y ejecuta D.

Descargar Markdown originalEstudiar este apartado