Sie sind auf Seite 1von 13

Universidad Mariano Glvez de Guatemala

Santa Elena, Petn

ARQUITECURA DE COMPUTADORAS
Ing. EDSON GERARDO BARRIOS OCHAETA

TABLAS IDT

Carlos Eduardo Canuz Vargas

1690-10-684

Santa Elena, Petn, 07 de septiembre 2015

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

Tabla de descriptores de interrupcin


El Descriptor de Tabla de interrupcin (IDT) es una estructura de datos usada por la arquitectura x86 para
implementar un vector de interrupcin tabla. El IDT es utilizado por el procesador para determinar la
respuesta correcta a las interrupciones y excepciones.
Los detalles en la descripcin a continuacin se aplican especficamente a la arquitectura x86
y AMD64 arquitectura. Otras arquitecturas tienen estructuras de datos similares, pero pueden
comportarse de manera diferente.
El uso de la IDT es provocada por tres tipos de eventos: interrupciones de hardware, software,
interrupciones y excepciones del procesador, que en conjunto se conocen como "interrupciones". El IDT
consta de 256 vectores de interrupcin -el primero 32 (0-31 o 00-1F) de los cuales estn reservados para
las excepciones del procesador.

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.

Excepciones Hardware generados


Todo INT_NUM entre 0x0 y 0x1F, inclusive, estn reservados para las excepciones; INT_NUM mayor que
0x1F se utilizan para rutinas de interrupcin. (Tenga en cuenta que el IBM PC no siempre obedece esta
regla, por ejemplo el uso de interrupcin 5 para indicar el Print Screen clave fue presionado.)

INT_NUM Descripcin breve PM

0x00

Divisin por cero

0x01

Depurador

0x02

NMI

0x03

Breakpoint

0x04

Desbordamiento

0x05

Lmites

0x06

Opcode no vlido

0x07

Coprocesador no disponible

0x08

Culpa Doble

0x09

Coprocesador Segment Overrun (386 o ms temprano solamente)

0x0A

Invlido Segmento Estado de tareas

0x0B

Segmento no est presente

0x0C

Error de pila

0x0D

Error de proteccin general

0x0E

Error de pgina

0x0F

reservado

0x10

Matemticas Falla

0x11

Comprobacin de la alineacin

0x12

Comprobacin de equipo

0x13

SIMD Floating-Point Excepcin

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).

Esto es similar a la GDT, con excepcin de:

La primera entrada (en cero offset) se utiliza en el IDT.

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.

type_attr se especifica aqu:

70
+ --- + --- + --- + --- + --- + --- + --- + --- +
| P | DPL | S | GateType |
+ --- + --- + --- + --- + --- + --- + --- + --- +
Los campos de bits se refiere a:

Entrada IDT, Interrupt Puertas

Nombre

Poco

Nombre completo

Offset

48..63 Offset 16..31

47

Presente

Descripcin

Mayor parte de la compensacin.

Se

establece

para paginacin.

en

para

interrupciones

no

utilizados

Llamada Puerta de proteccin. Especifica el nivel de privilegio al


DPL

45,46

Descriptor de nivel llamar descriptor mnimo debera tener. As interrupciones de


de privilegio

hardware y CPU pueden ser protegidos de beeing llamada de espacio


de usuario.

44

Segmento

de

almacenamiento

Se establece en 0 para las puertas de interrupcin (ver ms abajo).

Posibles tipos de compuerta IDT:

Escribe

0b0101 0x5 5

80386 32 bits puerta tarea

0b0110 0x6 6

80286 de 16 bits puerta de interrupcin

0b0111 0x7 7

80286 de 16 bits trampa puerta

40..43 Tipo Puerta 0..3

0b1110 0xE 14 80386 de 32 bits puerta de interrupcin

0b1111 0xF 15 80386 de 32 bits trampa puerta

32..39 0..7 Unused

Seleccionador 16..31 Selector 0..15

Offset

0..15

Offset 0..15

Tiene que ser 0.

Selector de la funcin de interrupcin (que tiene sentido - Selector


del kernel). DPL campo de descriptor de El selector tiene que ser 0.

Parte inferior de la direccin de desplazamiento de la funcin de


interrupcin (tambin conocido como puntero).

I386 interrupcin Puerta


La puerta de interrupcin se utiliza para especificar una rutina de servicio de interrupcin. Al hacer INT 50 en
asamblea, que se ejecuta en modo protegido, la CPU busca la entrada nmero 50 (que se encuentra en el 50 * 8)
en el IDT. Entonces el selector de interrupcin Gates y valor de desplazamiento es cargado. El selector y el

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

0b1110 = 0xE 32-bit puerta de interrupcin

0b0110 = 0x6 16-bit puerta de interrupcin

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)

I386 Trampa Puerta


Cuando se produce una interrupcin / excepcin de que corresponde a una Trampa o interrupcin Gate, la CPU
coloca la informacin de retorno en la pila (EFLAGS, CS, EIP), por lo que el manejador de interrupciones puede
reanudar el cdigo interrumpida por IRET.
Entonces, la ejecucin se transfiere al selector dado: desplazado del descriptor puerta.
Para algunas excepciones, un cdigo de error tambin se empuja en la pila, que debe ser hecho estallar antes de
hacer IRET.

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

0b1111 = 0xf 32-bit trampa puerta

0b0111 = 0x7 16-bit trampa puerta

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):

Selector de 16 bits de un segmento de cdigo en GDT o LDT

32-bit desplazado hacia ese segmento - direccin del manejador, donde se transfiere la ejecucin

I386 Puerta de tareas


En el descriptor de la Puerta de tareas las de compensacin no se utilizan valores. Establezca a 0.
Cuando se produce una interrupcin / excepcin cuya entrada es una puerta de tareas, se produce un cambio de
tarea.

"Una puerta de tarea en el IDT hace referencia a un descriptor de TSS en el GDT.


Un cambio a la tarea manejador se maneja de la misma manera que un cambio de
tarea ordinaria. (..) El acoplamiento de nuevo a la tarea interrumpida se almacena
en la tarea anterior campo de enlace de los SAT de la tarea manejador. Si una
excepcin caus un cdigo de error que se genere, este cdigo de error se copia
en la pila de la nueva tarea.
Manual -Intel (p.5-19 vol.3)

"* 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

La eleccin de los valores type_attr: (Ver

type_attr

Escribe

0b0101 = 0x5 puerta de tarea

Para DPL = 0, type_attr = 0x85 = 0b0101


Por lo tanto, un selector de TSS es la nica pieza de encargo de los datos que necesita para un descriptor Puerta de
tareas.

Ventajas sobre el uso de trampas / puertas de interrupcin:

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?

Hace alguna diferencia, teniendo en cuenta un no-ficticia, manejador no trivial?

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.

IDT en el modo IA-32e (64-bit IDT)


Cuando est en modo largo o compatibilidad (una vez que la bandera EFER.LME se ha establecido) la estructura de
la IDT cambia ligeramente. La estructura de IDTR (utilizado por lidt y SIDT) base de cambios de campo a 64-bits
para permitir que el IDT para residir en cualquier lugar de la memoria, y cada entrada de la IDT crece un 64-bits. El
primer valor de 32 bits son los altos bits de la direccin, mientras que el segundo es cero.

IDTR

Offset Tamao Descripcin

Lmite - byte direccionable mxima en la tabla

Offset - Lineal electrnico (paginado) Base de IDT

IDT descriptor

Offset Tamao Descripcin

Bits de offset bajo (0..15)

Selector (Selector segmento de Cdigo)

Nulo

Tipo y atributos (igual que antes)

Trozos medianos Offset (16..31)

Bits de altas Offset (32..63)

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.

Das könnte Ihnen auch gefallen