2.3.1. La sincronizacion
Texto íntegro de la conversión. Las figuras y la disposición de las notas se pueden consultar en el PDF.
2.3.1. La sincronización
Un ejemplo en el que aparece la necesidad de sincronización entre procesos padre e hijo lo encontramos cuando exploramos las posibles modalidades de ejecución de los comandos: de primer plano, de fondo y diferidos. Si nos fijamos en las dos primeras modalidades se puede identificar un proceso padre, que es el que ejecuta el intérprete de comandos, y unos procesos hijos, que son los que ejecutan los comandos. Así pues, podemos ejecutar los comandos de las tres maneras siguientes:
-
En la modalidad de primer plano (foreground) el intérprete de comandos espera que finalice el comando antes de pedir un nuevo comando para ejecutar. En esta situación, el proceso padre debe esperar a que el proceso hijo finalice y para conseguirlo el SO tiene que proporcionar herramientas para congelar la ejecución del proceso padre hasta que el proceso hijo sea destruido.
-
En la modalidad de ejecución de segundo plano (background) el intérprete de comandos no espera a que finalice el comando, sino que inmediatamente después de crear el proceso que ejecutará el comando continúa adelante y pide un comando nuevo. En esta otra situación, el proceso padre sólo necesita que el sistema lo retenga mientras crea el nuevo proceso con el fin de devolverle el identificador del proceso si la creación se ha ejecutado correctamente o, en caso contrario, devolverle un error.
-
Una tercera posibilidad es la modalidad mixta, que consiste en una combinación de las dos modalidades anteriores. Entonces un proceso padre crea un proceso hijo en modalidad de segundo plano y, a partir de un cierto instante de su ejecución, decide esperar que finalice uno de sus procesos hijos. El SO debe proporcionar llamadas específicas de sincronización.
La figura siguiente muestra los tres modelos de ejecución:
Página 21
Figura 5
Como consecuencia de la sincronización entre los procesos padre e hijo, el sistema puede ofrecer los siguientes modelos de llamadas al sistema:
a) Introducir un parámetro, modo_ejecución, que indique si el proceso padre ha de esperar la destrucción del hijo o no.
-
Id_proceso = crear_proceso(modo_ejecución,entorno_memoria, nombre_programa,punto_ejecución,entorno_E/S,entorno_dominio).
-
Estado = destruir_proceso(id_proceso).
b) Hay que conseguir que para crear nunca sea necesaria la finalización de un proceso y se pueda proporcionar una llamada específica que permita llevar a cabo esta función.
-
Id_proceso = crear_proceso(entorno_memoria,nombre_programa, punto_ejecución,entorno_E/S,entorno_dominio).
-
Estado = destruir_proceso(id_proceso).
-
Estado = esperar_finalización(id_proceso).
El parámetro de la llamada esperar_finalización puede ser de entrada o de salida. En el primer caso, sirve para indicar el proceso concreto con el que se quiere sincronizar. En el segundo caso, puede servir para esperar a cualquiera de los hijos. La llamada esperará hasta que alguno de los hijos del proceso que la in-
Notas y pies de figura de la fuente
(9)En algunos sistemas también se incluye el caso en el que el proceso hijo, a pesar de estar todavía vivo, ha sido detenido por algún motivo.
Página 22
voca haya terminado9. En el momento en el que un proceso hijo haya acabado la llamada a sistema le devolverá el control al proceso padre, que recibirá el identificador del proceso hijo terminado con su estado de finalización.
Ver fragmento extraído sin normalizar
2.3.1. La sincronización
Un ejemplo en el que aparece la necesidad de sincronización entre procesos
padre e hijo lo encontramos cuando exploramos las posibles modalidades de
ejecución de los comandos: de primer plano, de fondo y diferidos. Si nos fija-
mos en las dos primeras modalidades se puede identificar un proceso padre,
que es el que ejecuta el intérprete de comandos, y unos procesos hijos, que
son los que ejecutan los comandos. Así pues, podemos ejecutar los comandos
de las tres maneras siguientes:
1) En la modalidaddeprimerplano (foreground) el intérprete de comandos
espera que finalice el comando antes de pedir un nuevo comando para ejecu-
tar. En esta situación, el proceso padre debe esperar a que el proceso hijo fina-
lice y para conseguirlo el SO tiene que proporcionar herramientas para conge-
lar la ejecución del proceso padre hasta que el proceso hijo sea destruido.
2) En la modalidaddeejecucióndesegundoplano (background) el intérprete
de comandos no espera a que finalice el comando, sino que inmediatamente
después de crear el proceso que ejecutará el comando continúa adelante y pide
un comando nuevo. En esta otra situación, el proceso padre sólo necesita que
el sistema lo retenga mientras crea el nuevo proceso con el fin de devolverle
el identificador del proceso si la creación se ha ejecutado correctamente o, en
caso contrario, devolverle un error.
3) Una tercera posibilidad es la modalidadmixta, que consiste en una combi-
nación de las dos modalidades anteriores. Entonces un proceso padre crea un
proceso hijo en modalidad de segundo plano y, a partir de un cierto instante
de su ejecución, decide esperar que finalice uno de sus procesos hijos. El SO
debe proporcionar llamadas específicas de sincronización.
La figura siguiente muestra los tres modelos de ejecución:
## Página 21
<!-- source-page: 21 -->
GNUFDL • PID_00214802 21 La gestión de procesos
Figura 5
Como consecuencia de la sincronización entre los procesos padre e hijo, el
sistema puede ofrecer los siguientes modelos de llamadas al sistema:
a) Introducir un parámetro, modo_ejecución, que indique si el proceso padre
ha de esperar la destrucción del hijo o no.
• Id_proceso = crear_proceso(modo_ejecución,entorno_memoria,
nombre_programa,punto_ejecución,entorno_E/S,entorno_dominio).
• Estado = destruir_proceso(id_proceso).
b) Hay que conseguir que para crear nunca sea necesaria la finalización de un
proceso y se pueda proporcionar una llamada específica que permita llevar a
cabo esta función.
• Id_proceso = crear_proceso(entorno_memoria,nombre_programa,
punto_ejecución,entorno_E/S,entorno_dominio).
• Estado = destruir_proceso(id_proceso).
• Estado = esperar_finalización(id_proceso).
El parámetro de la llamada esperar_finalización puede ser de entrada o de salida. (9)En algunos sistemas también se
En el primer caso, sirve para indicar el proceso concreto con el que se quiere incluye el caso en el que el proceso
hijo, a pesar de estar todavía vivo,
sincronizar. En el segundo caso, puede servir para esperar a cualquiera de los ha sido detenido por algún moti-
hijos. La llamada esperará hasta que alguno de los hijos del proceso que la in- vo.
## Página 22
<!-- source-page: 22 -->
GNUFDL • PID_00214802 22 La gestión de procesos
voca haya terminado9. En el momento en el que un proceso hijo haya acabado
la llamada a sistema le devolverá el control al proceso padre, que recibirá el
identificador del proceso hijo terminado con su estado de finalización.