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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!