RE:interrupciones de lenguaje ensamblador
Publicado por
bonDD (1 intervención) el 02/04/2008 05:24:10
INTERRUPCIONES
Una interrupción es un mecanismo que permite ejecutar un bloque de instrucciones interrumpiendo la ejecución de un programa, y luego restablecer la ejecución del mismo sin afectarlo directamente. De este modo un programa puede ser interrumpido temporalmente para atender alguna necesidad urgente del computador y luego continuar su ejecución como si nada hubiera pasado.
Generalmente se aplica para realizar tareas elementales asincrónicas en el computador tales como responder al teclado, escribir en la pantalla, leer y escribir archivos. Podemos considerar una tarea asincrónica como aquella que es solicitada sin previo aviso y aleatoriamente desde el punto de vista del computador. Tomemos el caso de la operación Ctrl-Alt-Supr. En Windows tiene el efecto de que aparece en pantalla una lista de los procesos y ventanas en ejecución en el computador. En cambio en el Sistema Operativo DOS cuando el usuario presiona simultáneamente dichas teclas el computador procede a reinicializarse, aunque pueda estar ocupado ejecutando un programa en ese instante. Vale decir fuerza obligadamente a que el computador se reinicialice. Ya sea en el sistema Windows o en DOS, el computador no está constantemente monitoreando el teclado para ver si el usuario ha solicitado un Ctrl-Alt-Del, ya que en ese caso consumiría mucho tiempo de proceso en ello y por ende la capacidad de proceso se vería significativamente afectada. La solución empleada es una interrupción.
Luego cada vez que el usuario presiona una tecla, la CPU es advertida a través de una señal especial de interrupción. Cuando la CPU advierte/recibe una señal de interrupción suspende temporalmente el proceso actual almacenando en memoria RAM un bloque con toda la información necesaria para restablecer posteriormente la ejecución del programa si es que procede. Enseguida la CPU determina qué elemento ha solicitado la interrupción y para cada caso existe un bloque de instrucciones que realiza la tarea correspondiente que es ejecutada a continuación. Terminada la ejecución se restablece el programa original en el mismo punto en que fue interrumpido usando para ello la información almacenada previamente.
Cada interrupción tiene asignada un número único. El PC está diseñado de manera que la interrupción tiene asignada 4 bytes de memoria RAM. La dirección de los cuatro bytes en la memoria corresponde al número de la interrupción multiplicado por 4. Por ejemplo la interrupción IRQ 5 tiene asignada 4 bytes en la dirección 0x00014 (0000:0014). El contenido de los 4 bytes de memoria RAM asignados a una interrupción contiene a su vez una dirección que es un puntero a un bloque de instrucciones de máquina que realiza el procedimiento correspondiente. De este modo al iniciar la ejecución de una interrupción de los cuatro bytes que tiene asignados se obtiene la dirección del bloque de instrucciones que efectivamente se ejecutan. Por ejemplo si en la dirección 0000:0014 estuviera almacenado el valor 0xFFF00, ello significa que en dicha dirección (ó (F000:FF00) se encuentra el bloque de instrucciones a ejecutar cuando la interrupción IRQ 5 sea requerida.
Esta forma de direccionamiento indirecto para las interrupciones brinda la flexibilidad necesaria para perfeccionar, modificar y extender el código de instrucciones correspondiente permitiendo mantener por ejemplo la compatibilidad de las distintas versiones de BIOS con las aplicaciones y equipos que usan las interrupciones.
Existen tres tipos de interrupciones:
a) requeridas por hardware
Las interrupción original y tradicional es aquella iniciada por un periférico que demanda atención ya que ha ocurrido un evento relativo a este periférico que demanda algún procedimiento de parte de la CPU. En un PC las primeras 16 interrupciones son de este tipo por lo que los primeros 64 bytes de la memoria RAM son direcciones que apuntan bloques de instrucciones residentes en otras áreas de la memoria RAM. Cabe notar que estas 16 primeras interrupciones que son generadas por hardware que necesita atención rápida por lo que debe interrumpirse a la brevedad cualquier cosa que la CPU esté haciendo en ese momento.
Una lista de las interrupciones generadas por hardware es la siguiente
IRQ Prioridad Función
0 1 Timer
1 2 Teclado Hardware
2 Reservada
3 11 COM 2
4 12 COM 1
5 13 Tarjeta de Sonido
6 14 Controlador Floppy
7 15 Puerta Paralela
8 3 Reloj (tics)
9 4 Libre para tarjeta de red, sonido, puerta SCSI
10 5 idem
11 6 idem
12 7 PS-mouse
13 8 Co-procesador matemático
14 9 Canal IDE primario
15 10 Canal IDE secundario
b) requerida por software para interactuar con periféricos
Una característica importante de la operación de interrupciones es que ellas están jerarquizadas para resolver conflictos entre las múltiples interrupciones. Esto puede ser necesario por ejemplo mientras una interrupción está siendo ejecutada para atender un dispositivo y en en ese momento un segundo dispositivo pide una interrupción. Se debe tener un mecanismo para decidir que acción tomar. Este mecanismo está basado en la priorización de interrupciones de modo que una interrupción de mayor prioridad puede interrumpir una de menor prioridad pero no al revés. De este modo el sistema de interrupciones funciona ordenadamente lo que permite por ende un funcionamiento robusto del computador. La administración del sistema de interrupciones mediante este esquema de priorizaciones es muy eficiente de tal manera que su uso se extiende a la interacción con periféricos. De tal manera que si necesita interactuar con un periférico entonces la CPU actúa a través del sistema de interrupciones solicitandose a sí mismo una interrupción. De este modo previene que el periférico esté ocupado o bien no disponible. Por ejemplo si la CPU desea escribir un caractér en la pantalla, en vez de hacerlo directamente solicita una interrupción. La interrupción se ejecuta cuando las condiciones son las adecuadas tanto del punto de vista del periférico como de la CPU.