stringtranslate.com

Tabla de descriptores de interrupción

La tabla de descriptores de interrupciones ( IDT ) es una estructura de datos utilizada por la arquitectura x86 para implementar una tabla de vectores de interrupciones . El procesador utiliza el IDT para determinar las direcciones de memoria de los controladores que se ejecutarán en interrupciones y excepciones .

Los detalles de la descripción siguiente se aplican específicamente a la arquitectura x86. Otras arquitecturas tienen estructuras de datos similares, pero pueden comportarse de manera diferente.

El IDT consta de 256 vectores de interrupción y el uso del IDT se activa mediante tres tipos de eventos: excepciones del procesador, interrupciones de hardware e interrupciones de software, que en conjunto se denominan interrupciones :

modo real

En modo real , la tabla de interrupciones se llama IVT (tabla de vectores de interrupción). Hasta el 80286, el IVT siempre residía en la misma ubicación en la memoria, desde 0x0000hasta 0x03ffy constaba de 256 punteros lejanos . Las interrupciones de hardware pueden asignarse a cualquiera de los vectores mediante un controlador de interrupciones programable. En el 80286 y posteriores, el tamaño y las ubicaciones del IVT se pueden cambiar de la misma manera que se hace con la IDT (tabla de descriptores de interrupción) en modo protegido (es decir, a través de la instrucción LIDT (Registro de tabla de descriptores de interrupción de carga)) aunque no cambia el formato del mismo. [3]

Interrupciones del BIOS

El BIOS proporciona acceso sencillo en modo real a un subconjunto de instalaciones de hardware mediante el registro de controladores de interrupciones. Se invocan como interrupciones de software con la instrucción ensambladora INT y los parámetros se pasan a través de registros. Estas interrupciones se utilizan para diversas tareas, como detectar el diseño de la memoria del sistema , configurar la salida y los modos VGA y acceder al disco en las primeras etapas del proceso de arranque.

Modo protegido y largo

El IDT es una matriz de descriptores almacenados consecutivamente en la memoria e indexados por el número de vector. No es necesario utilizar todas las entradas posibles: basta con rellenar la tabla hasta el vector de interrupción más alto utilizado y establecer la parte de longitud IDT del IDTRcorrespondiente.

El registro IDTR se utiliza para almacenar tanto la dirección base lineal como el límite (longitud en bytes menos 1) del IDT. Cuando ocurre una interrupción, el procesador multiplica el vector de interrupción por el tamaño de la entrada (8 para el modo protegido, 16 para el modo largo) y suma el resultado a la dirección base IDT. [4] Si la dirección está dentro de la tabla, se verifica el DPL y la interrupción se maneja según el tipo de puerta.

Los descriptores pueden ser puertas de interrupción, puertas de trampa o, únicamente para el modo protegido de 32 bits, puertas de tareas. Las puertas de interrupción y captura apuntan a una ubicación de memoria que contiene código para ejecutar especificando un segmento (presente en GDT o LDT ) y un desplazamiento dentro de ese segmento. La única diferencia entre las puertas de captura y de interrupción es que las puertas de interrupción deshabilitarán el procesamiento posterior de interrupciones de hardware enmascarables, lo que las hace adecuadas para manejar interrupciones generadas por hardware (por el contrario, las puertas de captura son útiles para manejar interrupciones y excepciones de software). Una puerta de tareas hará que se cambie el segmento de estado de la tarea actualmente activo, utilizando el mecanismo de cambio de tareas del hardware para transferir efectivamente el uso del procesador a otro programa, subproceso o proceso.

Diseños IDT comunes

Diseño oficial de Intel

Todos los INT_NUM entre 0x0 y 0x1F, inclusive, están reservados para excepciones por parte de Intel. [5] Se deben utilizar INT_NUM mayores que 0x1F para rutinas de interrupción.

Diseño de PC IBM

La PC IBM ( tiempo de ejecución BIOS y MS-DOS ) no sigue el diseño oficial de Intel más allá de los primeros cinco vectores de excepción implementados en el 8086 original. La interrupción 5 ya se usa para manejar la tecla Imprimir pantalla , IRQ 0-7 está asignada a INT_NUM 0x08-0x0F y BIOS utiliza la mayoría de los vectores en el rango 0x10-0x1F como parte de su API. [6]

Enganche

Algunos programas de Windows conectan llamadas al IDT. Esto implica escribir un controlador en modo kernel que intercepte llamadas al IDT y agregue su propio procesamiento. Esto nunca ha sido admitido oficialmente por Microsoft , pero no se evitó mediante programación en sus sistemas operativos hasta las versiones de 64 bits de Windows, donde un controlador que intenta usar un enlace en modo kernel hará que la máquina realice una verificación de errores . [7]

Ver también

Referencias

  1. ^ "Excepciones - OSDev Wiki". wiki.osdev.org . Consultado el 17 de abril de 2021 .
  2. ^ Friesen, Brandon. "IRQ y PIC". Tutorial de desarrollo del kernel de Bran . Consultado el 6 de junio de 2024 .
  3. ^ Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, 20.1.4 Manejo de interrupciones y excepciones
  4. ^ Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, 6.12.1 Procedimientos de manejo de excepciones o interrupciones
  5. ^ "Excepciones - OSDev Wiki". wiki.osdev.org . Consultado el 17 de abril de 2021 .
  6. ^ Jürgens, David. "Tabla de interrupciones implementada por el BIOS/DOS del sistema". Biblioteca de referencia de HelpPC . Consultado el 6 de junio de 2024 .
  7. ^ "Política de parches para sistemas basados ​​en x64". Microsoft . Si el sistema operativo detecta una de estas modificaciones o cualquier otro parche no autorizado, generará una verificación de errores y apagará el sistema.
General

enlaces externos