APIC

Anuncio
APIC
Controlador Avanzado Programable de Interrupciones.
El controlador APIC realmente consiste en dos Unidades Funcionales:
IOAPIC:
Es la unidad directamente asociada con la entrada/salida. Es un añadido opcional a la Interfaz PCI-ISA, la
cual ya incorpora un controlador de Interrupciones basado en el 8259.
funciones:
-
Puede trabajar en un entorno monoprocesador y multiprocesador
Gestiona interrupciones en un entorno multiprocesador distribuyendo las interrupciones
entre los procesadores simétricamente bien de forma estática o bien de forma dinámica.
Tiene una latencia de atención a las interrupciones menor debido a la eliminación de los
ciclos de reconocimiento de interrupción.
Debido al uso de un bus local APIC bus entre ambas unidades funcionales, el proceso de
reconocimiento de una interrupción no se realiza al modo estándar por medio de un ciclo
especial de bus
-
Perfecta compatibilidad con el controlador estándar residente en PIIX3.
LocalAPIC:
Es la unidad directamente asociada con el procesador.
funciones:
-
Gestiona la recepción de interrupciones a través del APIC bus.
Maneja interrupciones pendientes, anidamiento de interrupciones, enmascaramiento.
Recibe nuevos mensajes del APIC bus y gestiona su atención emitiendo la interrupción hacia el
procesador si la nueva interrupción es de mayor prioridad que la que está siendo atendida,
reteniéndola si es de menor prioridad o ha sido particularmente enmascarada.
-
-
Se encarga de la gestión de las interrupciones al modo estándar utilizando el así llamado
protocolo INTR/INTA/EOI. Esto es, generando o invocando en el procesador un ciclo
especial de bus de reconocimiento de interrupciones cuando recibe una señal por la entrada
INTR.
También atiende y realiza interrupciones interprocesador (interesantes para entablar
comunicación directa entre los procesadores).
Por último incorpora un timer (también relacionado con las comunicaciones
interprocesador)
1
IOAPIC
CONSTA DE
- 24 entradas de interrupción.
- Tabla de 64 bits por entrada de relocalización de interrupciones.
Esta tabla consiste en una entrada por cada línea de interrupción, que describe el proceso de
atención a esta interrupción:
a) Modo de sensibilidad: por nivel/ por flanco.
b) Vector de interrupción asignado a esta entrada.
c) Nivel de prioridad (observar que ya no existe un nivel de prioridad implícito como
en el 8259)
d) Procesador de destino (en el caso de entorno multiprocesador, el procesador de
destino puede ser uno cualquiera de los dos o uno de ellos en concreto)
e) Modo de selección del procesador (entiendo que cuando es indiferente a qué
procesador está destinada la interrupción, debe poder hacerse una distribución
paritaria de las interrupciones recibidas entre ambos)
-
Registros programables:
Los registros programables son
IOAPIC ID: Contiene un identificador de 4 bit necesario para identificarse dentro del APIC bus
y debe ser programado antes de que el IOAPIC realice alguna acción con el APIC bus.
(Simultáneamente con éste se escribe el ID de la unidad I/O cargándose el mismo dato en ambas)
IOAPIC VER: Su contenido identifica la versión hardware del chip lo que permite al software
adaptarse dinámicamente a posibles modificaciones. (También proporciona este registro el
número máximo de entrada que tiene la tabla de redirección de I/O)
IOAPIC ARB: Contiene la prioridad para este chip dentro del bus APIC, se carga cuando se
escribe en el IOAPIC ID.
El bus APIC es secuencial y utiliza un método de arbitraje de un solo hilo y una prioridad
rotatoria. El ganador del último acceso al bus es el que actualmente tiene la menor posibilidad de
volver a tomarlo. Las prioridades rotan sólo en el caso de que el mensaje haya sido enviado con
éxito. (Aunque al parecer hay un tipo de mensajes de baja prioridad que hace que las prioridades
roten incluso si el mensaje ha sido rechazado - un chequeo erróneo p.ej.)
IOREDTBL[23:0]: Existe un registro por cada línea de interrupción y en el se puede especificar
cómo se va a disparar la interrupción (nivel o flanco), qué vector de interrupción va a invocar en
el procesador, qué nivel de prioridad tiene con respecto al resto de las líneas de interrupción, en
qué procesador se va a invocar y cómo se va a hacer llegar al procesador la información de qué
interrupción se ha disparado.
Cuando se dispara una interrupción, se inhibe de nuevos disparos a esta interrupción en tanto no
se haya enviado el mensaje correspondiente, este haya sido aceptado por uno de los dos
procesadores y el bit correspondiente en el registro IRR (que tiene el mismo nombre y
significado que en el 8250) ha cambiado de 0 a 1 (al parecer si el bit de IRR correspondiente a
una interrupción ya está a 1 indica que la interrupción aún está pendiente de resolver en el
procesador destino)
Acceso a los registros.
No se puede acceder a los registros directamente. Para poder programar el IOAPIC se disponen de dos
registros de acceso:
IO Register Select
IO Windows
(D/I=0)
(D/I=1)
2
Estos dos registros están localizados en el espacio de memoria de los procesadores. En la interfaz PCIISA PIIX3 existe un registros (APICBASE) que contiene la dirección base de memoria a partir de la cual
están localizados IORegSel y IOWin. Modificando este registro se puede localizar al IOAPIC en
cualquier posición de la memoria.
El IO Register Select, o registro de selección de ahora en adelante, indicará a cual de los registros del
IOAPIC deseamos acceder. Existe un código (8 bit como máximo) asociado a cada uno de los registros.
Una vez señalado a qué registro deseamos acceder podemos leer o modificar su contenido leyendo o
escribiendo en el registro IO Windows. Este modo de proceder para acceder a los registros se llama modo
indexado y como se puede observar ahorra muchas direcciones del espacio de memoria o entrada/ salida
(estamos utilizando dos direcciones para ubicar un dispositivo en memoria para acceder realmente a 27
registros)
Todos los accesos a los registros del IOAPIC han de hacerse con tamaño de datos 32 (doble palabra),
aunque en el caso de los accesos a IORegSel sólo sean relevantes los 8 bits menos significativos.
3
4
Descargar