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

• 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

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

Saved successfully!

Ooh no, something went wrong!