2010-08-03 45 views

Respuesta

16

Hay una buena página de wikipedia en interrupt handlers.

"un manejador de interrupciones, también conocido como una rutina de servicio de interrupción (ISR), es una subrutina de devolución de llamada en un sistema operativo o controlador de dispositivo cuya ejecución se desencadena por la recepción de una interrupción. Interrumpir manipuladores tienen una multitud de funciones, que varían en función del motivo por el que se generó la interrupción y la velocidad a la que el Manejador de interrupciones completa su tarea ".

Básicamente, cuando una pieza de hardware (una interrupción de hardware) o alguna tarea de SO (interrupción de software) necesita ejecutarse desencadena una interrupción. Si estas interrupciones no están enmascaradas (ignoradas), el sistema operativo detendrá lo que está haciendo y llamará a un código especial para manejar este nuevo evento.

Un buen ejemplo es leer desde un disco duro. La unidad es lenta y no desea que su sistema operativo espere a que los datos vuelvan; quieres que el SO vaya y haga otras cosas. Entonces configura el sistema para que cuando el disco tenga los datos solicitados, genere una interrupción. En la rutina de servicio de interrupción para el disco, la CPU tomará los datos que ahora están listos y los devolverá al solicitante.

Los ISR a menudo tienen que suceder rápidamente ya que el hardware puede tener un buffer limitado, que será sobrescrito con nuevos datos si ahora se quita lo suficientemente rápido. También es importante completar su ISR rápidamente, ya que mientras la CPU esté dando servicio a un ISR, se enmascararán otras interrupciones, lo que significa que si la CPU no puede acceder a ellos con la suficiente rapidez, los datos pueden perderse.

0

La mejor manera de entender es hacer algunos ejemplos mínimos usted mismo.

Mínimo ejemplo de 16 bits

En primer lugar aprender a crear un sistema operativo mínimo gestor de arranque y ejecutarlo en QEMU y hardware real como he explicado aquí: https://stackoverflow.com/a/32483545/895245

Ahora se puede ejecutar en 16 bits en modo real:

movw $handler0, 0x00 
    mov %cs, 0x02 
    movw $handler1, 0x04 
    mov %cs, 0x06 
    int $0 
    int $1 
    hlt 
handler0: 
    /* Do 0. */ 
    iret 
handler1: 
    /* Do 1. */ 
    iret 

Esto haría en orden:

  • Do 0.
  • Do 1.
  • hlt: detener la ejecución de

Nota cómo el procesador busca el primer controlador en la dirección 0, y la segunda a 4: que es una tabla de manejadores de llamada IVT, y cada entrada tiene 4 bytes.

Minimal example that does some IO para hacer que los controladores estén visibles.

modo protegido

sistemas operativos modernos funcionan en el llamado modo protegido.

El manejo tiene más opciones en este modo, por lo que es más complejo, pero el espíritu es el mismo.

Minimal example

Véase también

pregunta relacionada: What does "int 0x80" mean in assembly code?

Cuestiones relacionadas