Aula Macedonia


Artículos Varios


Artículo realizado por
Fernando Rodríguez "Kapit".





Uno de los elementos más valiosos con los que puede contar cualquier programador bajo el entorno DOS son, sin duda, las Interrupciones, gracias a ellas podemos dotar a nuestros programas de funcionales totalmente imprescindibles si queremos hacer programas lo suficientemente legibles como para llamar la atención del usuario al que va dirigido, es más, las interrupciones se convierten en un "arma" fundamental si lo que queremos es acceder a niveles bajos para poder apoderarnos del corazón de nuestra CPU y sacar la máxima eficiencia de ésta.

En este artículo, os voy a presentar los conceptos generales de los que son las interrupciones, comentaros algunas ideas y hacer que, al menos, os suenen cuando leaís algún artículo (como el de la programación del ratón) en dónde se hablan de ellas.

Definición y Tipos de Interrupciones.

La primera cosa de todas, ¿qué son las interrupciones?, bien, las interrupciones son un "mecanísmo" por medio del cual hacemos que la CPU deje la tarea en la que estaba para que se vaya a ocupar de otra cosa distinta, es decir, es una forma de llamar la atención de la CPU de tal forma que cada dispositivo cuando necesita ser atendido por la CPU, emite una interrupción o señal haciendo que la CPU vaya a atenderla de inmediato. Esto es importantísimo ya que de no existir interrupciones, la CPU debería de ir preguntando, cada cierto tiempo, a los dispositivos para ver si necesitan de su intervención y como podeis suponer, eso significaría lentitud, mucha lentitud.
Por tanto, quedaros con que las interrupciones sirven para controlar el hardware, ya que son las que llaman a la CPU cuando este, el hardware, necesita la intervención de la misma.

Las interrupciones se pueden dividir en 2 grupos:

1. Interrupciones de Software. También son conocidas como "falsas interrupciones" ya que se producen como consecuencia de la ejecución de otra instrucción al no ser el hardware las que las produce. Otra forma de entender estas interrupciones, es verlas desde el punto de vista de llamadas a subrutinas, lógicamente, la gracia está en que esas subrutinas no son nuestras, sino que son las propias de cada sistema operativo, driver o similar tiene. Quedaros pues, con que somos nostros los que hacemos invocamos a la interrupción.
Este tipo de interrupción es el más habitual en la programación.

2. Interrupciones de Hardware. Este tipo de interrupción es invocado directamente por los dispositivos hardware de nuestro ordenador, por lo que "son bastante más auténticas" que las anteriores. Al producir algún dispositivo hardware la interrupción el controlador de interrupciones o PIC se encarga de gestionarla determinando, en el caso de producirse más de una interrupción a la vez, cual de ellas tiene más prioridad y debe de ser gestionada por la CPU. El funcionamiento de este tipo de interrupciones es bastante similar y se suele utilizar mucho para la programación de sistemas de comunicaciones.

La Tabla de Vectores de Interrupciones.

Seguro que alguno se ha preguntado, "si cuando llamamos a una interrupción se ejecuta una determinada rutina...¿dónde narices se encuentra esta rutina?, es más, ¿cómo sabe nuestra CPU dónde encontrarla?."
Bien, la respuesta a estas dos preguntas (y muchas más) se encuentra en la tabla de vectores de interrupción. Dicha tabla es una estructura que se crea durante la inicialización del ordenador y se coloca, en el principio de nuestra memoria (segmento 0 y desplazamiento 0). Dicha estrucutura ocupa y de forma justa 1Kb, ya que dispone de 256 entradas de 4 bytes cada una. Lo importante de todo esto es que, dicha estructura, almacena la dirección, en memoria, de las distintas rutinas que van ligadas a las distintas interrupciones, de tal modo que cuando invocamos, mediante interrupción software, o se invoca, mediante hardware, una interrupción, lo que se hace es utilizar un índice que va ligado a la interrupción, de tal manera que, con dicho índice, se acude a la tabla de vectores de interrupción para que el sistema encuentre la dirección de la rutina en dónde se encuentra el verdadero tratamiento a la interrupción, es decir, si se produce la interrupción x, lo que se hace es acudir a la tabla con el índice x para encontrar la entrada (recordar que eran 256 entradas con 4 bytes cada una) que contiene la dirección en memoria de la rutina que sirve para tratar a la interrupción de índice x.
Como cada entrada es de 4 bytes, es fácil adivinar que dichos 4 bytes forman la dirección, ya que 2 de esos bytes se utilizan como segmento y los otros 2 como desplazamiento, total, que ya tenemos la dirección de memoria con la rutina que hay que utilizar.

Ahora pensar por un momento que somos nostros los que, conociendo la dirección de memoria de una de esas rutinas, cambiamos dicha rutina por una nuestra para que al producirse una determinada interrupción ocurra lo que a nosotros nos interese...Como podéis observar, las posibilidades son muy interesantes, tan sólo tenéis que mirar el efecto de luz del Visualizator v:2.0 (ir a sencción de Bájate algo interesante), dicho efecto se consiguió poniendo en la rutina que se encargaba de controlar la interrupción de reloj del sistema, el código necesario para el efecto de luz, con lo que al producirse la interrupción de reloj se ejecutaba también el código del efecto y como la interrupción de reloj se produce contínuamente, los efectos son muy buenos, vamos, que si queréis hacer ese efecto acudiendo a un bucle While lo llevais claro :-(.

Espero haber despertado, con este artículo, el interés por saber dominar las interrupciones. Si queréis saber más, tan sólo teneis que buscar información en libros sobre programación de dispositivos tales como ratón, VGA, etc, en los que se acude siempre a ellas. Ahora mismo estoy pensando el hacer un artículo sobre como controlar el ratón así que puede que aparezca en esta actualización de la revista, además, es la mejor forma de entender las interrupciones ¿o no?. ;).




AULA MACEDONIA
a
MACEDONIA Magazine