Professional Documents
Culture Documents
El PIC dispone de 16 niveles de prioridad, numerados del 0 al 15, de forma que los
de número más bajo se atienden antes que los de número más alto. La asignación
a cada nivel es como sigue:
Registro de interrupciones activas ISR ("In Service Register"). Cada bit indica si
ya existe una interrupción activada en la línea correspondiente.
El 8259A tiene distintos modos de operación, uno de los cuales es el utilizado por
los diseñadores del PC; esta selección se realiza vía software en los momentos
iniciales. También se decide en este momento que número de interrupción deberá
devolver el PIC en respuesta a las señales recibidas en las líneas IRQ.
§6 Tipos de interrupción
El valor recibido (0-255) es multiplicado por 4 para calcular la dirección del vector
correspondiente en la tabla de vectores de interrupción, lo que se realiza mediante
un desplazamiento binario de dos posiciones a la izquierda ( 4.9.3). A
continuación, el procesador salva en la pila los valores del registro de estado (
H3.2), del contador de programa (PC) y del segmento de código (CS); deshabilita
el bit IF del registro de estado, para que la interrupción no pueda ser molestada
con una nueva interrupción enmascarable hasta que sea específicamente permitido,
y finalmente ejecuta el servicio.
La segunda mueve el valor EOI (nemónico del valor 20h) al registro AL.
Este tipo de interrupciones son de prioridad más alta que las de hardware
(enmascarables y no enmascarables), de forma que si se recibe una interrupción
hardware mientras que se ejecuta una software, esta última tiene prioridad.
Este tipo de interrupciones son utilizadas tanto por el Sistema Operativo como por
los programas de usuario que pueden instalar las suyas particulares (hemos
señalado , que algunas de las 255 posiciones de la tabla de vectores de
interrupción están desocupadas). Precisamente, aquellas posiciones de la IDT que
señalan a posiciones dentro de la ROM-BIOS (por encima de la dirección F0000h
H5.1) se refieren a interrupciones relacionadas con servicios de la BIOS, mientras
que las situadas en la zona de memoria convencional, se refieren a
interrupciones instaladas por el Sistema o los programas de aplicación.
En el caso de la división por cero el número asociado es cero. Este era el único tipo
de excepción de procesador prevista en el 8088, pero en los modelos sucesivos de
la saga x86 y Pentium esta posibilidad fue ampliándose paulatinamente.
§7 Evolución
Puede apreciarse que los dispositivos PCI comparten las IRQ11 e IRQ5. Como es
habitual, las controladoras IDE primaria y secundaria, identificadas aquí como ide0
e ide1, utilizan IRQ14 e IRQ15. Los dispositivos identificados como eth0 y eth1
son sendas tarjetas de red. ttyS03 es un puerto serie cuya UART es una 16550A (
2.5.11). Yenta se refiere al tipo de controladora de conexión de los
dispositivos PCMCIA (se trata de un equipo portátil que dispone de este tipo de
bahías).
§8 Interrupciones en Windows
Hemos señalado que en los sistemas Windows, cada aplicación corre en una
máquina virtual MV ( 0.2), de modo que está más alejada del hardware que las
aplicaciones que se ejecutan en modo real. En este caso, las aplicaciones
interactúan con dispositivos virtuales VDs ("Virtual devices") a través de
controladores virtuales de dispositivos VxDs.
Lo mismo que ocurre en modo real, durante la inicialización del controlador virtual
VPICD, se establece un manejador de excepciones por defecto para cada petición
de interrupción (IRQ). Estos manejadores determinan que máquina virtual será
afectada y con que interrupción. También arbitran los posibles conflictos cuando
diversas máquinas virtuales intentan desenmascarar la misma interrupción.
Cualquier interrupción no enmascarada cuando se inicia Windows es considerada
una interrupción global. Este tipo de interrupciones serán reflejadas en la máquina
virtual que esté en ejecución en ese momento (a su vez la MV puede enmascarar o
no enmascarar esta IRQ).
Si una MV desenmascara una IRQ que fue enmascarada cuando se inició Windows,
es declarada propietaria de dicha interrupción, y la IRQ será reflejada
exclusivamente en su máquina propietaria (si alguna otra MV intenta
desenmascarar dicha interrupción, Windows terminará la segunda MV, y puede
señalar la necesidad de reiniciar el sistema).
Si algún otro VxD virtualiza una petición IRQ, es su responsabilidad determinar que
MV debe recibir las interrupciones y arbitrar los posibles conflictos. Además, el
controlador por virtual por defecto VPICD dejará de proporcionar soporte para
dicha IRQ.
Las interrupciones, tal y como indica su nombre, tienen como función interrumpir
en medio de un procedimiento, ejecutar un trozo de código y continuar con lo que
se estaba haciendo. De esta manera la CPU se ahorra de ir preguntado todo el
rato a los diferentes periféricos si “necesitan” su ayuda (polling). Hay de varios
tipos, las que son ejecutadas por el hardware, las del Sistema Operativo y las
iniciadas por el sistema (BIOS). Dentro de estas hay las enmascarable, y las no
enmascarables (NMI).
El B.I.O.S ( Basic Input Output System) tiene una serie de interrupciones, para
que cuando utilicemos alguna de ellas sepamos donde se encuentra. Para eso
utilizaremos una tabla que nos servirá de “índice” para así obtener la dirección de
la rutina. Esta tabla se aloja en la parte más baja de la memoria, es decir, en
0000:0000, y tiene una longitud de 256 entrada de 4bytes cada una; 2 bytes de
dirección (segmento) y 2 bytes de desplazamiento (offset), o sea, 1 kb en total.