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

<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

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

Saved successfully!

Ooh no, something went wrong!