Parcial 2015 1.5 | Pregunta general sobre interrupciones y planificadores.

Parcial 2015 1.5 | Pregunta general sobre interrupciones y planificadores.

de Daniel Padron Simon -
Número de respuestas: 3

Buenas tardes, 

Tenía una duda con la respuesta de esta pregunta y desencadeno una serie de preguntas que son acerca de la interacción entre el planificador y la ocurrencia de interrupciones. 

La pregunta del parcial es 

"Indique los pasos que deben realizarse, efectuar un llamado al sistema (system call), indicando quién realiza cada paso."

Y la respuesta que se da es la siguiente: 

i) El proceso de usuario guarda los parámetros del system call y el número de system call a

invocar donde corresponda

ii) El proceso de usuario invoca a una interrupción por software

iii) El hardware cambia la CPU a modo monitor e invoca al manejador de la interrupción

correspondiente (cuyo código es parte del SO)

iv) El SO procesa la system call y guarda el resultado donde corresponda

v) El planificador del SO selecciona el próximo proceso a ejecutar

vi) Se pasa el CPU a modo usuario y se pasa el control al nuevo proceso

---------------------------

A mí lo que me genera duda es el paso 5, ya que entiendo que la interrupción le saco la ejecución al proceso de usuario que llamo a la system call, por lo que les pregunto: 

Cuando ocurre una interrupción que pasa con el planificador? 

Si un proceso está ejecutado y una interrupción cualquiera sucede, ¿el proceso pasa a estado 'ready' automáticamente? Si es así: ¿es la rutina de interrupción es la que pasa al estado ejecutado en ese momento? ¿Sea crea un PCB y se saltea a todos los demás procesos en la cola ready, en caso de por ejemplo se trate de una planificación por FCFS? 

Y luego otra serie de dudas más:

¿Qué es lo que hace que el planificador se ejecute en medio de la ejecución de un proceso? ¿El timer del CPU? Porque, por ejemplo en un sistema por prioridad expropiativo o en un RR, en algún punto se tiene que llamar al planificador, ¿cuándo se hace y quien sería el encargado de llamarlo?

Si fuera correcto que toda interrupción mueve el proceso de ejecutado => listo y pone a la rutina de interrupción a ejecutar ¿Entonces se llama al planificador luego de que termina de ejecutar esa rutina y se ve si sigue ejecutado el proceso anterior (expropiativo) o si directamente se lo vuelve a poner en la CPU (no expropiativo)? 

Disculpen si la pregunta no es pertinente, pero no entiendo bien la integración planificador - interrupción 

Saludos,

Daniel

En respuesta a Daniel Padron Simon

Re: Parcial 2015 1.5 | Pregunta general sobre interrupciones y planificadores.

de Jorge Merlino -

Hola,

Es una buena pregunta y me parece que en definitiva aparece por pensar que el sistema operativo es un proceso más del sistema cuando en realidad no lo es. El concepto de que un proceso esté Listo o Ejecutando es una abstracción del sistema operativo, no está reflejado en el hardware del sistema y la interrupción es un proceso que hace el hardware. En definitiva la interrupción lo que hace al dispararse es pasar el control de la CPU a cierto código que está en otra parte de la memoria del que venía ejecutando antes (y activar el bit de modo monitor) nada más. La idea del estado del proceso y eso es algo que concierne al sistema operativo no al manejador de interrupciones.

Entonces la rutina de ejecución lo que hace es pasarle el control de la CPU al sistema operativo (que no es un proceso más, no tiene PCB ni estado) y el sistema operativo es el que guarda los registros de la CPU en el PCB (a veces con ayuda del hardware) y cambia el estado del proceso que tenía la CPU antes a Listo, etc.

El planificador es solamente una rutina más dentro del sistema operativo, tampoco es un proceso separado. El código del sistema operativo llama a la función schedule() cuando lo precisa lo cual dependerá de si usa un planificador expropiativo o no. Para que el planificador se ejecute en el medio de la ejecución de un proceso, al ser una rutina del SO, se precisa que el SO tome el control de la CPU. Esto en definitiva solo ocurre cuando se dispara una interrupción, ya sea por el hardware de I/O (ej. el usuario apretó una tecla), por el timer o porque el propio proceso de usuario invocó una interrupción por software para llamarlo.

Espero que haya quedado claro, en todo caso volvé a preguntar si no.




En respuesta a Jorge Merlino

Re: Parcial 2015 1.5 | Pregunta general sobre interrupciones y planificadores.

de Daniel Padron Simon -
Muchas gracias por la respuesta.

A ver si entendí bien. En el caso de un planificador expropiativo, lo que va a pasar es que alguna interrupción se ejecuta (si eso no pasara, el proceso continua o hasta que se bloquea o termina, aunque es imposible ese caso porque el timer va a saltar ), luego se ejecuta la rutina de la interrupción y esta al finalizar nuevamente le da el control del cpu al SO, una vez en ese punto el sistema llama nuevamente al planificador, el cual decide si expropia o no. ¿es así?
Si es así, entonces en el ejercicio por el cual estaba preguntando, al finalizar el system call, la interrupción devuelve el control a la SO, que eventualmente llama al planificador (¿lo puede llamar directo?) y ese elige que proceso ejecutar a continuación (que puede o no ser el mismo que provoco la interrupción para llamar a la system call). ¿es así?

Saludos y gracias
Daniel.
En respuesta a Daniel Padron Simon

Re: Parcial 2015 1.5 | Pregunta general sobre interrupciones y planificadores.

de Jorge Merlino -
Lo importante es que la rutina de interrupción ES el sistema operativo. Al producirse la interrupción lo único que hace el hardware es mover el program counter al código de la rutina de interrupción y todas las rutinas de interrupción son código del sistema operativo. O sea que al producirse la interrupción el control pasa inmediatamente al SO, no hay otra cosa en el medio.