Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de procesos
Teodor Jov Lagunas
Josep Llus Marzo i Lzaro
P05/75097/00809
Mdulo 6
La gestin de procesos
La gestin de procesos
ndice
Introduccin.............................................................................................
Objetivos ....................................................................................................
La gestin de procesos
Introduccin
Este mdulo didctico se centra en el estudio de la vida de los procesos desde
el punto de vista de las llamadas al sistema que permiten manipularlos. As
pues, en lugar de ver como ya se hizo en esta asignatura la creacin de ficheros ejecutables y los mecanismos del sistema para comunicarse con los programas (las llamadas), ahora nos centraremos en el estudio de las operaciones
que permiten gestionar los procesos, en concreto en las que permiten crearlos, destruirlos y modificarlos. Antes de nada, sera necesario que profundizsemos brevemente en el concepto de proceso, que ya se ha presentado en esta
asignatura, y en la gestin interna de los procesos que lleva a cabo el sistema
operativo (SO).
Objetivos
Los materiales didcticos de este mdulo contienen las herramientas necesarias para alcanzar los siguientes objetivos:
1. Entender el concepto de proceso como objeto gestionado por el SO.
2. Conocer las diferentes partes que componen un proceso y ver cmo se representa este proceso en el interior del sistema.
3. Entender los estados en que puede encontrarse un proceso y los motivos
por los cuales un proceso puede cambiar de estado.
4. Saber qu es el ciclo de vida de los procesos y conocer las relaciones entre
procesos.
5. Comprender el concepto de herencia y ver qu repercusiones tiene la herencia en la creacin de procesos.
6. Conocer las diferentes posibilidades que nos ofrece el hecho de poder cambiar algunos de los elementos que componen los procesos, sobre todo en
relacin con los redireccionamientos.
7. Entender el concepto de seal de software y estudiar su relacin con la destruccin de procesos.
La gestin de procesos
La gestin de procesos
cesarios para ejecutar programas. Desde el punto de vista del SO, un proceso es un objeto ms que hay que gestionar y al cual hay que dar servicio.
Para gestionar los procesos y darles servicios, el sistema operativo tiene que
proporcionar herramientas o tiene que llevar a cabo acciones que permitan
conseguir los siguientes objetivos:
Crear y eliminar procesos.
Garantizar que los procesos dispongan de los recursos necesarios para
avanzar en su ejecucin.
Actuar en casos excepcionales durante la ejecucin del proceso*.
Proporcionar los mecanismos necesarios para que los procesos se comuni-
* Consideramos casos
excepcionales sucesos como
las interrupciones, los errores, etc.
quen, ya sea para intercambiar informacin, ya sea para sincronizarse durante la ejecucin.
Mantener estadsticas sobre el funcionamiento de los procesos.
Temporizar la ejecucin de un proceso: hacer que un proceso se ejecute
cada cierto tiempo.
Otros servicios miscelneos.
En este apartado realizamos una introduccin a la gestin que el SO lleva a
cabo sobre los procesos. Veremos las estructuras de datos que representan internamente un proceso y la forma como pueden ejecutarse concurrentemente
varios procesos en un nico procesador.
La gestin de procesos
en el sistema y que, por tanto, tiene que ser distinguido individualmente. Por
lo general, este identificador es numrico.
2) El estado del proceso. Este campo indica el estado del proceso en el momento actual, dentro de unas posibilidades determinadas (run, ready, wait, etc.). El
estado de un proceso y su significado aparecen descritos ms adelante.
6) Contabilidad y estadsticas. El sistema operativo obtiene para cada proceso una serie de informacin relativa al comportamiento de cada usuario. Esta
informacin tiene un gran valor para los administradores de sistema, pero no
demasiado para los usuarios o los programadores.
7) El estado de los dispositivos de entrada/salida. Los dispositivos de entrada/salida asignados, las solicitudes pendientes, los ficheros abiertos, etc. tambin forman parte del entorno de ejecucin.
8) El dominio de proteccin. Este campo contiene informacin de los dominios a los cuales pertenece el proceso y de los derechos que tienen asociados.
10) Otras informaciones. Cada sistema operativo mantiene otras informaciones particulares en funcin de diferentes aspectos, como por ejemplo el fabricante del sistema operativo, el tipo de orientacin* y el tipo de explotacin**.
De acuerdo con los PCB, el sistema gestiona la ejecucin de los programas contenidos en la memoria de los procesos. En los siguientes subapartados analizaremos los principales componentes de esta gestin teniendo en cuenta las
necesidades de un sistema multiprogramado.
La gestin de procesos
10
La gestin de procesos
11
La gestin de procesos
2) El gestor le asigna la CPU (3) y el proceso empieza a ejecutar sus instrucciones y pasa al estado run.
Del estado run se puede salir por los tres motivos que presentamos a continuacin:
1) El proceso ejecuta la ltima lnea de cdigo y acaba (4).
3) Cuando el sistema operativo trabaja en la modalidad de tiempo compartido, si el proceso supera la cuota mxima de tiempo de uso de CPU que tiene
asignada (6), deja el procesador y vuelve al estado ready.
Cuando un proceso sale del estado run para pasar a ready o wait, se produce un
cambio de contexto, como se ha indicado en el subapartado anterior.
Figura 2
Finalmente, los procesos tienen dos destinos posibles tras salir del estado wait:
1) Uno hacia el estado ready, cuando finaliza la operacin por la cual esperaban
(7) o, dicho de otro modo, cuando el proceso tiene suficiente informacin y puede continuar. Por ejemplo, si el proceso estaba pendiente de una operacin de entrada/salida y ya ha llegado la informacin esperada porque el usuario ha pulsado
una tecla.
12
2) Otro, hacia la finalizacin del proceso (8), debida a un acontecimiento externo al propio proceso, como suceda en el estado ready.
Para saber qu hace cada uno de los procesos y as poder controlar sus recursos,
el sistema operativo mantiene unas colas de procesos en funcin de su estado.
As, el sistema tiene una cola de procesos preparados (ready) y una de procesos
en estado de espera (wait). No podemos hablar de una cola de procesos en ejecucin, ya que en entornos monoprocesador slo hay un proceso en ejecucin. De este modo, el procedimiento del ncleo del SO que se encarga de la
planificacin del procesador puede examinar la lista de procesos preparados
para asignar el procesador al proceso que resulte ms conveniente.
Figura 3
La gestin de procesos
13
La gestin de procesos
Como hemos ido viendo en esta asignatura, los procesos constituyen uno ms
de los objetos que gestiona el SO. A diferencia de muchos otros objetos, los
procesos son dinmicos y suelen tener un tiempo de vida limitado*. En este
apartado analizaremos el ciclo de vida de los procesos y las operaciones que se
relacionan con stos.
Los procesos son elementos dinmicos que se crean, operan durante un intervalo de tiempo y se destruyen. El sistema es el encargado de proporcionar el
conjunto de llamadas necesarias para llevar a cabo todas estas acciones. En
este subapartado analizaremos las operaciones de creacin y destruccin de
procesos.
1) Creacin de procesos
14
La ejecucin de la llamada crear_proceso comporta la creacin de un entorno de ejecucin que contiene los siguientes elementos:
La memoria donde residirn el programa, el cdigo y los datos con que
operar el proceso.
El punto de entrada desde donde se ejecutar el programa que contenga la
memoria.
El entorno de entrada/salida con el cual el proceso se comunicar con el exterior.
Los atributos relacionados con los dominios de proteccin con los que el sistema operativo verificar la legalidad de las operaciones que quiera efectuar.
Figura 4
Cada uno de estos elementos del entorno se tendr que especificar en el sistema para que ste pueda crear un proceso nuevo. La especificacin de estos elementos se puede realizar de las dos formas siguientes:
a) De manera explcita, con los parmetros de la llamada al sistema que crea
el proceso.
b) De manera implcita, haciendo que el sistema tome unos valores por defecto.
Normalmente, los sistemas combinan las dos alternativas: obligan a especificar algunos de estos elementos mediante los parmetros de la llamada, y dejan
otros con valores por defecto.
Otro aspecto que hay que tener en cuenta es la relacin que se establece entre
el entorno desde donde se ejecuta la llamada al sistema que dar lugar al nuevo proceso y el nuevo entorno que se crear. Para ver esta relacin con una
mayor claridad partimos del hecho ya mencionado de que los procesos son
creados por el sistema operativo a peticin de otros procesos. Esta situacin
hace que los procesos se puedan ver desde el punto de vista de la descenden-
La gestin de procesos
15
La gestin de procesos
cia, en la que los procesos mantienen relaciones de parentesco como la de padre e hijo. En este mbito podemos hablar de los conceptos de herencia entre
procesos y sincronizacin entre procesos padre e hijo.
Tras haber creado el proceso, el sistema le otorga un nombre (generalmente
un nombre dentro de un espacio lineal) mediante el cual se podr referenciar
en acciones de control y manipulacin, tanto desde otros procesos como directamente desde el SO. Este nombre tiene que ser nico para cada proceso,
no slo durante la vida del proceso al que hace referencia, sino durante toda
la vida del sistema.
La finalidad del sistema de tener un nombre nico para cada proceso durante
toda la vida del sistema es evitar confusiones y malos funcionamientos del SO
a causa de la reutilizacin de nombres. Por ejemplo, imaginemos dos procesos
(proceso A y proceso B) que colaboran y se sincronizan mediante seales gracias al hecho de que conocen sus identificadores. Si uno (el proceso B) acaba
de manera imprevista y su indentificador es reutilizado para crear otro proceso, entonces el proceso A se est sincronizando con un proceso que tiene un
identificador B, que no es el proceso con el que se haba previsto una comuni-
cacin. El resultado es que quiz ninguno de los dos procesos funcione correctamente o, lo que todava es ms problemtico, que se haya abierto un agujero
en la proteccin del sistema.
Con esta solucin, si el punto de ejecucin del proceso hijo fuese una copia del
del padre, como ya habamos comentado, el valor de retorno de crear_proceso
tendra que ser diferente en funcin de si el proceso es el padre o el hijo.
2) Destruccin de procesos
16
La gestin de procesos
La herencia entre procesos es la relacin que se establece entre los diferentes elementos que configuran el entorno del proceso padre y los que
configuran el entorno del proceso hijo.
17
La gestin de procesos
18
La gestin de procesos
19
La gestin de procesos
creacin de un hijo. Los procesos padre pueden tener que sincronizar su ejecucin con la finalizacin de los procesos que han creado y, al mismo tiempo,
necesitan conocer el estado en que se ha producido esta finalizacin.
2.3.1. La sincronizacin
Ya vimos un ejemplo de la necesidad de sincronizacin entre procesos padre
e hijo cuando hablbamos de las modalidades de ejecucin de las rdenes: de
primer plano, de fondo y diferidas. Si nos fijamos en las dos primeras
modalidades, se puede identificar un proceso padre, que es el que ejecuta el
intrprete de rdenes, y unos procesos hijos, que son los que ejecutan las rdenes. As pues, podemos ejecutar las rdenes de estas tres formas:
1) En la modalidad de primer plano, el intrprete de rdenes espera que finalice la orden antes de solicitar una nueva orden para ejecutar. En esta situacin, el proceso padre tiene que esperar a que el proceso hijo finalice y, para
20
conseguirlo, el SO debe proporcionar las herramientas para congelar la ejecucin del proceso padre hasta que el proceso hijo sea destruido.
2) En la modalidad de ejecucin de fondo, el intrprete de rdenes no espera a que finalice la orden, sino que inmediatamente despus de haber creado
el proceso que ejecutar la orden, contina adelante y solicita una orden nueva. En esta otra situacin, el proceso padre slo necesita que el sistema lo retenga mientras crea el nuevo proceso, con el fin de retornarle el identificador
del proceso si la creacin se ha ejecutado de manera correcta o, en caso contrario, retornarle un error.
3) Una tercera posibilidad es la modalidad mixta, que consiste en una combinacin de las dos modalidades anteriores. Entonces un proceso padre crea
un proceso hijo en modalidad de fondo y, a partir de un determinado instante
de su ejecucin, decide esperar a que finalice uno de sus procesos hijos. El SO
tiene que proporcionar llamadas especficas de sincronizacin.
La figura que podemos ver a continuacin muestra los tres modelos de ejecucin:
Figura 5
Como consecuencia de la sincronizacin entre los procesos padre e hijo, el sistema puede ofrecer los siguientes modelos de llamadas al sistema:
a) Introducir un parmetro, modo_ejecucin, que indique si el proceso padre
tiene que esperar la destruccin del hijo o no.
La gestin de procesos
21
El sistema operativo debe proporcionar una llamada que permita a los procesos padres recuperar los parmetros de finalizacin de sus procesos hijos; esta
llamada suele ser la misma que les permite sincronizarse con la finalizacin
del proceso hijo: esperar_finalizacin.
La gestin de procesos
22
La gestin de procesos
tructura del espacio de la memoria en el marco del cambio de imagen, y profundizaremos en aquellas otras que cambian el entorno de entradas/salidas en
el marco de los redireccionamientos o, en otras palabras, en el marco de la
asignacin implcita de dispositivos virtuales a reales.
1) Cambio de imagen
Los sistemas operativos tienen que permitir que los procesos carguen nuevos
programas en la memoria para ser ejecutados. Esta accin se puede realizar de
las dos maneras siguientes:
a) Al mismo tiempo que se crea un nuevo proceso.
b) A posteriori, una vez se ha creado el proceso, mediante la invocacin de
una llamada especfica (cargar).
En funcin del SO se ofrecern combinaciones diferentes de estas dos posibilidades; aqu vamos a enfocar la explicacin partiendo de un SO que slo ofrece la segunda posibilidad. Consideraremos, entonces, que los procesos nuevos
en un principio siempre ejecutan el mismo cdigo que el proceso padre, ya sea
porque lo comparten, ya sea porque se ha copiado. A posteriori, una vez se ha
iniciado la ejecucin del nuevo proceso, ste decidir si tiene que cargar un
nuevo cdigo o no.
ste es el caso del funcionamiento del intrprete de rdenes que, como veremos ms adelante, en primer lugar obtendra la orden que tendra que llevar
a cabo por la entrada estndar, analizara la existencia de algn ejecutable con
posibilidades de hacerlo y, en tal caso, creara un nuevo proceso igual que l.
Este nuevo proceso, al ejecutarse, cargara la aplicacin que da servicio a la orden recibida.
La carga de un nuevo ejecutable provoca la reconfiguracin total del espacio
lgico del proceso sobre el cual se efecta, de manera que todos los valores
de variables y constantes, los procedimientos y las funciones que se encontraban dentro del espacio lgico del proceso antes de la carga desaparecen.
23
La gestin de procesos
Para que el cdigo cargado pueda utilizar informacin elaborada por el cdigo anterior a la carga, tiene que utilizar mecanismos o dispositivos de almacenamiento que sirvan de puente entre ambos. Una manera sencilla de
hacerlo es utilizar el sistema de ficheros o, en general, un dispositivo de almacenamiento. A pesar de esto, los SO ofrecen la posibilidad de pasar la informacin a travs de ellos mismos en forma de parmetros de la llamada
cargar, los cuales son recibidos por el nuevo programa como parmetros de
entrada de la funcin principal.
El paso del cdigo a C
Si se utiliza el lenguaje C, el nuevo programa recibira la informacin del cdigo anterior
a su carga como parmetros de la funcin main:
Tenemos que apreciar que la llamada cargar slo afecta a la estructura y al contenido de la memoria, as como al contador de programa, que nos indica la
prxima instruccin que hay que ejecutar. El resto de los elementos que configuran el entorno del proceso no tiene por qu verse afectado, de manera que
el nuevo ejecutable debe encontrar el mismo entorno de entrada/salida y el
mismo entorno de proteccin. A pesar de todo, esta afirmacin puede variar
en funcin de si el SO asigna otras funciones a la llamada cargar.
Esta llamada slo retorna un valor en caso de error, ya que si tiene xito, todo
el cdigo y los datos del programa que la contienen habrn desaparecido de la
memoria.
Overlay
En todos los sistemas, el tamao de los programas est limitado por el tamao del espacio
lgico. Adems, en los sistemas que carecen de memoria virtual, el tamao del espacio lgico
se encuentra limitado por la cantidad de memoria fsica que puede asignar el sistema a cada
proceso. Esta limitacin hace que ciertas aplicaciones no quepan en el espacio lgico y, en
consecuencia, impide que se puedan ejecutar.
Para solucionar este problema se utiliza la tcnica de los overlays, que consiste en dividir el ejecutable de la aplicacin en varias partes u overlays, de manera que en cualquier instante de la
ejecucin de la aplicacin slo sea necesario tener cargado en la memoria un subconjunto del
total de overlays. Durante la ejecucin, las aplicaciones tienen que controlar en cada momento
qu overlays necesitan y cules no, y deben indicarle al SO que sustituya unos por otros. El SO,
por su parte, tiene que proporcionar llamadas al sistema para sustituirlos.
Esta tcnica se aplica en sistemas sin gestin de memoria virtual, como el MS-DOS.
24
La gestin de procesos
Figura 6
2) Redireccionamientos de entrada/salida
La forma en que se introducen las modificaciones en general en el entorno de
entrada/salida de un proceso consiste en abrir y cerrar sesiones de acceso a los
dispositivos. En este subapartado nos fijaremos concretamente en cmo se pueden realizar los redireccionamientos de las entradas/salidas. Como se ha visto,
los redireccionamientos de las entradas/salidas se basan en la asignacin de dispositivos virtuales estndar a dispositivos reales. Para conseguir la independencia y la portabilidad de las aplicaciones, esta asignacin se tiene que hacer con
anterioridad a la ejecucin de los programas que configuran las aplicaciones y,
por consiguiente, de manera transparente para ellos. Este hecho es el que hemos
denominado asignacin implcita de los dispositivos virtuales.
El sistema puede llevar a cabo esta asignacin bsicamente de las tres formas
que presentamos a continuacin:
a) El proceso hijo puede heredar del proceso padre los dispositivos virtuales
que ste tenga abiertos.
b) El proceso padre especifica en los parmetros de llamada crear_proceso qu
dispositivos reales hay que asignar a los dispositivos virtuales del hijo.
c) El proceso hijo modifica su entorno de entrada/salida una vez se ha creado
y antes de cargar un nuevo programa.
La ltima de estas opciones es la que nos interesa en este subapartado.
25
La gestin de procesos
Como hemos ido viendo, un SO define una nueva mquina con una semntica ms elaborada que la de la mquina fsica sobre la cual se ejecuta. A pesar
de este aumento del nivel semntico, el SO conserva muchas de las funciones
y los mecanismos de que dispone el hardware, y uno de estos mecanismos que
reproduce es el de las interrupciones. Los procesos pueden necesitar ser informados de acontecimientos que suceden de manera imprevista en cualquier
instante de la ejecucin de un programa.
As, por ejemplo, un proceso puede necesitar saber si se ha producido un
error en el acceso a la memoria para solicitar que se aumente el rea asignada
a una determinada variable; o tambin puede necesitar saber si un cierto terminal sobre el que trabaja se ha apagado, para acabar la aplicacin correctamente, etc.
26
que tiene como funcin inicializar una estructura de datos determinada podra utilizar una seal para informar a los procesos usuarios de esta estructura
que ya ha sido inicializada.
4) El reloj del sistema, que utilizan los procesos cuando necesitan llevar a
cabo una serie de acciones a intervalos concretos de tiempo. Por ejemplo, un
proceso que est esperando una cierta entrada desde un mdem puede solicitar que el reloj del sistema (timeout) lo avise dentro de un cierto lapso de tiempo para detectar si la lnea se ha cortado o no.
5) Y por ltimo, un proceso puede recibir una seal como el efecto lateral de
una llamada al sistema. Por ejemplo, un proceso padre puede recibir una seal que le indique que uno de sus procesos hijos ha sido destruido.
El tratamiento que da un proceso a una seal que le llega puede ser uno de los
tres tipos que presentamos a continuacin:
1) Un tratamiento definido por el mismo usuario. El proceso indica mediante una llamada al SO qu procedimiento hay que ejecutar cuando llegue
una seal determinada.
2) No dar ningn tratamiento (ignorar el acontecimiento). El proceso puede decidir no preocuparse de la seal y, por lo tanto, cuando llegue la seal
continuar su ejecucin normalmente, como si no hubiese pasado nada.
3) Un tratamiento dado por el SO. Algunas circunstancias que provocan seales se deben a un mal funcionamiento del proceso o pueden llevar a ste si
no se utilizan las medidas necesarias. En estos casos, si el proceso no ha definido un tratamiento, el sistema tiene que proporcionar uno. Por norma general, este tratamiento tiene asociada por defecto la destruccin del proceso al
cual iba destinada la seal. Por ejemplo, si un proceso efecta un acceso incorrecto a la memoria y el proceso no lo soluciona, el SO se ve en la obligacin
de destruir el proceso e informar de ello a su proceso padre.
As pues, el SO destruir un proceso cuando reciba una seal que no espera a causa de un error en su ejecucin, de un acontecimiento imprevisto en uno de los dispositivos a los que accede o por la actuacin
deliberada de otro proceso. En este caso, el SO se encarga de enviar el
estado de finalizacin al proceso padre para indicarle el motivo de la
destruccin.
Para finalizar, tenemos que apreciar que la programacin de las seales es una
informacin de cada proceso que configura el entorno de ejecucin y, como
tal, tiene que formar parte del PCB, y es necesario tenerlo en cuenta en el momento de la creacin de un nuevo proceso.
La gestin de procesos
27
La gestin de procesos
por otros procesos; entre el segmento de datos y el de pila existe una porcin
de espacio lgico no asignada al proceso. Cuando conviene, el proceso puede
aumentar el segmento de datos con la llamada malloc.
2) El entorno de entrada/salida, que est formado por una tabla de file descriptors
(dispositivos virtuales), y es local a cada proceso. Cada entrada de esta tabla apunta
a otra tabla, que en este caso es de carcter global para el sistema, y contiene los
punteros de lectura secuencial, el modo de acceso y un puntero a la estructura
del SO que gestiona el dispositivo real asociado a un file descriptor. Finalmente,
el entorno de entrada/salida se complementa con la informacin de cul es el
directorio de trabajo actual.
3) El UID y el GID, que corresponden al nmero de identificador del usuario
y al nmero de identificador del grupo del usuario, hacen referencia al usuario y al grupo al que pertenecen los procesos dentro del dominio de proteccin.
4) El estado de los registros del procesador, que refleja en qu estado se encuentra la ejecucin del programa que contiene el proceso.
5) La informacin estadstica, que presenta informaciones tales como el
tiempo consumido de CPU, el volumen consumido de memoria o el nmero
de procesos hijos generados.
Figura 7
El UID y el GID...
... son los acrnimos
de los trminos ingleses
User Dentifier y Group
IDentifier, respectivamente.
28
La gestin de procesos
Llamadas de UNIX
Crear_proceso
fork
Destruir_proceso
exit
Esperar_finalizacin
wait
La creacin
y destruccin...
... de procesos en UNIX se ajusta a la filosofa general de UNIX
de ofrecer herramientas de uso
sencillas, que permitan desarrollar cualquier poltica que se
necesite.
29
La gestin de procesos
de recursos*. Un ejemplo concreto de este control es el hecho de que no permite que un usuario normal (y no procesos de sistema) ocupe la ltima entrada de la tabla de procesos, la ltima rea de memoria libre, etc. Si esto
ocurriese, quiz el sistema no se podra recuperar de situaciones en las que
sera necesario poner en marcha algn proceso del sistema de manera urgente. Por ejemplo, si fuese necesario realizar una rpida detencin del sistema,
podra ser catastrfico no poder poner en marcha el proceso de detencin del
sistema (shutdown).
2) La llamada exit destruye un proceso. La destruccin de un proceso mediante esta llamada es idntica a la que hemos explicado en el caso de la creacin y la destruccin de procesos: el sistema se encarga de destruir el proceso
que la ejecuta. Con el objetivo de notificar el estado de finalizacin, se pasa
un parmetro al sistema operativo que el proceso padre podr recoger mediante la llamada wait.
3) La llamada wait bloquea el proceso que lo ha llamado hasta que alguno
de sus procesos hijo haya sido destruido. Cuando esto sucede, el sistema le retorna el PID de proceso destruido y, como parmetro de salida, el estado en
que ha finalizado.
Combinando las tres llamadas que se han presentado en este subapartado, el
intrprete de rdenes puede ejecutar rdenes en las modalidades de primer
plano y de fondo (observad la figura 9).
UNIX guarda el estado de finalizacin 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 destruccin.
Los procesos esperan en un estado especial denominado zombie hasta que se
ejecuta la llamada wait, que permitir eliminarlos definitivamente. Para evitar la acumulacin de procesos en estado zombie se han previsto los dos mecanismos que ahora exponemos:
30
La gestin de procesos
1) Cada usuario slo puede tener en un instante determinado un cierto nmero de procesos activos, incluidos los zombies.
2) Los procesos que se destruyen ms tarde que sus procesos padre pasan a ser
considerados hijos del primer proceso del sistema*, que es el encargado de recoger su estado de finalizacin.
Figura 9
31
La gestin de procesos
1) El cambio de ejecutable
La llamada exec al sistema de UNIX permite cambiar la imagen o el ejecutable que contiene un proceso.
El cambio que tiene lugar mediante la llamada exec no afecta a los elementos que
configuran el proceso, como puede ser el entorno de entrada/salida. En general,
slo afecta a la programacin de las seales y al dominio de proteccin si el fichero ejecutable que hay que cargar tiene activo el bit setuid o el setgid. Los bits setuid
y setgid hacen que durante la ejecucin del programa, el proceso que lo ha cargado
cambie respectivamente al dominio del usuario propietario, o al grupo del usuario
propietario del fichero ejecutable. Estos derechos permiten construir aplicaciones
que accedan de manera controlada a bases de datos o a ficheros en general sobre
los cuales no se quiere dar un derecho de escritura generalizado.
2) La manipulacin de los file descriptors
La llamada dup permite duplicar el valor de una entrada concreta de la tabla de file descriptors en la primera posicin libre que se encuentre
dentro de la tabla.
Con esta operacin se pueden modificar con facilidad los valores en los file
descriptors estndares.
Veamos un ejemplo de uso de la llamada dup en combinacin con la llamada
exec:
pid = fork ( ) ;
switch (pid)
case 0:
descFichero = open ( fichero, O_RDONLY) ;
if (descFichero == 1) {
/*tratamiento del error*/
}
close (0) ;
dup (descFichero) ;
close (descFichero) ;
32
case 1:
default:
while(pid != wait (&estado) ) ;
}
La gestin de procesos
33
La gestin de procesos
Para redireccionar la entrada estndar desde fichero, hay que hacer que el
file descriptor 0 se encuentre asociado al fichero. Para hacerlo, desasignamos
el dispositivo real asociado al file descriptor 0 y, mediante la llamada dup, lo
volvemos a asignar copiando sobre su entrada en la tabla de file descriptors la
entrada asociada a descFichero. As, los dos file descriptors hacen referencia
a la misma sesin de trabajo abierta sobre fichero.
b) Situacin despus de haber ejecutado la llamada dup:
Figura 11
34
La gestin de procesos
Por ltimo, las pipes son un dispositivo lgico destinado a comunicar procesos con una relacin de parentesco. Funcionan como una cola de caracteres con una longitud fija, donde los procesos pueden escribir y leer.
Su funcionamiento bsico se rige por el mecanismo de sincronizacin del paradigma productor/consumidor: cuando un proceso intenta leer sobre una pipe vaca, se queda bloqueado hasta que algn otro proceso le escribe los caracteres
suficientes como para que el proceso bloqueado pueda efectuar la lectura. Cuando un proceso intenta escribir sobre una pipe completa, se queda bloqueado hasta
que algn otro proceso lee los caracteres suficientes de la pipe como para que el
proceso bloqueado pueda efectuar la escritura.
La deteccin del cierre de todos los file descriptors de escritura provoca que, cuando
la pipe se queda vaca, los procesos lectores reciban una marca de fin de fichero en
lugar de bloquearse. El tratamiento de todos los file descriptors de lectura hace que
los procesos con file descriptors de escritura reciban una seal de software asociada
a esta situacin.
estado = pipe(descFichero);
if (estado == 1) {
/*tratamiento del error*/
}
switch (fork()) {
case 0:
close (descFichero[0]);
35
write(descFichero[1]);
default:
close(descFichero[1]);
Como muestra el cdigo anterior, el proceso crea inicialmente una pipe con los
file descriptors de lectura y escritura en el mismo proceso, como podis ver en
la figura 13.
a) Situacin despus de haber creado la pipe:
Figura 13
La gestin de procesos
36
El proceso init con PID igual a cero es el primer proceso que se crea en un sistema UNIX, y es el antecesor de todos los procesos que se crearn a continuacin.
Init es el nico proceso que no se ha creado con la llamada al sistema fork, ya
que lo crea directamente el ncleo durante la inicializacin del sistema.
Figura 15
La gestin de procesos
37
Las principales funciones del proceso init son las de inicializar todos los procesos de sistema, como por ejemplo los procesos servidores de red*, poner en
La gestin de procesos
El proceso getty se encarga de esperar que se pongan en marcha los terminales. Cuando un terminal se pone en marcha, el proceso que ejecuta el programa getty carga el programa login para identificar al nuevo usuario. Tras haber
verificado la identidad del usuario, el programa login carga el intrprete de
rdenes (shell) e inicia una sesin de trabajo con el usuario. Cuando el usuario
la finaliza, el proceso shell se destruye, e init crea un nuevo proceso getty que
lo sustituye.
Seal
Significado de la seal
SIGABRT
SIGALRM
SIGFPE
SIGHUP
SIGILL
SIGINT
SIGQUIT
SIGKILL
SIGPIPE
SIGSEGV
SIGTERM
SIGUSR1
SIGUSR2
38
Como se puede ver por el tipo de seales previstas, los elementos que pueden
provocar una seal son los siguientes:
Los dispositivos de entrada/salida.
Las excepciones.
Las llamadas explcitas al sistema, mediante la llamada kill.
El reloj del sistema. Se puede programar para que genere una seal SIGALARM
cuando haya pasado un cierto intervalo de tiempo. Para hacerlo, el sistema
proporciona la llamada alarm.
La programacin de las seales en UNIX se indica mediante la llamada al sistema signal. Los tratamientos posibles de UNIX a una seal pueden ser los
que presentamos a continuacin:
1) El que da el sistema operativo por defecto en funcin del tipo de seal. Para
las seales estndares consiste en destruir el proceso y, en algunos casos, en
crear un fichero denominado core con el contenido de la memoria del proceso
destruido.
2) Ignorar el acontecimiento. Los procesos pueden ignorar la llegada de seales concretas.
3) El definido por el mismo usuario. Mediante la llamada signal se especifica
qu procedimiento se tendr que ejecutar en caso de que se produzca una seal
determinada. La programacin de una seal slo es vlida una vez, puesto que
tras haberse producido la seal y haberse ejecutado el procedimiento asociado
a su tratamiento, el tratamiento pasa a ser el que hay por defecto. Si se quiere
mantener la programacin, hay que volver a ejecutar la llamada signal.
Un caso especial es la seal SIGKILL, que no puede ser ignorada ni programada, ya que se utiliza como ltimo recurso para destruir un proceso.
En la creacin de un nuevo proceso, la programacin de las seales (signals) se hereda del proceso padre. Cuando se ejecuta exec, las seales con un tratamiento
definido por un procedimiento del usuario pasan a ser por defecto. El motivo de
esto es evidente: estos procedimientos sern sustituidos por el nuevo ejecutable.
La gestin de procesos
39
La gestin de procesos
Resumen
En el presente mdulo didctico hemos analizado la gestin de procesos que lleva a cabo el SO partiendo de la definicin de proceso que ya habamos visto en
esta asignatura, y lo hemos hecho siguiendo los pasos que ahora exponemos:
a) En primer lugar, para entender mejor el concepto de proceso, hemos analizado de manera superficial la representacin interna del proceso en el SO y la
gestin de los procesos en un sistema multiprogramado de tiempo compartido. Los principales conceptos que hemos presentado son los siguientes:
El bloque de control de procesos, como estructura bsica que configura
un proceso.
La ejecucin concurrente, mediante la multiplexacin del procesador en
tiempo.
El estado de los procesos (run, ready y wait).
El cambio de contexto como mecanismo para pasar un proceso del estado
run a ready o wait, o viceversa.
b) En segundo lugar, hemos analizado desde el punto de vista del usuario las
llamadas que permiten manipular los procesos, es decir, que permiten crearlos, modificarlos y destruirlos. Como principales conceptos relacionados con estas llamadas, podemos destacar los siguientes:
La herencia entre los procesos padre e hijo en el momento de la creacin
de un nuevo proceso.
La sincronizacin, para ver cmo el proceso padre sincroniza la creacin
y destruccin de un proceso hijo.
Los cambios de ejecutable y los redireccionamientos, como principales
cambios del entorno que configura un proceso.
c) Y, ya para finalizar, hemos presentado las seales en tanto que mecanismo
de sincronizacin de los procesos con acontecimientos que se producen de
manera no prevista. El origen de estos acontecimientos se encuentra en situaciones producidas por un mal funcionamiento del proceso o por situaciones
externas, como pueden ser acciones de otros procesos o estados de los dispositivos. Su aparicin puede alterar el entorno del proceso y a menudo comportan la accin de destruccin de los procesos a los que afectan. A pesar de todo,
40
La gestin de procesos
41
La gestin de procesos
Actividades
1. Estudiad la orden ps de UNIX. Observad qu campos presenta y qu significado tienen.
Analizad tambin qu procesos tenis en marcha en el sistema y en qu estado se encuentran.
2. LINUX permite ver los recursos asignados a los procesos como ficheros que cuelgan del
directorio /proc. Buscad en el manual de UNIX la entrada asociada a este directorio y analizad qu se puede encontrar en sta.
3. Analizad las diferentes posibilidades de ejecucin de rdenes y de redireccionamientos
que nos ofrece el intrprete de rdenes (shell) de UNIX y pensad en cmo se podran realizar
desde las llamadas al sistema.
4. Buscad en el manual de UNIX las seales que hay, y con la orden stty analizad qu caracteres provocan seales.
Ejercicios de autoevaluacin
1. Dentro del diagrama de estados de los procesos que se muestra en el subapartado de estados de un proceso, dnde colocarais el estado zombie de UNIX? Justificad la respuesta.
2. Cmo se podran redireccionar las entradas/salidas de los procesos hijos en un sistema en
el que la llamada crear_proceso fuerza el cambio de imagen? Justificad vuestra respuesta.
3. Despus de ejecutar primero, qu salidas obtendremos y por qu dispositivo se realizarn? Justificad la respuesta.
Primero
main ( )
{
char a;
a = A ;
if
==
1)
/*error*/
write (2,error,5)
}
close (1) ;
execl (segundo, segundo, 0) ;
if
==
1)
/*error*/
exit (1)
}
}
Segundo
main ( )
{
char a;
if (write (1, &a, 1)
==
1)
/*error*/
write (2, error, 5)
42
La gestin de procesos
}
if (write(2, &a, 1)
==
1)
==
1)
/*error*/
exit(1)
a
if (write(2, &a, 1)
/*error*/
exit(1)
}
}
main ( )
{
int fd, pid;
char buff[2];
fd
if
(read(fd, buff, 2)
open(fichero, O_RDONLY)
==
1)
/*error*/
exit(1)
}
write(1, buff, 2);
pid
fork( );
switch(pid)
case
0:
if
(read(fd, buff, 2) == 1)
}
default:
write(1, buff, 2);default:
if (read(fd, buff, 2)
==
1)
43
}
write(1, buff, 2)
;}
}
}
a) ABCD.
b) AABBCCDD.
c) ABCCDD.
d) ABDC.
e) Las opciones a o d indistintamente.
Justificad la respuesta.
3. Determinad cul de los siguientes resultados creis que producir la ejecucin del programa que presentamos a continuacin:
main ( )
{
int
num,
pid;
num
pid
= fork( );
3;
switch (pid)
case
0:
num
num
1;
printf(hijo: num
%d/n, num);
default:
num
num
2;
printf(padre: num
= %d/n, num);
}
}
main ( )
{
int
pid1,
pid2,
estado;
A
pid1
fork ( ) ;
switch (pid)
case
0:
B
default:
pid1
fork ( ) ;
switch (pid)
case
0:
La gestin de procesos
44
C
default:
while(pid1!= wait(&estado)) ;
while(pid2!= wait(&estado)) ;
D
}
}
}
a)
b)
c)
d)
La gestin de procesos
45
Solucionario
Ejercicios de autoevaluacin
1. El estado zombie es previo a la destruccin total del proceso mientras ste espera a que el
proceso padre, o en su defecto el proceso init, recoja el parmetro de finalizacin. Una vez se
ha recogido, se acaban de liberar los recursos del proceso.
Figura 20
2. Puesto que la llamada crear_proceso obliga a cargar un nuevo ejecutable, es imposible que
el hijo herede el cdigo del proceso padre, motivo por el cual no se puede especificar mediante el programa cmo se debe modificar el entorno de entrada/salida del proceso hijo. En estas
condiciones, con los parmetros de la llamada crear_proceso, tenemos que poder especificar
los dispositivos reales que se quieren asociar a los dispositivos virtuales estndares del proceso hijo. Por ejemplo:
crear_proceso(nombre_ejecutable,fichero1,fichero2,fichero3,otros parmetros...)
donde fichero1 corresponde a la entrada estndar, fichero2, a la salida estndar y fichero3, a la salida de error. Si se quisiese hacer ms flexible, de modo que se permitiese redireccionar cualquier
dispositivo con cualquier modo de acceso, sera necesario incluir en l ms parmetros.
3. La salida se efectuar como presentamos ahora:
a) El ejecutable primero escribe A para la salida estndar.
b) Se cierra la salida estndar.
c) Se cambia de ejecutable. Se carga segundo y todo el cdigo que el ejecutable primero
tiene por debajo de la llamada exec desaparece, y no se ejecutar nunca.
d) El ejecutable segundo escribe error para la salida de error estndar, puesto que se encuentra cerrada, tal y como hemos comentado en el punto b.
e) El ejecutable segundo escribe un carcter indeterminado para la salida de error estndar,
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 estndar.
4. El hecho de cambiar la imagen hace que todo el cdigo y las variables de la imagen antigua
sean sustituidos por los de la nueva. Por lo tanto, toda programacin de seales que se base
en la premisa de que el proceso proporciona un procedimiento de tratamiento de la seal
debe quedar anulada. El resto de los tratamientos (por defecto e ignorar la seal) no tienen
por qu verse afectados.
5.
main ( )
{
int
estado,
descFichero[2] ;
La gestin de procesos
46
estado
if
(estado
pipe (descFichero) ;
==
1) {
0:
close(descFichero[0] ) ;
close(1) ;
dup(descFichero[1] ) ;
exec1(fichero2, fichero2, 0) ;
default:
close(descFichero[1] ) ;
close(0) ;
dup(descFichero[0] ) ;
close(descFichero[0] ) ;
exec1(fichero2, fichero2, 0) ;
}
}
6. La existencia de esta seal permite que los procesos de gestin del sistema puedan destruir
cualquier proceso, aunque ste lo intente evitar programando o no haciendo caso de ninguna de las seales. As pues, con esta seal protegemos el sistema de procesos que, a pesar de
que no producen ninguna excepcin, funcionan de manera incorrecta. Por ejemplo, un proceso que se haya quedado ejecutando una iteracin de manera indefinida consume CPU, memoria, etc. El administrador del sistema tiene que poder destruirlo y, as, liberar los recursos
que ocupa.
De seleccin
1. Hay que guardar el contador de programa (a), que indica la prxima instruccin que hay
que ejecutar, y el valor de los registros del procesador (b), que bsicamente contienen valores
parciales de los clculos que se estn llevando a cabo y el puntero a la ltima posicin de la
pila. Es necesario guardar todos aquellos elementos dinmicos que configuran el punto de
ejecucin donde se encuentra el programa que contiene el proceso. El resto de los elementos,
a pesar de que configura el entorno de ejecucin, ya estn guardados en el PCB, de manera
que no es necesario 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 creacin del hijo. As, las
operaciones de lectura que realice cualquiera de los dos modifican el mismo puntero. Por otra
parte, ambos procesos se ejecutan concurrentemente y, por lo tanto, no podemos saber cul de
los dos efectuar primero la operacin de lectura. Por este motivo se pueden dar ambas salidas.
3. La solucin correcta es la b. La herencia de la llamada fork es de copia, as que el proceso
hijo tendr, una vez creado, el mismo cdigo y los mismos datos que el padre. A partir del momento de la creacin, cada uno evolucionar de manera independiente y con sus variables.
4. La respuesta correcta es la a. El proceso padre ejecuta el cdigo A y despus crea un proceso
hijo que ejecuta el cdigo B. Al mismo tiempo crea un segundo proceso hijo que ejecuta concurrentemente el cdigo C. Una vez se han creado todos los hijos, el proceso padre espera a
que sus dos procesos hijos hayan finalizado, y entonces ejecuta D.
Glosario
bloque de control de procesos
Estructura de datos que contiene la informacin del entorno de cada proceso necesaria para
que el sistema pueda gestionar la ejecucin concurrente de un conjunto de procesos.
sigla: PCB
cambio de contexto
Tcnica que, mediante la multiplexacin del tiempo de procesador, consigue la ejecucin
concurrente de todos los procesos preparados para utilizarlo.
La gestin de procesos
47
cuota
Tiempo mximo de CPU que puede utilizar un proceso de manera continua. Los sistemas
operativos que trabajan en la modalidad de tiempo compartido utilizan la cuota para realizar
cambio de contexto y dar el control del procesador a un nuevo proceso.
sin.: quantum
estado de un proceso
Estado que se asigna a cada proceso para controlar sus cambios de modo de ejecucin a lo
largo de su existencia en el sistema. Slo hay un conjunto limitado de estados posibles, y las
acciones que pueden dar lugar a transiciones entre los estados tambin estn definidas.
overlay
Tcnica que consiste en dividir el ejecutable de la aplicacin en varias partes u overlays, de
manera que en cualquier instante de la ejecucin de una aplicacin slo sea necesario tener
cargado en la memoria un subconjunto del total de overlays.
quantum
Ved cuota.
seal de software
Herramienta que proporciona el sistema operativo con el objetivo de trasladar el mecanismo
de las interrupciones al mbito del proceso. Igual que en el mecanismo de hardware de las
interrupciones, las seales ofrecen apoyo a un amplio conjunto de situaciones diferentes que
tienen que ser conocidas y atendidas con una cierta urgencia por parte de los procesos.
Bibliografa
Bibliografa bsica
Milenkovic, M. (1994). Sistemas operativos, conceptos y diseo (2. ed.; trad. de A. Bautista). Madrid: McGraw-Hill.
Silberschatz, A.; Peterson, J.; Galvin, P. (1994). Sistemas operativos, conceptos fundamentales
(3. ed.; trad. de E. Morales). Wilmington: Addison-Wesley Iberoamericana.
Tanenbaum, A. (1993). Sistemas operativos modernos (trad. de O. Palmas). Mxico: Prentice
Hall Hispanoamericana.
Bibliografa complementaria
Kernighan, B.: Pike, R. (1997). El entorno de programacin UNIX. Mxico: Prentice Hall
Hispanoamericana.
Robbins, K.; Robbins, S. (1997). UNIX: programacin prctica. Mxico: Prentice Hall Hispanoamericana.
La gestin de procesos