Arquitectura de Computadoras
Unidad nro 3
Interrupciones
Jorge Echevarría
Interrupciones
Una interrupción es un procedimiento desencadenado por un evento externo que
produce una transferencia impredecible del control de ejecución, desde el programa
o rutina que es interrumpida hacia otra rutina (denominada de atención de la
interrupción)
Una interrupción se compone de 4 etapas
Solicitud: a través de una señal asincrónica de entrada a la CPU, INTR
Reconocimiento: dadas ciertas condiciones temporales y lógicas, la CPU
reconoce el pedido, INTA y comienza con la atención de la interrupción. La
transferencia del control de ejecución no es inmediata ni incondicional.
Atención o ejecución de la rutina: se ejecuta la rutina (programa) de atención al
dispositivo llamada ISR (Interrupt Service Routine)
Retorno: Finalizada la ejecución de la rutina de atención, se produce el retorno
del control de ejecución a la rutina que fue interrumpida, permitiendo al
microprocesador continuar con la ejecución de la misma.
Jorge Echevarría
Resumen introductorio
Una vez que el CPU reconoce que dispositivo solicito la interrupción se ejecuta la
rutina correspondiente a dicha interrupción. Para ello debe conocer la dirección de
memoria donde esta la rutina.
Direccionamiento fijo: La rutina siempre se carga en memoria a partir de la misma
dirección. Ej: el dispositivo que interrumpe envía a la CPU la dirección donde está la
rutina.
Interrupciones vectorizadas: El dispositivo manda una identificación al CPU que
corresponde a la dirección de un vector de interrupciones donde están todas las
direcciones de las rutinas. Es decir le manda un puntero índice al vector.
Las rutinas pueden ejecutarse en serie. Atendiendo y ejecutando las interrupciones
en secuencia.
Las rutinas pueden ejecutarse en forma anidada. Comienza a ejecutar una
interrupción. Si llega otra señal debe ser de mayor prioridad. Se detiene la primera
interrupción y se pasa a ejecutar la segunda.
Jorge Echevarría
Interrupciones
Luego de que una instrucción termina su ciclo de instrucción ( Ej: búsqueda,
decodificación, ejecución y escritura) el procesador o CPU sensa si algún
dispositivo le ha mandado un requerimiento de interrupción, INTR (Interrupt
request). Como si le tocaran timbre a su puerta.
El CPU responde con un reconocimiento de la interrupcion o INTA (Interrupt
acknoledge). Como si preguntara quien es.
Al recibir el INTA, el dispositivo le manda el dato. El CPU hace una lectura del bus
de datos para que entre el “tipo” o dispositivo que quiere ser leído. El dato posee 8
bits, por lo que puede reconocer 256 dispositivos diferentes. El CPU va a tener
asociada una rutina, driver o controlador para atender a dicho dispositivo que se
denomina ISR, Interrupt service request. En la memoria principal va a estar cargada
la rutina de interrupción que sabrá manejar al dispositivo.
El CPU hace un push de los flags. Guarda en la pila el segmento de codigo CS, el
puntero contador de programa IP y los flags o banderas y carga el segmento de
código e IP con el puntero donde esta el driver. El puntero apuntará a la primera
instrucción del programa de interrupción. Tanto el CS como el IP tienen 16 bits
(2bytes). Guarda 4 bytes en la memoria principal.
Jorge Echevarría
Interrupciones
La rutina de interrupción se ejecuta hasta que encuentra la instrucción IRET. En ese
momento hace el pop de la pila del code segment, del IP y de los Flags. Allí vuelve
al punto donde estaba.
En la memoria principal hay un espacio de memoria manejado por el BIOS que es
el vector de interrupciones. Este espacio de memoria se encuentra siempre en el
mismo lugar. Cuando el CPU lee el código de dispositivo lo copia en un registro
desplazado 2 lugares, es decir, lo multiplica por 4. Así el vector de interrupciones
tiene 256 celdas de memoria x 4, 1024 Bytes.
La interrupción se desencadena fuera del CPU, es impredecible.
El CPU en realidad no habla directamente con los dispositivos sino que se
comunica con un PIC que se encarga de indicarle quien interrumpe y maneja las
prioridades.
Jorge Echevarría
Interrupciones - Clasificación
Interrupciones Enmascarables
Una máscara de interrupción es un bit que condiciona el reconocimiento de la
interrupción
Es el flag IF (interrupt Flag)
Si IF=0, la solicitud es ignorada. Si en el debug seteo IF en 0 el CPU no atiende a
las interrupciones y el flag aparece como DI. Si IF=1, el pedido es aceptado,
aparece como EI y se inicia el ciclo de reconocimiento. IF permite habilitar o no la
escucha de interrupciones.
Flag IF=1
Flag IF=0
Las solicitudes se realizan a través de la señal INTR (Interrupt Request)
Se censa en el último ciclo de reloj de la instrucción en curso
Si es INTR=1, la CPU emite la señal INTA (Interrupt Acknowledge) como
reconocimiento
Jorge Echevarría
Interrupciones - Clasificación
Interrupciones No Enmascarables
Las interrupciones no enmascarables no se pueden ignorar. Son como una alarma
de incendio, la atención es incondicional.
La solicitud se realiza a través de la entrada NMI (Non Maskable Interrupt,
interrupción no enmascarable) del CPU. Es una entrada asincrónica activa por
flanco ascendente.
No es necesaria la señal de INTA, no hace todo el ciclo.
Es siempre la interrupción más prioritaria ya que puede interrumpir la ejecución de
cualquier servicio generado por INTR. Ejecuta el tipo 2, Ej: Error de memoria,
pantalla azul.
NMI, se usa para situaciones graves que requieran atención incondicional de la
CPU.
Jorge Echevarría
Interrupciones – Anidamiento
Una interrupción se anida en otra, cuando esta
interrumpe la ejecución de la ISR (Interrupt Service
Rutine) en curso.
Antes de ejecutar la primera instrucción de la ISR, el
CPU coloca el IF=0
Esto puede evitarse mediante el flag IF
Deseo anidamiento
La primera instrucción de atención a la
interrupción es la habilitación de la CPU a
atender nuevas interrupciones (STI)
La última instrucción de atención a la
interrupción devuelve la posibilidad a la CPU
para atender interrupciones (CLI)
No deseo anidamiento
No modifico el flag IF, pongo en el programa
la instrucción CLI, pero antes de volver con
el IRET debo volver a activar el interrupt flag
STI
Jorge Echevarría
Interrupciones – Atención de dispositivos, repaso.
Reconocimiento: Secuencia de eventos
Luego de haber finalizado la instrucción en curso, la CPU se dispone a
reconocer al dispositivo solicitante
El dispositivo solicitante, coloca en el bus de datos 1 byte correspondiente a su
identificación. A ese byte se lo llama “tipo” (Interrupt Type)
La CPU efectúa un ciclo de lectura y toma el “tipo” y con él tiene que
determinar en que dirección de MP está la ISR para comenzar a ejecutarla
Como una dirección de memoria se forma con 2 registros de 16 bits
(SEGMENT:OFFSET), necesita un puntero de 4 bytes para ubicar la ISR en la
MP. En nuestro caso, los registros son CS:IP
Con 1 byte puedo tener 256 “tipos” o dispositivos distintos
Si necesito 4 bytes de puntero para cada uno de ellos Tendré un espacio en
MP de 1024 bytes (1K) con todos los punteros. Este espacio de 1K se llama
Vector de Interrupciones (IVT)
Jorge Echevarría
Interrupciones – Atención de dispositivos
Vector de interrupciones (IVT)
Se encuentra en los primeros 1024 bytes del mapa de memoria. Va desde la
dirección: 00000h a la 003FFh
Como se ubica en la MP puede ser modificado durante la ejecución de cualquier
programa
El tipo 0 es el error de división por 0, se llama a la rutina que atiende el caso.
Del tipo 1 al 5 son dedicados. Ej: Cuando hay overflow llama al tipo 4.
Del 6 al 35 no se utilizan.
Del 36 al 255 son libres para usarse con cualquier dispositivo.
Entradas del vector de interrupciones (4 bytes cada una)
• Está compuesta por dos bytes para alojar el IP y dos para el CS
• El sentido es:
• LSB – IP
• MSB – IP
• LSB – CS
• MSB – CS.
Jorge Echevarría
Interrupciones – Atención de dispositivos
IVT=Interrupt Vector Table
Jorge Echevarría
Interrupciones por Software
Interrupciones por Software
Son instrucciones que provocan que la CPU ejecute alguna de las rutinas de
atención de interrupciones del “tipo” que se indique. Finalizada la ejecución de la
rutina de atención, la CPU continúa ejecutando la instrucción posterior a la
instrucción de interrupción
No son interrupciones propiamente dichas ya que al ser instrucciones, son
predecibles, las provoca el programador. Ej: int 21.
Como son instrucciones, no respetan ningún esquema de prioridades y se anidan
siempre que se incluyan dentro de una rutina de atención de interrupción.
Obviamente no son enmascarables.
Estas instrucciones pueden usarse para transferir el control a rutinas que son
reubicables en memoria (en las que el programa que las llama no conoce la
dirección de inicio de las mismas)
Salvan en el stack el registro de banderas
No ejecutan el ciclo de INTR, INTA, pero si inhiben Single Step y IF durante su
ejecución
Jorge Echevarría
Interrupciones por Software
Instrucciones de interrupciones por SW
INT3
1 byte de longitud
Interrupción de “tipo”=3
Se utiliza para insertar puntos de ruptura en rutinas que están siendo
depuradas, para hacer debug.
INT Xh
Ejecuta el servicio de la interrupción del “tipo”=n
Ocupa dos bytes, uno para el código de operación y otro para el para
el dato del “tipo”
Se pude usar para simular cualquier tipo de interrupción y para
depuración
Como puede manejar varios servicios una rutina ISR?
• El tipo de servicio es pasado como parámetro
• Los parámetros son pasados por registros, no por el stack.
• El valor de retorno, depende del parámetro de código de
servicio.
Jorge Echevarría
Interrupciones por Software
Instrucciones de interrupciones por SW
INTO
“Tipo”=4
Interrumpe el programa si existe un overflow indicado por la activación del flag
OF. Si OF = 0 la instrucción no ejecuta nada (se comporta como un NOP)
Esta instrucción permite corregir errores en el caso de overflow
EJ: Add Ax, Bx
INT 0. (Tipo4) Si se provoca un overflow ejecuta la rutina que lo
atiende.
Jorge Echevarría
Interrupciones por Software
Ejemplos de interrupciones por SW
Funciones de DOS: (Int 21H)
Imprimir un mensaje: DS:DX = dir. Mensaje; AH = 9; int 21h
Salir AH = 4C; int 21h
Leer un carácter AH = 1; int 21h --> AL =caracter ASCII
Imprimir un carácter DL = caracter ASCII ; AH = 2; int 21h
Salida a Impresora DL = caracter ASCII ; AH = 5; int 21h
Servicios del BIOS
Display (Int 10H)
Funciones de E/S a discos (Int 13H)
Teclado (Int 16H) [Lectura AH=0]
Impresoras (Int 17H) para funciones de impresora
Jorge Echevarría
Interrupciones por Software
Interrupciones de error
Se producen por lo general por un error de software
No respetan esquema de prioridades
En el 8086 hay solo una: “Tipo”=0 – Error al dividir
Ocurre cuando se intenta dividir por 0
La dirección de retorno de la rutina de atención de este tipo apunta a la misma
instrucción que se terminó de ejecutar antes de producirse este error
Permite corregir el error que provocó la interrupción en la rutina de atención y
volver a empezar
No es enmascarable.
Jorge Echevarría
Interrupciones por Software
Interrupciones de Trampa (Modo paso a paso)
Si el bit TF (Trap Flag) está activo, después de la ejecución de cada instrucción se
produce una interrupción “tipo”=1. Ejecuta la instrucción y para.
Al aceptar esta interrupción, se borra el TF de manera de ejecutar la rutina de
atención en forma normal
Se setea el flag de trampa muchas veces.
Se usa para implementar una rutina para el monitoreo durante la depuración de
programas
Comienza a ejecutarse una instrucción después de que se activó el bit TF
No es enmascarable
Jorge Echevarría
Interrupciones – Secuencia
Cada vez que la CPU finaliza la ejecución de una instrucción, comprueba:
Si está activa la trampa (TF=1)
Si hubo pedido NMI
Si hay overflow
Si la próxima es una instrucción INT
Si se da alguna de estas condiciones, entonces se produce la siguiente
secuencia:
Si hay un INTR, se realiza la secuencia de reconocimiento de interrupción
Se salvan los flags en la pila
Se desactivan la máscara de interrupción IF y el TF
Se salva el CS en la pila
Se salva el IP en la pila
Se recupera el contenido del vector de interrupción y se carga el CS y el IP
en con su contenido
la CPU continúa ejecutando en la atención de la interrupción
Jorge Echevarría
Controlador de Interrupciones
Intel 8259A (PIC = Programmable Interrupt Controller) - Chipset
Amplía la estructura de interrupciones del 8086
Es configurable y programable
Se lo considera como un dispositivo más del chipset
Conectándolo 8 8259A en cascada (8+1) maneja 64 interrupciones
Durante el booteo, la BIOS programa mapea las IR0 a IR7 a los tipos 08h
a 0Fh. La IR0 tiene la mayor prioridad
Se puede enmascarar cada una de las IR por separado
Jorge Echevarría
Controlador de Interrupciones
Prioridad de Interrupción
Que rutina ISR se ejecuta si dos interrupciones ocurren al mismo tiempo
Si la CPU esta ejecutando una rutina ISR y un segundo dispositivo (de mayor
prioridad) interrumpe, ¿que ISR sigue ejecutando?
El controlador intentará permitir a una interrupción de mayor prioridad interrumpir
otra de menor. La segunda interrupción no será reconocida por el procesador sino
hasta que IF=1 (habiliten las interrupciones)
Jorge Echevarría
Controlador de Interrupciones
Prioridad de Interrupción
Si una interrupción de baja prioridad sucede a otra de alta prioridad, el controlador
mantiene la prioridad.
El controlador recuerda la interrupción de baja prioridad hasta que la de alta
prioridad haya terminado
Cuando terminó, el controlador genera otra interrupción a favor del dispositivo lento
¿Cuantas interrupciones puede recordar el controlador?
¿Como sabe el controlador que la interrupción de alta prioridad terminó?
Jorge Echevarría
Interrupciones de la BIOS
Las Interrupciones de la BIOS
INT 10h: Servicios de Vídeo (texto y gráficos).
INT 11h: Informe sobre la configuración del equipo.
INT 12h: Informe sobre el tamaño de la memoria convencional.
INT 13h: Servicios de disco (muy elementales: pistas, sectores, etc.).
INT 14h: Comunicaciones en serie.
INT 15h: Funciones casette (PC) y servicios especiales del sistema (AT).
INT 16h: Servicios de teclado.
INT 17h: Servicios de impresora.
INT 18h: Llamar a la ROM del BASIC (sólo máquinas IBM).
INT 19h: Reinicialización del sistema.
INT 1Ah: Servicios horarios.
INT 1Fh: Apunta a la tabla de los caracteres ASCII 128-255 (8x8 puntos).
Jorge Echevarría
Lista de Interrupciones
Las cinco Interrupciones dedicadas (0 a 4)
Interrupción 0 (división por cero)
Invocada por la CPU despues de un DIV o IDIV, si el divisor es 0 o el resultado
no entra en el destino
Interrupción 1 (paso a paso)
Usado por los debuggers para soportar pasos simples
Interrupción 2 (no enmascarable)
Interrupciones x hardware que no puede ser deshabilitada
Interrupción 3 (breakpoint)
Usado por los debuggers para establecer puntos de detención en el programa
Interrupción 4 (overflow)
Usado en librerías numéricas para atrapar errores de overflow
Jorge Echevarría
Lista de Interrupciones
Las Interrupciones de Hardware
INT 8h: Se produce con una frecuencia periódica determinada por el IR0 del chip
temporizador 8253/8254 (en la práctica, unas 18,2 veces por segundo).
INT 9h: Generada al pulsar o soltar una tecla
INT 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh: Puertos serie, impresora y controladores de
disquete
INT 70h, 71h, 72h, 73h, 74h, 75h, 76h, 77h: Generadas en los ATs y maquinas
superiores por el segundo chip controlador de interrupciones.
Jorge Echevarría
Interrupciones del DOS
Las Funciones del DOS
INT 20h: Terminar programa (tal vez en desuso).
INT 21h: Servicios del DOS. (devuelve acarreo si hay error)
INT 22h: Control de finalización de programas.
INT 23h: Tratamiento de Ctrl-C.
INT 24h: Tratamiento de errores críticos.
INT 25h: Lectura absoluta de disco (sectores lógicos).
INT 26h: Escritura absoluta en disco (sectores lógicos).
INT 27h: Terminar dejando residente el programa (en
desuso).
INT 28h: Idle (ejecutada cuando el ordenador está
inactivo).
INT 29h: Impresión rápida en pantalla (no tanto).
INT 2Ah: Red local MS NET.
INT 2Bh-2Dh: Uso interno del DOS.
INT 2Eh: Procesos Batch.
INT 2Fh: Interrupción Multiplex.
INT 30h-31h: Compatibilidad CP/M-80.
INT 32h: Reservada.
Jorge Echevarría