2011-01-24 20 views
15

Recientemente comencé mi curso de SO. Por lo que sé, el trabajo del despachador es guardar el contexto del proceso actual y cargar el contexto del proceso que se ejecutará a continuación. Pero, ¿cómo hace eso? Cuando se adelanta un proceso, tan pronto como se cargue y ejecute el despachador (ya que también es un programa) se perderá el contexto del proceso anterior en los registros, PSW, etc. ¿Cómo va a salvar el contexto antes de cargarse?¿cómo funciona el despachador?

+0

¿No debería trasladarse a superuser.com? –

+6

djechelon: No, no lo creo. Se trata del funcionamiento interno de un programador de sistema operativo, no realmente del uso de un sistema operativo. –

Respuesta

19

La respuesta simple es que los procesadores modernos ofrecen extensiones arquitectónicas que proporcionan varios bancos de registros que se pueden intercambiar en hardware, por lo que hasta X tareas conservan su conjunto completo de registros.

La respuesta más compleja es que el despachador, cuando se desencadena por una interrupción, recibe el conjunto de registro completo del programa que se estaba ejecutando en el momento de la interrupción (con la excepción del contador del programa, que se propaga presumiblemente a través de el registro "volátil" mutuamente acordado o algo así). Por lo tanto, el despachador debe escribirse cuidadosamente para almacenar el estado actual de los bancos de registro como su primera operación al ser activada. En resumen, el despachador en sí mismo no tiene un contexto inmediato y, por lo tanto, no sufre el mismo problema.

Aquí es un intento de una simple descripción de lo que sucede durante la llamada despachador:

  1. El programa que actualmente tiene contexto se ejecuta en el procesador. Registros, contador de programa, banderas, base de pila, etc. son todos apropiados para este programa; con la posible excepción de un "registro reservado" nativo del sistema operativo o algo así, nada sobre el programa sabe nada sobre el despachador.
  2. Se activa la interrupción temporizada para la función del despachador. Lo único que sucede en este punto (en el caso de la arquitectura de vanilla) es que el contador del programa salta inmediatamente a lo que sea que la dirección de PC en la interrupción del BIOS esté listada. Esto inicia la ejecución de la subrutina "dispatch" del despachador; todo lo demás queda intacto, por lo que el despachador ve los registros, la pila, etc. del programa que se estaba ejecutando previamente.
  3. El despachador (como todos los programas) tiene un conjunto de instrucciones que operan en el conjunto de registros actual. Estas instrucciones están escritas de tal manera que saben que la aplicación que se ejecutó anteriormente ha dejado todo su estado atrás. Las primeras instrucciones en el despachador almacenarán este estado en algún lugar de la memoria.
  4. El despachador determina cuál será el siguiente programa para tener la CPU debe ser, toma toda su estado almacenado previamente y se llena registros con él.
  5. El despachador salta al contador de PC apropiado como figura en la tarea que ahora tiene su contexto completo establecido en la CPU.

Para (sobre) simplificar en resumen; el despachador no necesita registros, todo lo que hace es escribir el estado actual de la CPU en una ubicación de memoria predeterminada, cargar el estado de la CPU de otros procesos desde una ubicación de memoria predeterminada y salta a donde dejó ese proceso.

¿Eso lo hace más claro?

+0

"cuando se activa por una interrupción, recibe el conjunto de registro completo del programa que se estaba ejecutando en el momento de la interrupción" ... ¿Quiere decir que hay algún tipo de soporte de hardware que envía esta información y el despachador no tiene código para transferir valores de registro (como instrucciones mov ... etc) – Terminal

+0

No. Permítanme editar mi respuesta para mayor detalle y claridad. –

+0

¡Sí definitivamente! Esa fue una buena explicación. Ahora también estoy obteniendo lo que paxdiablo quiere transmitir ... :) – Terminal

1

En general, no se cargan de manera tal que se pierde la información sobre el proceso actual.

A menudo, es una interrupción que ocurre en el contexto del proceso actual.

Por lo tanto, el despachador (o programador) puede guardar toda la información relevante en un bloque de control de tareas de algún tipo antes de cargar esa información para el siguiente proceso.

Esto incluye el contenido del registro, puntero de pila y así sucesivamente.

Vale la pena señalar que el contexto del siguiente proceso incluye su estado de estar en el despachador se interrumpe de manera que, cuando vuelve de la interrupción, es a un proceso totalmente diferente.

+0

"Entonces el despachador (o programador) puede guardar toda la información relevante en un bloque de control de tareas de algún tipo antes de cargar esa información para el siguiente proceso ..." De eso tengo dudas ... Para guardar toda la información, sus valores de PC etc. tienen que cargarse. Entonces, ¿quién almacena los valores anteriores? – Terminal

+0

@Neo, tome Linux como ejemplo. Siempre hay al menos un proceso en ejecución que bifurca a los demás, directa o indirectamente. El sistema operativo configura las cosas al principio para que el cambio funcione. A medida que los procesos se inician y se detienen, se agregan a la cadena de tal forma que se asegure que el planificador funcionará correctamente. – paxdiablo

+0

Gracias ... lo obtuve. La explicación de Mark me da una idea de ello. – Terminal

0

El módulo despachador le da el control de la CPU al proceso seleccionado por el planificador a corto plazo; esto implica: el cambio de contexto, conmutación al modo de usuario, saltar a la ubicación correcta en el programa de usuario para reiniciar ese programa

0

la responsabilidad principal del sistema operativo es el control de la ejecución de los procesos. Esto incluye determinar el patrón de ejecución y asignar recursos a los procesos.

Un proceso puede estar en uno de los dos estados:

  1. Correr o
  2. no se ejecuta

Cuando el sistema operativo crea un nuevo proceso, se crea un bloque de control de proceso para la procesar e ingresa ese proceso en el sistema en el estado No se está ejecutando. El proceso existe y el sistema operativo está esperando una oportunidad para ejecutarlo.

De vez en cuando, los procesos actualmente en ejecución serán interrumpidos y la parte del operador del SO seleccionará algunos otros procesos para ejecutar.

Durante la ejecución cuando el proceso carece de recursos, se bloquea. Con esos recursos, vuelve a entrar en el estado listo y luego en estado de ejecución. Esta transición del estado listo para ejecutarse la realiza el despachador. Dispatcher envía el proceso.

Cuestiones relacionadas