12.10.2014 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!