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 />
• Inicio <strong>de</strong> la ejecución <strong>de</strong>l código <strong>de</strong> llamadas al sistema.<br />
– Funciones <strong>de</strong> librería pasan al kernel un número único para cada llamada al sistema ⇒ el<br />
kernel <strong>de</strong>termina la llamada al sistema según el número, y los parámetros <strong>de</strong> las llamadas al<br />
sistema se colocan en ciertos registros <strong>de</strong>l procesador.<br />
– Interfaz <strong>de</strong> llamadas al sistema ⇒ caso similar al manejador <strong>de</strong> interrupciones. Se provoca<br />
un bloqueo <strong>de</strong>senca<strong>de</strong>nando una interrupción.<br />
– Manejo <strong>de</strong>l trap (sentencia software) ⇒ el kernel realizará las operaciones <strong>de</strong> manejo <strong>de</strong><br />
interrupción.<br />
+ Salvar el contexto <strong>de</strong>l proceso ⇒ paso <strong>de</strong>l proceso a modo kernel.<br />
+ Busca el número <strong>de</strong> llamada al sistema en la tabla <strong>de</strong> llamadas al sistema ⇒ rutina en<br />
el kernel (algoritmo para las llamadas al sistema (sys-call)).<br />
+ Calcula la dirección <strong>de</strong> usuario <strong>de</strong>l primer parámetro para la llamada al sistema.<br />
+ Copia los parámetros <strong>de</strong> usuario al Área <strong>de</strong> Usuario (u-Area).<br />
+ Invoca la función correspondiente a la llamada al sistema.<br />
+ Después <strong>de</strong> ejecutarse el código <strong>de</strong> la llamada al sistema, el kernel <strong>de</strong>termina si hubo<br />
algún error y retorna. Este retorno vuelve a pasar al proceso a modo usuario.<br />
• Recuperación <strong>de</strong> la llamada.<br />
– Cuando el kernel retorna <strong>de</strong>l trap <strong>de</strong>l sistema operativo a modo usuario, retorna a la<br />
instrucción <strong>de</strong> librería posterior al trap.<br />
– La librería interpreta los valores <strong>de</strong>vueltos por el kernel.<br />
– Devuelve el valor al programa <strong>de</strong> usuario que no sabe si lo que sufrió fue una llamada al<br />
sistema o a una función <strong>de</strong> usuario.<br />
algoritmo sys_call(num) // entrada: número <strong>de</strong> la llamada al sistema. salida: resultado<br />
{<br />
colocar los parámetros <strong>de</strong> la llamada al sistema en ciertos registros <strong>de</strong>l procesador;<br />
buscar la entrada en la tabla <strong>de</strong> llamadas al sistema <strong>de</strong>l número <strong>de</strong> la llamada al sistema;<br />
<strong>de</strong>terminar el número <strong>de</strong> parámetros <strong>de</strong> la llamada al sistema;<br />
copiar los parámetros <strong>de</strong>l espacio <strong>de</strong>l proceso <strong>de</strong> usuario al Área <strong>de</strong> Usuario (u-Area);<br />
salvar el contexto actual para retorno forzoso (abortive return);<br />
invocar el código en el kernel <strong>de</strong> la llamada al sistema;<br />
if (se produjo un error durante la llamada al sistema)<br />
{<br />
guardar el número <strong>de</strong> error en el contexto <strong>de</strong> registro <strong>de</strong>l usuario;<br />
activar el bit <strong>de</strong> acarreo en el registro PS (registro <strong>de</strong> estado <strong>de</strong>l procesador) <strong>de</strong>l contexto <strong>de</strong><br />
registro <strong>de</strong>l proceso salvado;<br />
}<br />
else<br />
actualizar los registros en el contexto <strong>de</strong> registro <strong>de</strong>l proceso salvado para retornar valores <strong>de</strong><br />
la llamada al sistema;<br />
}<br />
<strong>2.</strong>5.3. Cambio <strong>de</strong> Contexto <strong>de</strong> un Proceso.<br />
• El kernel permite un cambio <strong>de</strong> contexto bajo <strong>de</strong>terminadas circunstancias, como pue<strong>de</strong>n ser que<br />
empiece una operación <strong>de</strong> entrada/salida o cuando expira el quantum asociado a un proceso.<br />
• El kernel evita hacer un cambio <strong>de</strong> contexto en cualquier situación <strong>de</strong>bido a que <strong>de</strong>be mantener la<br />
coherencia <strong>de</strong> sus estructuras (las listas están bien enlazadas, los bloqueos han sido activados, etc).<br />
Claramente se hace un cambio <strong>de</strong> contexto como conclusión <strong>de</strong> la llamada exit (no queda más por<br />
hacer) y cuando el proceso se bloquea (hace que duerma) voluntariamente a la espera <strong>de</strong> un recurso<br />
(sleep). Las otras dos situaciones se refieren a la aparición <strong>de</strong> un proceso <strong>de</strong> mayor prioridad<br />
(activado por una interrupción).<br />
• Procedimiento <strong>de</strong> cambio <strong>de</strong> contexto.<br />
– Similar al manejo <strong>de</strong> interrupciones y <strong>de</strong> las llamadas al sistema, excepto que el kernel<br />
restaura la capa <strong>de</strong> contexto <strong>de</strong> nivel <strong>de</strong> sistema <strong>de</strong> un proceso distinto.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>24