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