Beruflich Dokumente
Kultur Dokumente
ARQUITECURA DE COMPUTADORAS
Ing. EDSON GERARDO BARRIOS OCHAETA
TABLAS IDT
1690-10-684
Introduccin
La interrupcin Descriptor Tabla o IDT, se utiliza con el fin de mostrar el procesador lo Interrumpir
Servicio Rutina (ISR) para llamar a manejar ya sea una excepcin o un cdigo de operacin 'int' (en
el montaje). Entradas IDT tambin son llamados por solicitudes de interrupcin cada vez que un
dispositivo se ha completado un peticin y deben ser atendidos
Modo real
En el 8086 el procesador, el IDT reside en una ubicacin fija en la memoria desde la
direccin 0x0000 a 0x03ff, y consta de 256 de cuatro bytes en modo real punteros (256 4 = 1024 bytes
de memoria). En el 80286 y ms tarde, el tamao y la ubicacin de la IDT se pueden cambiar en la misma
forma que se hace en modo protegido, a pesar de que no cambia el formato de la misma. Un puntero en
modo real se define como un segmento de direccin de 16 bits y un desplazamiento de 16 bits en ese
segmento. Una direccin de segmento se expande internamente por el procesador de 20 bits lo que
limita en modo real manejador de interrupciones a la primera 1 megabyte de memoria direccionable. Los
primeros 32 vectores estn reservados para las excepciones internos del procesador, y alarmas de
proceso se pueden asignar a cualquiera de los vectores por medio de un controlador de interrupciones
programable.
A modo real de interrupcin comnmente usados x86 es INT 10, el BIOS de vdeo de cdigo para manejar
funciones de dibujo pantalla primitiva como el dibujo de pxeles y cambiar la resolucin de pantalla.
El modo protegido
En el modo protegido, el IDT es una serie de descriptores de 8 bytes almacenados consecutivamente en
la memoria y en un ndice por un vector de interrupcin. Estos descriptores pueden ser interrumpir
puertas, trampa puertas o portones de tareas. Interrumpir y puertas trampa apuntan a una ubicacin de
memoria que contiene el cdigo para ejecutar especificando tanto un segmento (presente ya sea en
el GDT o LDT) y un desplazamiento dentro de ese segmento. La nica diferencia entre estos dos es que
una puerta de interrupcin desactivar posterior manejo del procesador de interrupciones de hardware,
por lo que es especialmente adecuado para las interrupciones de hardware del servicio, mientras que
una puerta trampa dejar interrupciones de hardware compatibles y por lo tanto se utiliza
principalmente para el manejo de interrupciones de software y excepciones. Finalmente, una puerta
tarea har que el segmento de estado de tarea actualmente activo que se conecta, mediante el
mecanismo de cambio de tarea de hardware para entregar de manera efectiva sobre el uso del
procesador a otro programa, proceso o subproceso.
El modo protegido IDT puede residir en cualquier lugar en la memoria fsica. El procesador tiene un
registro especial (IDTR) para almacenar tanto la direccin base fsica y la longitud en bytes del
IDT. Cuando se produce una interrupcin, el procesador multiplica el vector de interrupcin por 8 y aade
el resultado a la direccin base IDT. Con la ayuda de la longitud IDT, la direccin de memoria resultante
se verifica para estar dentro de la mesa; si es demasiado grande, se genera una excepcin. Si todo est
bien, el descriptor de 8 bytes almacenados en la ubicacin de memoria calculada se carga y las acciones
se toman segn el tipo y el contenido del descriptor.
Un IDT totalmente poblada es 2 KB (256 entradas de 8 bytes cada uno) de longitud. No es necesario el
uso de todas las posibles entradas: es suficiente para rellenar la IDT hasta el vector de interrupcin ms
alta utilizada, y establecer la porcin de longitud IDT de la IDTR en consecuencia. Vectores 0-31 estn
reservados por Intel para procesadores generada excepciones (error de proteccin general, errores
de pgina, etc.). Aunque actualmente slo se utilizan vectores de 0-18 por el procesador, procesadores
futuros pueden crear incompatibilidades de software roto que utilizan estos vectores para otros fines.
0x00
0x01
Depurador
0x02
NMI
0x03
Breakpoint
0x04
Desbordamiento
0x05
Lmites
0x06
Opcode no vlido
0x07
Coprocesador no disponible
0x08
Culpa Doble
0x09
0x0A
0x0B
0x0C
Error de pila
0x0D
0x0E
Error de pgina
0x0F
reservado
0x10
Matemticas Falla
0x11
Comprobacin de la alineacin
0x12
Comprobacin de equipo
0x13
Conexin
Algunos de Windows programas gancho llama a la IDT. Esto implica escribir un modo de
ncleo conductor que intercepta las llamadas a la IDT y aade en su propio procesamiento. Esto nunca
ha sido apoyado oficialmente por Microsoft, pero no se ha impedido mediante programacin en sus
sistemas operativos hasta 64-bit versiones de Windows, donde un conductor que intenta utilizar
un modo de ncleo gancho har que la mquina de comprobacin de errores.
Ubicacin y Tamao
Localizacin de IDT (direccin y tamao) se mantiene en el registro IDTR de la CPU, que puede ser cargado /
almacenado utilizando instrucciones Lidt, SIDT.
IDTR
Nombre Poco
Descripcin
Define la longitud de la IDT en bytes - 1 (valor mnimo es de 100h, un valor de 1000h significa
Lmite
0..15
Bsico
16..47 Este 32 bits son la direccin lineal donde comienza el IDT (INT 0)
interrupciones 200h).
Hay 256 interrupciones (0..255), por lo IDT debe tener 256 entradas, cada entrada correspondiente a una
interrupcin especfica.
Puede contener ms o menos de 256 entradas. Ms entradas se ignoran. Cuando una interrupcin o excepcin
se invoca cuya entrada no est presente, un GPF se plantea que indica el nmero de la entrada IDT falta, e
incluso si se trataba de hardware o interrupcin de software. Por tanto, debera ser por lo menos lo suficiente
como entradas un GPF puede ser capturado.
Estructura
La tabla contiene Puertas de entrada de 8 bytes. Cada entrada tiene una estructura compleja:
struct IDTDescr {uint16_t
offset_1; pedacitos // desplazamiento 0..15 uint16_t selector; // un selector de segmento de cdigo en GDT o LDT
uint8_t cero; // sin usar, se establece en 0 uint8_t type_attr; // tipo y atributos, ver abajo uint16_t offset_2 ; //
compensar los bits 16..31};
El desplazamiento es un valor de 32 bits, dividido en dos partes. El selector es un valor de 16 bits y debe apuntar
a un selector vlida en su GDT.
70
+ --- + --- + --- + --- + --- + --- + --- + --- +
| P | DPL | S | GateType |
+ --- + --- + --- + --- + --- + --- + --- + --- +
Los campos de bits se refiere a:
Nombre
Poco
Nombre completo
Offset
47
Presente
Descripcin
Se
establece
para paginacin.
en
para
interrupciones
no
utilizados
45,46
44
Segmento
de
almacenamiento
Escribe
0b0101 0x5 5
0b0110 0x6 6
0b0111 0x7 7
Offset
0..15
Offset 0..15
desplazamiento se utilizan para llamar a la rutina de servicio de interrupcin. Cuando el IRET se lee la instruccin,
devuelve. Si ejecuta en modo de 32 bits y el selector especificado es un selector de 16 bits, la CPU pasar en 16
modo protegido poco despus de llamar a la rutina de servicio de interrupcin. Para devolver lo que necesita
hacer O32 IRET, de lo contrario la CPU no sabe que debe hacer una declaracin de 32 bits (32 bits lectura
desplazamiento de la pila en lugar de 16 bits).
type_attr
Escribe
Estos son algunos type_attr valores gente precocinados son propensos a usar (suponiendo DPL = 0):
32-bit puerta de interrupcin: 0x8E (P = 1, DPL = 00b, S = 0, type = 1110b => type_attr = 1000_1110b = 0x8E)
Trampa e interrumpir puertas son similares, y sus descriptores son estructuralmente el mismo, se diferencian slo
en el campo "Tipo". La diferencia es que para las puertas de interrupcin, las interrupciones se desactivan
automticamente al entrar y vuelven a activarse sobre IRET que restaura los EFLAGS guardados.
La eleccin de los valores type_attr: (Ver Descriptores # type_attr)
type_attr
Escribe
Estos son algunos type_attr valores gente precocinados son propensos a usar (suponiendo DPL = 0):
32-bit puerta Trampa: 0x8F (P = 1, DPL = 00b, S = 0, type = 1111b => type_attr = 1000_1111b = 0x8F)
Por lo tanto, Trampa y descriptores de puerta de interrupcin tienen los siguientes datos (que no sean type_attr):
32-bit desplazado hacia ese segmento - direccin del manejador, donde se transfiere la ejecucin
"* NOTA * Debido a IA-32 tareas no son re-entrante, una tarea de interrupcinmanejador debe deshabilitar las interrupciones entre el momento en que finaliza
la manipulacin de la interrupcin y el tiempo que se ejecuta la instruccin IRET.
Esta accin evita que otra interrupcin que ocurra mientras la interrupcin TSS de
tarea todava est marcado ocupado, lo que causara una proteccin general
(#GP) excepcin.
Manual -Intel
type_attr
Escribe
Todo el contexto de la tarea interrumpida se guarda automticamente (sin necesidad de preocuparse por los
registros)
El manejador puede ser aislado de otras tareas en un espacio de direcciones separada en LDT.
"Un nuevo TSS permite al controlador a utilizar un nuevo nivel de privilegio 0 pila al manejar la excepcin o
interrumpir. Si una excepcin o interrupcin ocurre cuando el nivel de privilegio actual 0 pila est daado, el
acceso al controlador a travs de una puerta de tarea puede prevenir una cada del sistema proporcionando el
controlador con un nuevo privilegio nivel 0 pila "manual de --Intel
Desventaja:
Guardar el contexto de la tarea entero en TSS es ms lento que el uso de un / puerta de interrupcin trampa
(en el que el controlador puede guardar slo lo que necesita).
Es mucho ms rpido si el manejador hace PUSHAD o empuja registros uno por uno?
Carga / Almacenamiento
El IDT es cargado usando el lidt instrucciones de montaje. Se espera que la localizacin de una descripcin de la
estructura IDT:
Byte:
+ --------------- + --------------- +
0 | Tamao |
+ --------------- + --------------- +
+ --------------- + --------------- + --------------- + - -------------- +
2 | Offset |
+ --------------- + --------------- + --------------- + - -------------- +
El desplazamiento es la direccin virtual de la propia tabla. El tamao es el tamao de la tabla restado por 1. Esta
estructura se puede almacenar en la memoria otra vez con el SIDT de instrucciones.
IDTR
IDT descriptor
Nulo
12
Nulo
En sus rutinas de controlador de interrupciones, recuerde utilizar IRETQ lugar de IRET, como nasm no se traducir
eso para usted. Muchos de los problemas relacionados con la IDT de 64 bits del foro son causados por esa falta
'Q'. No deje que esto le suceda a usted.
Conclusin
Como se pudo observar que las siglas IDT provienen del Descriptor de Tabla de interrupcin es una
estructura de datos usada por la arquitectura x86 para implementar un vector de
interrupcin tabla. El uso de la IDT es provocada por tres tipos de eventos: interrupciones de
hardware, software.
Un puntero en modo real se define como un segmento de direccin de 16 bits y un desplazamiento
de 16 bits en ese segmento.
En modo protegido la tabla IDT est compuesta por entradas que contienen descriptores de puertas
que permiten acceder al segmento donde se encuentra la rutina.