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 />

• La función wake_up permite <strong>de</strong>spertar todos los procesos en espera <strong>de</strong> un evento en una cola <strong>de</strong><br />

espera. Explora la cola, y llama a wake_up_process para cada proceso cuyo estado sea<br />

TASK_INTERRUPTIBLE o TASK_UNINTERRUPTIBLE. Un tratamiento similar realiza la función<br />

wake_up_interruptible, pero esta última sólo <strong>de</strong>spierta los procesos cuyo estado es<br />

TASK_INTERRUPTIBLE.<br />

• La función __sleep_on suspen<strong>de</strong> el proceso actual y lo coloca en una cola <strong>de</strong> espera, modifica el<br />

estado <strong>de</strong>l proceso, guarda su <strong>de</strong>scriptor en la cola <strong>de</strong> espera mediante una llamada a<br />

add_wait_queue, y provoca un cambio <strong>de</strong> proceso actual por una llamada a la función schedule.<br />

Cuando el proceso se <strong>de</strong>spierta, el resto <strong>de</strong> la función se ejecuta, y el <strong>de</strong>scriptor <strong>de</strong>l proceso se<br />

suprime <strong>de</strong> la cola <strong>de</strong> espera por una llamada a remove_wait_queue. Las funciones<br />

interruptible_sleep_on y sleep_on llaman a __sleep_on especificándole que ponga el estado <strong>de</strong>l<br />

proceso actual respectivamente a TASK_INTERRUPTIBLE (interruptible_sleep_on) y<br />

TASK_UNINTERRUPTIBLE (sleep_on).<br />

• La función __down permite que el proceso actual se suspenda en espera <strong>de</strong> un evento sobre un<br />

semáforo, se añada el <strong>de</strong>scriptor <strong>de</strong>l proceso actual a la cola <strong>de</strong> espera <strong>de</strong>l semáforo, su estado pasa<br />

al estado conocido como TASK_UNINTERRUPTIBLE, y se comprueba el contador <strong>de</strong>l semáforo.<br />

Mientras este contador es igual a cero, la función schedule se llama para cambiar <strong>de</strong> proceso actual,<br />

y el estado <strong>de</strong>l proceso se pone a TASK_UNINTERRUPTIBLE. Cuando el contador <strong>de</strong>l semáforo<br />

pasa estrictamente a positivo, el estado <strong>de</strong>l proceso actual se pone a TASK_RUNNING y el<br />

<strong>de</strong>scriptor <strong>de</strong>l proceso se suprime <strong>de</strong> la cola <strong>de</strong> espera <strong>de</strong>l semáforo por una llamada a la función<br />

remove_wait_queue y se inserta en la lista <strong>de</strong> procesos “Listos para ejecutarse”. El uso <strong>de</strong> los<br />

semáforos se efectúa mediante las funciones down y up <strong>de</strong>finidas en el archivo <strong>de</strong> cabecera <strong>de</strong><br />

Linux .<br />

<strong>2.</strong>9. SEÑALES Y FUNCIONES <strong>DE</strong> TIEMPO.<br />

<strong>2.</strong>9.1. Concepto <strong>de</strong> Señal.<br />

Las señales son interrupciones software que pue<strong>de</strong>n ser enviadas a un proceso para informarle <strong>de</strong> algún<br />

evento asíncrono o situación especial. El termino señal se emplea también para referirse al evento. Las<br />

formas <strong>de</strong> generar una señal pue<strong>de</strong>n ser las siguientes:<br />

• Resultado <strong>de</strong> una excepción hardware. Por ejemplo, cuando un proceso escribe en una zona <strong>de</strong><br />

memoria no asignada, entonces produce un acceso inválido a una página <strong>de</strong> memoria que provoca<br />

una excepción, que es capturada por el kernel generando la señal SIGSEGV hacia el proceso<br />

trasgresor.<br />

• Resultado <strong>de</strong> pulsar Ctrl-C por parte <strong>de</strong>l usuario <strong>de</strong>l terminal. Genera la señal SIGINT, cuya acción<br />

pre<strong>de</strong>terminada es terminar le proceso <strong>de</strong>l primer plano <strong>de</strong> la sesión.<br />

• Resultado <strong>de</strong> la llamada al sistema kill o <strong>de</strong> la or<strong>de</strong>n <strong>de</strong>l mismo nombre. Permite enviar una señal<br />

<strong>de</strong>terminada a un proceso dado.<br />

• Resultado <strong>de</strong> un evento gestionado por el kernel. Por ejemplo, SIGALRM es emitida por el sistema<br />

hacia el proceso que la ha solicitado cuando expira una alarma.<br />

Las señales permiten informar a los procesos <strong>de</strong> la ocurrencia <strong>de</strong> eventos asíncronos. Los procesos pue<strong>de</strong>n<br />

intercambiar señales con la llamada al sistema kill o el kernel pue<strong>de</strong> enviar señales internamente a los<br />

procesos. Aunque existen diversas implementaciones (tipos <strong>de</strong> señales y la forma <strong>de</strong> manejarlas), Posix.1<br />

introduce un poco <strong>de</strong> or<strong>de</strong>n en este tema. También, es necesario diferenciar dos gran<strong>de</strong>s aspectos en las<br />

señales: (1) La generación <strong>de</strong> la señal y, (2) el tratamiento <strong>de</strong> la señal. El primero se realiza cuando ocurre el<br />

evento que se <strong>de</strong>sea señalizar (los eventos se i<strong>de</strong>ntifican en general con un entero entre 0 y 31, <strong>de</strong>pendiendo<br />

<strong>de</strong> la implementación, a cada entero se le suele asociar una macro que lo <strong>de</strong>fine). El segundo aspecto proce<strong>de</strong><br />

cuando el proceso (al que se le ha enviado la señal) reacciona ante ella (la reconoce y la procesa). Como<br />

veremos, para que el proceso atienda la señal <strong>de</strong>be estar en posesión <strong>de</strong> la CPU, lo cual pue<strong>de</strong> tardar en<br />

ocurrir. Durante el tiempo que transcurre entre que la señal se envió y el proceso la reconoce, se dice que la<br />

señal está pendiente. El tiempo en que la señal está pendiente <strong>de</strong>pen<strong>de</strong> <strong>de</strong>l estado en que se encuentre el<br />

proceso (pue<strong>de</strong> estar bloqueado y pue<strong>de</strong> ser interrumpido, pue<strong>de</strong> estar suspendido, transferido al área <strong>de</strong><br />

Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>51

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

Saved successfully!

Ooh no, something went wrong!