4.1.1. La creacion y la destruccion de procesos
Texto íntegro de la conversión. Las figuras y la disposición de las notas se pueden consultar en el PDF.
4.1.1. La creación y la destrucción de procesos
Las correspondencias entre las llamadas de UNIX y las vistas en este módulo son:
Operación
Crear_proceso
Destruir_proceso
Esperar_finalización
Cargar_imagen
Quiensoy
UNIX ha optado por tratar el tema de la creación y la destrucción de procesos de la manera más sencilla posible. Las llamadas que ofrecen tienen el mínimo número posible de parámetros, y crean y destruyen los procesos a partir de una definición implícita en el sistema. A posteriori, y definiéndolo por programa, el usuario puede cambiar el entorno de ejecución y hacer el proceso a su medida. A continuación veremos cómo actúa cada una de las llamadas vistas en este módulo en el sistema operativo UNIX:
Notas y pies de figura de la fuente
Llamadas de UNIX fork exit wait exec (execl, execlp, execle, execv, execvp, execve) getpid Creación y destrucción de procesos En UNIX, la creación y destrucción de procesos se ajusta a la filosofía general del sistema de ofrecer herramientas de utilización sencilla que permitan desarrollar cualquier política que se necesite.
Página 30
Figura 9
- La llamada fork no tiene ningún parámetro y crea un nuevo proceso hijo que es un duplicado del proceso padre. En general, el PCB del hijo es una copia del PCB del padre; el espacio de memoria del proceso hijo es una copia del espacio del padre y las entradas de la tabla de files descriptors apuntan a las mismas entradas de la tabla de punteros de lectura/escritura. El proceso hijo pertenece al mismo usuario y grupo de usuarios que el padre. Los dos procesos continúan la ejecución de manera independiente en el punto posterior a la llamada fork en el sistema.
Normalmente después de hacer la llamada fork el proceso hijo ha de ejecutar un código diferente del código del padre. Para poder distinguirse, la llamada fork devuelve valores diferentes en función de si es el proceso padre o el hijo: el hijo recibe un valor 0 y el padre recibe el identificador (PID) del hijo.
Durante la creación de un nuevo proceso, UNIX controla los aspectos importantes que afectan al conjunto del sistema, como la disponibilidad de recursos11. Un ejemplo concreto de este control es el hecho de que no permite que un usuario normal (no procesos de sistema) ocupe la última entrada de la tabla de procesos, la última área de memoria libre, etc. Si eso sucediera, el sistema quizá no se podría recuperar de situaciones en las que sería necesario poner en marcha algún proceso del sistema de manera urgente. Por ejemplo, si se tuviera que parar rápidamente el sistema, podría ser catastrófico no poder poner en marcha el proceso de parada del sistema (shutdown).
Notas y pies de figura de la fuente
(11)Los recursos del sistema son la memoria, las entradas en la tabla de PCB, etc.
Página 31
- La llamada exit destruye un proceso. La destrucción de un proceso mediante esta llamada es idéntica a la que hemos explicado en el caso de la creación y la destrucción de procesos. El proceso que la ejecuta es destruido por el sistema. Con el fin de notificar el estado de finalización se pasa al sistema
operativo un parámetro que el proceso padre podrá recoger mediante la llamada wait.
- La llamada wait bloquea12 el proceso que la ha llamado hasta que alguno de sus procesos hijos haya sido destruido. Cuando esto sucede, el sistema le devuelve el PID del proceso destruido y, como parámetro de salida, el estado en el que ha finalizado. Combinando las tres llamadas presentadas en este subapartado, el intérprete de comandos puede ejecutar comandos en las modalidades de primer plano y de fondo (podéis ver la figura 10). UNIX guarda el estado de finalización de los procesos destruidos en su PCB y espera que su proceso padre lo recoja mediante la llamada wait. Por este motivo, UNIX no libera el PCB de un proceso en el momento de su destrucción13.
Los procesos esperan en un estado especial denominado zombie hasta que se ejecuta la llamada wait que permitirá eliminarlos definitivamente. Para evitar la acumulación de procesos en estado zombie se han previsto dos mecanismos:
-
Cada usuario sólo puede tener en un instante determinado un cierto número de procesos activos, incluidos los zombies.
-
Los procesos que son destruidos más tarde que sus procesos padre pasan a ser considerados hijos del primer proceso del sistema14, que es el encargado de recoger su estado de finalización.
Figura 10
Notas y pies de figura de la fuente
Ved también Podéis ver la destrucción de procesos en el subapartado 2.1 de este módulo didáctico. (12)Existen otras variantes, como waitpid y waitid, que permiten un control más fino sobre el proceso al que se quiere esperar o los tipos de cambios de estado que se desean monitorizar. (13)Cuando se destruye un proceso se liberan todos los recursos excepto el PCB: se libera memoria, se cierran los canales de entrada/salida, etc. (14)El primer proceso del sistema se llama init y tiene un PID igual a uno.
Página 32
Ver fragmento extraído sin normalizar
4.1.1. La creación y la destrucción de procesos
Las correspondencias entre las llamadas de UNIX y las vistas en este módulo
son:
Operación Llamadas de UNIX
Crear_proceso fork
Destruir_proceso exit
Esperar_finalización wait
Cargar_imagen exec (execl, execlp, execle, execv, execvp, execve)
Quiensoy getpid
UNIX ha optado por tratar el tema de la creación y la destrucción de procesos Creación y destrucción de
de la manera más sencilla posible. Las llamadas que ofrecen tienen el mínimo procesos
número posible de parámetros, y crean y destruyen los procesos a partir de una En UNIX, la creación y destruc-
definición implícita en el sistema. A posteriori, y definiéndolo por programa, ción de procesos se ajusta a la
filosofía general del sistema de
el usuario puede cambiar el entorno de ejecución y hacer el proceso a su me- ofrecer herramientas de utili-
dida. A continuación veremos cómo actúa cada una de las llamadas vistas en zación sencilla que permitan
desarrollar cualquier política
este módulo en el sistema operativo UNIX: que se necesite.
## Página 30
<!-- source-page: 30 -->
GNUFDL • PID_00214802 30 La gestión de procesos
Figura 9
1) La llamadafork no tiene ningún parámetro y crea un nuevo proceso hijo
que es un duplicado del proceso padre. En general, el PCB del hijo es una copia
del PCB del padre; el espacio de memoria del proceso hijo es una copia del
espacio del padre y las entradas de la tabla de files descriptors apuntan a las
mismas entradas de la tabla de punteros de lectura/escritura. El proceso hijo
pertenece al mismo usuario y grupo de usuarios que el padre. Los dos procesos
continúan la ejecución de manera independiente en el punto posterior a la
llamada fork en el sistema.
Normalmente después de hacer la llamada fork el proceso hijo ha de ejecutar
un código diferente del código del padre. Para poder distinguirse, la llamada
fork devuelve valores diferentes en función de si es el proceso padre o el hijo:
el hijo recibe un valor 0 y el padre recibe el identificador (PID) del hijo.
Durante la creación de un nuevo proceso, UNIX controla los aspectos impor- (11)Los recursos del sistema son la
tantes que afectan al conjunto del sistema, como la disponibilidad de recur- memoria, las entradas en la tabla
de PCB, etc.
sos11. Un ejemplo concreto de este control es el hecho de que no permite que
un usuario normal (no procesos de sistema) ocupe la última entrada de la tabla
de procesos, la última área de memoria libre, etc. Si eso sucediera, el sistema
quizá no se podría recuperar de situaciones en las que sería necesario poner
en marcha algún proceso del sistema de manera urgente. Por ejemplo, si se
tuviera que parar rápidamente el sistema, podría ser catastrófico no poder po-
ner en marcha el proceso de parada del sistema (shutdown).
## Página 31
<!-- source-page: 31 -->
GNUFDL • PID_00214802 31 La gestión de procesos
2) La llamadaexit destruye un proceso. La destrucción de un proceso me- Ved también
diante esta llamada es idéntica a la que hemos explicado en el caso de la crea-
ción y la destrucción de procesos. El proceso que la ejecuta es destruido por Podéis ver la destrucción de
procesos en el subapartado 2.1
el sistema. Con el fin de notificar el estado de finalización se pasa al sistema de este módulo didáctico.
operativo un parámetro que el proceso padre podrá recoger mediante la lla-
mada wait.
3) La llamadawait bloquea12 el proceso que la ha llamado hasta que alguno (12)Existen otras variantes, como
de sus procesos hijos haya sido destruido. Cuando esto sucede, el sistema le waitpid y waitid, que permiten un
control más fino sobre el proce-
devuelve el PID del proceso destruido y, como parámetro de salida, el estado so al que se quiere esperar o los ti-
pos de cambios de estado que se
en el que ha finalizado. Combinando las tres llamadas presentadas en este desean monitorizar.
subapartado, el intérprete de comandos puede ejecutar comandos en las mo-
(13)Cuando se destruye un proce-
dalidades de primer plano y de fondo (podéis ver la figura 10).
so se liberan todos los recursos ex-
cepto el PCB: se libera memoria, se
UNIX guarda el estado de finalización de los procesos destruidos en su PCB y cierran los canales de entrada/sali-
da, etc.
espera que su proceso padre lo recoja mediante la llamada wait. Por este mo-
tivo, UNIX no libera el PCB de un proceso en el momento de su destrucción13.
Los procesos esperan en un estado especial denominado zombie hasta que se
ejecuta la llamada wait que permitirá eliminarlos definitivamente. Para evitar
la acumulación de procesos en estado zombie se han previsto dos mecanismos:
1) Cada usuario sólo puede tener en un instante determinado un cierto nú-
mero de procesos activos, incluidos los zombies.
2) Los procesos que son destruidos más tarde que sus procesos padre pasan a (14)El primer proceso del sistema
ser considerados hijos del primer proceso del sistema14, que es el encargado de se llama init y tiene un PID igual a
uno.
recoger su estado de finalización.
Figura 10
## Página 32
<!-- source-page: 32 -->
GNUFDL • PID_00214802 32 La gestión de procesos