next up previous contents
Next: Upcallsmensajes y PCTs Up: Implementación en el Intel Previous: Implementación en el Intel

Eventos: traps e interrupciones

 

Tanto traps como interrupciones se exportan a las aplicaciones mediante portales. Esto quiere decir que nadie fuera del núcleo recibe directamente eventos enviados por el hardware. Al contrario, estos eventos se transforman en invocaciones de portales dentro del núcleo.

Podemos clasificar los eventos procedentes del hardware (o por el enviados inicialmente) en dos categorías:

Para ambos casos, el tex2html_wrap_inline8127kernel emplea una tabla para mantener los portales que corresponden a los eventos. Las entradas en esta tabla son susceptibles de asignación de tal modo que el usuario puede pedir la asignación de una línea de interrupción (indicando el portal que debe servirla) o de una excepción. Salvo por la interrupción de reloj (empleada por el servidor de shuttles para implementar quantums, y reexportada a los usuarios mediante temporizadores) y la excepción de fallo de página (empleada por el DMM para implementar las DTLBs), el resto de eventos están disponibles para las aplicaciones.

El tratamiento de eventos síncronos es como sigue (ver figura 3.22:

  1. El procesador genera el evento, lo que conduce a la entrada en modo kernel y a la ejecución de una pequeña rutina que llama a shtl_trap_handler, el manejador de excepciones del tex2html_wrap_inline8127kernel.
  2. El manejador comprueba si la excepción corresponde a una llamada al sistema.
    1. En caso afirmativo se llama directamente a shtl_system_call, que ejecutará la llamada al sistema correspondiente.
    2. En caso negativo se consulta en la tabla de traps y se invoca el manejador correspondiente. Nótese que aunque estamos dentro del tex2html_wrap_inline8127kernel estamos ejecutando sobre el shuttle que sufrió la excepción y sujetos a la asignación de procesador determinada por la cola de ejecución que dicho procesador tenga (el tex2html_wrap_inline8127kernel es expulsable).

  figure1863
Figure 3.22: Manejador de traps del tex2html_wrap_inline8127kernel

Cuando el manejador de la excepción retorne se retornará de shtl_trap_handler, lo que conducirá a la reanudación de la ejecución del shuttle interrumpido en el punto en que éste se encontraba antes de la ocurrencia del trap.

El tratamiento de interrupciones es en realidad muy similar, la diferencia principal estriba en que el envío se debe realizar:

Otro pequeño detalle es que la rutina real de tratamiento de interrupciones que invoca a shtl_intr_handler efectúa el acknowledge de la interrupción y la enmascara. Si el manejador de la interrupción desea permitir que ocurran nuevas interrupciones deberá desenmascararla.


next up previous contents
Next: Upcallsmensajes y PCTs Up: Implementación en el Intel Previous: Implementación en el Intel

Francisco J. Ballesteros
Fri Dec 19 17:18:03 MET 1997