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 />
proc. a<br />
esperando finalización E/S<br />
proc. b<br />
dir. A<br />
proc. c<br />
esperando búffer<br />
proc. d<br />
proc. e<br />
proc. f<br />
proc. g<br />
esperando nodo-i<br />
esperando entrada por terminal<br />
dir. B<br />
dir. C<br />
proc. h<br />
Figura <strong>2.</strong>13. Procesos durmiendo en eventos y correspon<strong>de</strong>ncia entre eventos y direcciones virtuales.<br />
<strong>2.</strong>7.3.3. Problemas.<br />
• El proceso duerme hasta que ocurre el evento apropiado ⇒ Procesos duermen habitualmente en<br />
eventos que ocurren con seguridad.<br />
• Procesos dormidos en eventos que pue<strong>de</strong>n no producirse ⇒ Mecanismo para retomar el control y<br />
continuar la ejecución ⇒ El kernel interrumpe al proceso que duerme enviándole una señal<br />
(interrupción software).<br />
• Po<strong>de</strong>mos distinguir varios tipos “dormido” (procesos que han alcanzado este estado), <strong>de</strong>pendiendo<br />
<strong>de</strong> priorida<strong>de</strong>s.<br />
– El kernel fija la prioridad <strong>de</strong> planificación <strong>de</strong>l proceso “dormido” cuando pasa a dicho<br />
estado, basada en la prioridad con la que duerme (niveles <strong>de</strong> prioridad para procesos en<br />
estado “dormido”).<br />
– Si la prioridad <strong>de</strong>l proceso “dormido” está por encima <strong>de</strong> un valor umbral ⇒ Proceso no<br />
<strong>de</strong>spertará ante la recepción <strong>de</strong> una señal.<br />
– Si la prioridad <strong>de</strong>l proceso “dormido” está por <strong>de</strong>bajo <strong>de</strong> dicho umbral ⇒ Despertará<br />
inmediatamente ante la recepción <strong>de</strong> la señal.<br />
• Si un proceso <strong>de</strong>spierta ante una señal.<br />
– El kernel realiza acciones especiales (longjmp, que restaura el entorno salvado por setjmp)<br />
para restaurar el contexto salvado si no pue<strong>de</strong> completar la llamada al sistema en ejecución.<br />
Y que, no es suficiente con restaurar la capa <strong>de</strong> contexto <strong>de</strong>l nivel <strong>de</strong> sistema anterior.<br />
<strong>2.</strong>7.3.4. Acciones para Dormir (sleep).<br />
• El kernel eleva el nivel <strong>de</strong> ejecución <strong>de</strong>l procesador (priorida<strong>de</strong>s) ⇒ Bloquear las interrupciones.<br />
• El kernel marca el proceso como “dormido”, en el campo <strong>de</strong> estado asociado a su <strong>de</strong>scriptor <strong>de</strong><br />
proceso.<br />
• El kernel guarda la dirección virtual sobre la que duerme (dirección <strong>de</strong> bloqueo) y la prioridad en la<br />
tabla <strong>de</strong> procesos.<br />
• El kernel coloca al proceso en una cola hash <strong>de</strong> procesos “dormidos”.<br />
• Si el proceso que duerme no pue<strong>de</strong> ser interrumpido por señales, entonces sleep no pue<strong>de</strong> ser<br />
interrumpido por ninguna señal (caso más sencillo).<br />
– Cambio <strong>de</strong> contexto y pasa a estado “dormido”.<br />
– Cuando <strong>de</strong>spierta pasa a “listo para ejecutarse” y el kernel lo planificará en algún momento<br />
(scheduler), retomando su ejecución vía un cambio <strong>de</strong> contexto.<br />
– Su ejecución continuará justo a partir <strong>de</strong> este momento.<br />
+ El proceso retorna <strong>de</strong> su cambio <strong>de</strong> contexto en el sleep<br />
+ Restaura el nivel <strong>de</strong> ejecución <strong>de</strong>l procesador al valor inicial.<br />
+ Retorna.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>37