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