2010-05-24 18 views

Respuesta

2

Comience aquí con el Interrupt Descriptor Table. Básicamente, cuando ocurre una interrupción, el control de flujo salta a esta tabla y luego a lo que está en esta tabla. Además, creo que todos los registros se envían tan pronto como se produce la interrupción, pero no estoy 100% seguro de esto, ya que ha pasado mucho, mucho tiempo desde que resolví esto.

+1

Todos los registros y las banderas se presionan antes de que se produzca la interrupción y se reventan después de que finaliza el código de manejo de interrupciones. – nc3b

+0

Sí, un poco lo que pensaba. En algunas de las cosas en las que he trabajado, has tenido que empujarte y estallar. Estaba bastante seguro de que x86 hizo esto por ti. –

+5

Las banderas del procesador se presionan automáticamente, pero los otros registros no; cuando se envía, el ISR debe preservar explícitamente todos los registros que intente alterar. – ChrisW

8

Cuando se produce una interrupción, la CPU hace lo siguiente:

  • Empuje la dirección actual (contenido del puntero de instrucción) en la pila; también, presione los indicadores del procesador (pero no todos los demás registros del procesador)
  • Vaya a la dirección del ISR (Rutina de servicio de interrupción), que se especifica en la Tabla de descriptores de interrupción.

La ISR deben hacer lo siguiente:

  • introduzca ningún registros que se propone alterar (o, empujar todos los registros)
  • manija la interrupción
  • Vuelva a activar interrumpe
  • Pop cualquier registros que presionó
  • Utilice las instrucciones IRET, que muestra los indicadores de CPU y el valor del puntero de instrucción de la pila (y, por lo tanto, regresa a whateve r se estaba ejecutando cuando ocurrió la interrupción).
+1

¿Se produce en la pila del programa de espacio de usuario o en alguna pila interna de kernel? –

Cuestiones relacionadas