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:
Su característica más interesante, al menos para la implementación del sistema, es que el shuttle que los sufre no es capaz de continuar su ejecución hasta el punto en que el evento se ha tratado. De hecho estos eventos suelen indicar la necesidad de efectuar algún tipo de tarea antes de poder proseguir con la ejecución del shuttle que los sufrió. No sólo es factible, sino incluso aconsejable, emplear tanto el shuttle que sufrió el evento como el(los) quantums de procesador que dicho shuttle tiene asignados para procesar el evento.
En este caso el shuttle que los sufre puede perfectamente proseguir su ejecución con independencia del tratamiento del evento. De hecho, lo habitual es que el evento no esté dirigido al shuttle que lo sufre sino a otro cualquiera. Ahora, al contrario que en el caso anterior, no es necesario (de hecho, no suele ser conveniente) emplear el shuttle interrumpido para gestionar el evento.
Para ambos casos, el
kernel 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:
shtl_trap_handler, el manejador de excepciones del shtl_system_call, que ejecutará la llamada al sistema
correspondiente.

Figure 3.22: Manejador de traps del
kernel
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:
Aunque también se podría haber preparado la llamada asíncrona en el shuttle servidor y esperar a que le llegue su turno de ejecución esto supondría emplear más quantum del remitente, razón por la que no se ha hecho así.
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.