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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!