TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Diseño <strong>de</strong> Sistemas Operativos<br />
Tema <strong>2.</strong> Gestión <strong>de</strong> Procesos<br />
• En el caso extremo en que los procesos compartan el máximo <strong>de</strong> cosas, se diferencian únicamente<br />
por el valor <strong>de</strong> los registros <strong>de</strong>l procesador y por su segmento <strong>de</strong> pila. Esta posibilidad <strong>de</strong> clonado<br />
permite, entre otras cosas, implementar servidores en los que se ejecuten varias activida<strong>de</strong>s<br />
(threads). Estas activida<strong>de</strong>s pue<strong>de</strong>n compartir simplemente datos, sin emplear mecanismos <strong>de</strong><br />
comunicación interprocesos (IPC).<br />
• La llamada al sistema clone crea un proceso actual. Antes <strong>de</strong> llamar a clone, <strong>de</strong>bemos asignar un<br />
segmento <strong>de</strong> pila (llamando a la función malloc) y los parámetros <strong>de</strong> la función a ejecutar <strong>de</strong>ben<br />
apilarse en esta zona <strong>de</strong> memoria. A continuación, los registros <strong>de</strong>l procesador <strong>de</strong>ben inicializarse<br />
<strong>de</strong> la siguiente forma (en un procesador x86): (1) eax <strong>de</strong>be contener el código <strong>de</strong> la llamada clone,<br />
representado por la constante _NR_clone; (2) ebx <strong>de</strong>be contener una combinación <strong>de</strong> constantes<br />
(CLONE_VM | CLONE_FS | CLONE_FILE | CLONE_SIGHAND | SIGCHLD); y (3) ecx <strong>de</strong>be<br />
contener el puntero <strong>de</strong> pila para el proceso hijo.<br />
<strong>2.</strong>7.<strong>2.</strong> Terminación y Espera por la Terminación <strong>de</strong> Procesos. EXIT y WAIT.<br />
Una situación muy típica en programación UNIX es que cuando un proceso crea a otro, el proceso padre se<br />
queda esperando a que termine el proceso hijo antes <strong>de</strong> continuar su ejecución. Un ejemplo <strong>de</strong> esta situación<br />
es la forma <strong>de</strong> operar <strong>de</strong> los intérpretes <strong>de</strong> ór<strong>de</strong>nes. Cuando escribimos una or<strong>de</strong>n, la shell arranca un proceso<br />
para ejecutar la or<strong>de</strong>n y no <strong>de</strong>vuelve el control hasta que no se ha ejecutado completamente. Naturalmente,<br />
esto no es aplicable cuando la or<strong>de</strong>n se ejecuta en background. Para po<strong>de</strong>r sincronizar los procesos padre e<br />
hijo se utilizan las llamadas exit y wait.<br />
<strong>2.</strong>7.<strong>2.</strong>1. Terminación <strong>de</strong> Procesos, exit.<br />
• Llamada al sistema exit(estado) implícita o explícitamente termina la ejecución <strong>de</strong> un proceso y<br />
<strong>de</strong>vuelve el valor <strong>de</strong> estado (0..255) que hay que comunicar al proceso padre ⇒ Hay que tener<br />
cuidado si el proceso es un proceso lí<strong>de</strong>r asociado con el terminal.<br />
• Un retorno (return) efectuado <strong>de</strong>s<strong>de</strong> la función principal <strong>de</strong> un programa C (main) tiene el mismo<br />
efecto que una llamada a exit. Si efectuamos el return sin <strong>de</strong>volver ningún valor en concreto, el<br />
resultado <strong>de</strong>vuelto al sistema estará in<strong>de</strong>finido.<br />
• La función exit es uno <strong>de</strong> los pocos ejemplos <strong>de</strong> llamada al sistema que no <strong>de</strong>vuelve ningún valor,<br />
esto es en cierta medida lógico, ya que el proceso que la llama <strong>de</strong>ja <strong>de</strong> existir <strong>de</strong>spués <strong>de</strong> haberla<br />
ejecutado.<br />
• Por convenio, un proceso <strong>de</strong>be <strong>de</strong>volver el valor 0 en caso <strong>de</strong> finalización normal, y un valor no<br />
nulo en caso <strong>de</strong> finalización <strong>de</strong>bida a un error.<br />
• Antes <strong>de</strong> terminar la ejecución <strong>de</strong>l proceso, exit ejecuta las funciones eventualmente registradas por<br />
las llamadas a las funciones <strong>de</strong> librería atexit y on_exit. Las funciones registradas por atexit son<br />
llamadas en or<strong>de</strong>n inverso a como fueron registradas. La función atexit permite indicarle al sistema<br />
qué acciones queremos que se ejecuten al producirse la terminación <strong>de</strong> un proceso.<br />
• Si el proceso actual posee procesos hijos, estos se vinculan al proceso número 1 (PID), que ejecuta<br />
el programa init. La señal SIGCHLD se envía al proceso padre para prevenirle <strong>de</strong> la finalización <strong>de</strong><br />
uno <strong>de</strong> sus procesos hijos.<br />
• Consecuencias en las llamadas al sistema, exit.<br />
– Las funciones registradas por atexit son llamadas en or<strong>de</strong>n inverso a como fueron<br />
registradas. La función atexit permite indicarle al sistema qué acciones queremos que se<br />
ejecuten al producirse la terminación <strong>de</strong> un proceso.<br />
– El contexto <strong>de</strong>l proceso es <strong>de</strong>scargado <strong>de</strong> memoria, lo que implica que la tabla <strong>de</strong><br />
<strong>de</strong>scriptores <strong>de</strong> archivos es cerrada y sus archivos asociados cerrados, si no quedan más<br />
procesos que los tengan abiertos.<br />
– Si el proceso padre <strong>de</strong>l que ejecuta la llamada a exit está ejecutando una llamada a wait, se le<br />
notifica la terminación <strong>de</strong> su proceso hijo y se le envían los 8 bits menos significativos <strong>de</strong><br />
estado. Con esta información, el proceso padre pue<strong>de</strong> saber en qué condiciones ha terminado<br />
el proceso hijo.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>33