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>5. MANIPULACIÓN <strong>DE</strong>L CONTEXTO <strong>DE</strong> UN PROCESO.<br />

• Salvar el contexto <strong>de</strong> un proceso ⇒ El kernel apila una nueva capa <strong>de</strong> contexto <strong>de</strong>l nivel <strong>de</strong> sistema<br />

cuando:<br />

– Recibe una interrupción.<br />

– El proceso realiza una llamada al sistema.<br />

– El kernel realiza un cambio <strong>de</strong> contexto.<br />

• Restaurar el contexto <strong>de</strong> un proceso ⇒ <strong>de</strong>sapila una nueva capa <strong>de</strong> contexto <strong>de</strong>l nivel <strong>de</strong> sistema<br />

cuando:<br />

– Vuelve <strong>de</strong> una interrupción.<br />

– Vuelve a modo usuario <strong>de</strong>spués <strong>de</strong> una llamada al sistema.<br />

– Cambio <strong>de</strong> contexto.<br />

<strong>2.</strong>5.1. Interrupciones y Excepciones. Tratamiento.<br />

El kernel <strong>de</strong>be manejar las interrupciones ya sea que provengan <strong>de</strong>l hardware (clock, E/S), software<br />

(instrucciones programadas para producir una software-interrupt) o como excepciones (como fallos <strong>de</strong><br />

página). Si el procesador esta en un nivel <strong>de</strong> ejecución menor que el nivel <strong>de</strong> la interrupción, ésta se acepta<br />

antes <strong>de</strong> <strong>de</strong>codificar la siguiente instrucción, se incrementa (raises) el nivel <strong>de</strong> ejecución para no procesar<br />

otras interrupciones <strong>de</strong> ese nivel o inferior mientras atien<strong>de</strong> la actual <strong>de</strong> tal forma que preserva la coherencia<br />

<strong>de</strong> sus estructuras <strong>de</strong> datos.<br />

• Las interrupciones son señales eléctricas manejadas directamente por un controlador o manejador<br />

<strong>de</strong> interrupciones (hardware) o codificadas a nivel <strong>de</strong> software.<br />

• A<strong>de</strong>más <strong>de</strong> las interrupciones hardware y software (señales), diversas condiciones <strong>de</strong> error <strong>de</strong> la<br />

CPU pue<strong>de</strong>n causar la iniciación <strong>de</strong> una excepción. Las excepciones pue<strong>de</strong>n servir: para estimular<br />

al sistema operativo para que suministre un servicio, para suministrar más memoria a un proceso, ...<br />

algoritmo int_hand<br />

entrada: ninguna<br />

salida: ninguna<br />

{<br />

salvar (apilar) la capa <strong>de</strong> contexto actual y apilar una nueva capa <strong>de</strong> contexto;<br />

// cuando se recibe una interrupción en general se consigue un valor que se usa como un offset en una<br />

// tabla <strong>de</strong> interrupciones que apunta a la función que la manejará.<br />

<strong>de</strong>terminar la fuente <strong>de</strong> interrupción;<br />

buscar en vector <strong>de</strong> interrupción la dirección <strong>de</strong>l procedimiento <strong>de</strong>l servicio <strong>de</strong> esa interrupción;<br />

invocar el manejador <strong>de</strong> la interrupción por parte <strong>de</strong>l kernel;<br />

// en este momento la pila <strong>de</strong>l kernel es diferente <strong>de</strong> la pila en el contexto anterior. Algunas<br />

// implementaciones usan la pila <strong>de</strong>l kernel <strong>de</strong>l proceso que estaba ejecutando y otras usan un stack<br />

// global que garantiza un retorno <strong>de</strong>l manejador sin cambio <strong>de</strong> contexto.<br />

el manejador <strong>de</strong> interrupción finaliza su trabajo;<br />

restaurar (<strong>de</strong>sapilar) la capa <strong>de</strong> contexto anterior (en el punto en el que se produjo la interrupción);<br />

}<br />

• Por ejemplo, supongamos el caso <strong>de</strong> un proceso que ejecuta una llamada al sistema y recibe una<br />

interrupción <strong>de</strong> disco mientras se encuentra en dicha llamada al sistema. Cuando está ejecutando el<br />

código <strong>de</strong>l manejador <strong>de</strong> la interrupción <strong>de</strong> disco, el sistema recibe una interrupción <strong>de</strong> reloj y<br />

ejecuta el manejador <strong>de</strong> la interrupción <strong>de</strong> reloj. Cada vez que el sistema recibe una interrupción o<br />

realiza una llamada al sistema se crea una nueva capa y salva los registros que <strong>de</strong>finen contexto <strong>de</strong>l<br />

nivel salvado.<br />

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

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

Saved successfully!

Ooh no, something went wrong!