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 />
<strong>2.</strong>7.3.1. Contexto <strong>de</strong> Ejecución <strong>de</strong> Procesos que están Dormidos.<br />
• Los procesos duermen durante la ejecución <strong>de</strong> una llamada al sistema.<br />
– El proceso entra en modo kernel (capa <strong>de</strong> contexto 1) cuando ejecuta un trap (interrupción<br />
software para pasar <strong>de</strong> modo usuario a modo kernel) <strong>de</strong>l sistema operativo.<br />
– El proceso duerme (sleep) esperando un recurso (operación <strong>de</strong> E/S) ⇒ cambio <strong>de</strong> contexto<br />
⇒ apila la capa <strong>de</strong> contexto actual y se ejecuta en la capa <strong>de</strong> contexto 2 (Figura <strong>2.</strong>12).<br />
• El proceso duerme también cuando ocurre una falta <strong>de</strong> página (páginación).<br />
– Duerme mientras el kernel lee el contenido <strong>de</strong> la página requerida, bien <strong>de</strong>s<strong>de</strong> el búffer<br />
caché, <strong>de</strong> memoria principal o <strong>de</strong> memoria secundaria.<br />
Capa contexto kernel 2<br />
Ejecutar código para<br />
cambio <strong>de</strong> contexto<br />
Invocar algoritmo sleep<br />
Contexto <strong>de</strong> registro<br />
salvado para llam. sist.<br />
Capa contexto kernel 1<br />
Ejecutar llam. al sist.<br />
Realizar llamada al sistema<br />
Contexto <strong>de</strong> registro<br />
salvado para nivel <strong>de</strong><br />
usuario<br />
Ejecutando en modo usuario<br />
Figura <strong>2.</strong>1<strong>2.</strong> Capas <strong>de</strong> contexto típicas <strong>de</strong> un proceso dormido.<br />
<strong>2.</strong>7.3.<strong>2.</strong> Eventos y Direcciones en los que Duermen los Procesos.<br />
• Abstracción = Mo<strong>de</strong>lo para manejar procesos (supone).<br />
– Los procesos se duermen en un evento (dormir) ⇒ estado “dormido” en el diagrama <strong>de</strong><br />
transición <strong>de</strong> estados <strong>de</strong> un proceso UNIX.<br />
– Ocurre el evento (<strong>de</strong>spertar) ⇒ <strong>de</strong>spiertan y pasan al estado “listo para ejecutarse”.<br />
• Implementación ⇒ El kernel establece una correspon<strong>de</strong>ncia (mapea) entre el conjunto <strong>de</strong> eventos y<br />
el conjunto <strong>de</strong> direcciones virtuales <strong>de</strong>l kernel asociados a esos eventos.<br />
– Las clases <strong>de</strong> eventos que podríamos establecer son: esperando finalización <strong>de</strong> E/S,<br />
esperando búffer, esperando inodo y esperando entrada por terminal.<br />
• Ni abstracción ni implementación <strong>de</strong>l evento distinguen el número <strong>de</strong> procesos que esperan en el<br />
evento (duermen), es <strong>de</strong>cir esta abstracción <strong>de</strong> eventos es genérica ⇒ anomalías <strong>de</strong>bidas al número<br />
<strong>de</strong> procesos que esperan en el evento.<br />
– Anomalía 1.<br />
+ Se produce un evento (dormir) en el cual tenemos varios procesos.<br />
+ Llamada a wakeup para procesos que dormían en dicho evento.<br />
+ Todos ellos se <strong>de</strong>spiertan ⇒ pasan a estado “listo para ejecutarse” ⇒ compiten por el<br />
mismo recurso.<br />
+ Muchos volverán a dormirse <strong>de</strong>spués <strong>de</strong> pasar por “ejecución en modo kernel”.<br />
– Anomalía <strong>2.</strong><br />
+ Varios eventos pue<strong>de</strong>n correspon<strong>de</strong>r en una única dirección virtual. Figura <strong>2.</strong>13<br />
(esperando finalización <strong>de</strong> E/S y esperando búffer).<br />
* Se completa la operación <strong>de</strong> E/S para el búffer.<br />
* El kernel <strong>de</strong>spierta procesos que dormían en ambos eventos.<br />
* Proceso en espera <strong>de</strong> finalización E/S ⇒ bloquea búffer.<br />
* Procesos en espera <strong>de</strong> búffer libre ⇒ duermen otra vez.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>36