You are on page 1of 12

LENGUAJE INTERFAZ

INTERRUPCIONES
LIC. NICOLAS CABRERA SWITMY MAYUMI ALVAREZ RUIZ 02/07/2013

El manejo de interrupciones es una tcnica de programacin, basada en un mecanismo automtico en el hardware del microcontrolador, que permite dar atencin a algn dispositivo circuito interno o externo, nicamente en el momento en que sta se requiera. Una interrupcin es en realidad una llamada a una subrutina, pero iniciada por el hardware del propio perifrico y no por la instruccin "CALL". La interrupcin es asncrona y puede ocurrir en cualquier instante durante la ejecucin del programa principal. El manejo de interrupciones es una alternativa al mtodo conocido como "polling", en el cual dentro del programa principal, se est revisando el status de cada uno de los perifricos, una y otra vez en un loop permanente, para conocer si alguno de ellos necesita de atencin. Para entender este proceso, podemos poner un ejemplo en la vida prctica en donde un conferencista (el microcontrolador) adems de dictar su conferencia (programa principal), pregunta uno a uno y en forma constante a los asistentes (perifricos) si tienen alguna pregunta (si requieren atencin del microcontrolador). Evidentemente dicho mtodo conduce a una prdida de tiempo del conferencista ( tiempo de procesamiento del microcontrolador) que podra ser utilizado en forma ms eficiente. En cambio, si los asistentes realizan su pregunta levantando la mano nicamente cada vez que necesiten atencin, solo en ese momento se genera una "interrupcin" al programa principal (la conferencia). El conferencista tiene el tiempo suficiente de responder la pregunta (dar atencin al perifrico) para despus continuar con su conferencia. El manejo de interrupciones permite operar el manejo del "multitasking" o multitareas, es decir, una tcnica de programacin en la cual es posible dar atencin a multitud de perifricos, reduciendo al mnimo el tiempo de procesamiento. Un caso muy ilustrativo es el de las computadoras PC, en donde el teclado, el mouse, el disco duro, el reloj de tiempo real, la impresora, el mdem y en fin, todos los perifricos son controlados y atendidos a travs del sistema operativo, por medio de un esquema de interrupciones.

Interrupcin (tambin conocida como interrupcin hardware o peticin de interrupcin) es una seal recibida por el procesador de un ordenador, indicando que debe "interrumpir" el curso de ejecucin actual y pasar a ejecutar cdigo especfico para tratar esta situacin. Una interrupcin supone la ejecucin temporaria de un programa, para pasar a ejecutar una "subrutina de servicio de interrupcin", que pertenece al BIOS (Basic Input Output System). Las interrupciones surgen de las necesidades que tienen los dispositivos perifricos de enviar informacin al procesador principal de un sistema de computacin. La primera tcnica que se emple fue que el propio procesador se encargara de sondear (polling) el dispositivo cada cierto tiempo para averiguar si tena pendiente alguna comunicacin para l. Este mtodo presentaba el inconveniente de ser muy ineficiente, ya que el procesador constantemente consuma tiempo en realizar todas las instrucciones de sondeo. El mecanismo de interrupciones fue la solucin que permiti al procesador desentenderse de esta problemtica, y delegar en el dispositivo la responsabilidad de comunicarse con el procesador cuando lo necesitaba. El procesador, en este caso, no sondea a ningn dispositivo, sino que queda a la espera de que estos le avisen (le "interrumpan") cuando tengan algo que comunicarle (ya sea un evento, una transferencia de informacin, una condicin de error, etc.).

Funcionamiento del mecanismo de interrupciones Cada dispositivo que desea comunicarse con el procesador por interrupciones debe tener asignada una lnea nica capaz de avisar a ste de que le requiere para una operacin. Esta lnea es la llamada IRQ ("Interrupt ReQuest", peticin de interrupcin). Las IRQ son lneas que llegan al controlador de interrupciones, un componente hardware dedicado a la gestin de las interrupciones, y que puede estar integrado en el procesador principal o ser un circuito separado conectado al procesador principal. El controlador de interrupciones debe ser capaz de habilitar o inhibir lneas de interrupcin (operacin llamada comnmente enmascarar por la utilizacin de una mscara), y establecer prioridades entre las distintas interrupciones habilitadas. Cuando varias lneas de peticin de interrupcin se activan a la vez, el controlador de interrupciones utilizar estas prioridades para escoger la interrupcin sobre la que informar al procesador principal. Sin embargo hay interrupciones que no se pueden enmascarar o deshabilitar, las conocidas como interrupciones no enmascarables o NMI. Un procesador principal (sin controlador de interrupciones integrado) suele tener una nica lnea de interrupcin llamada habitualmente INT. Esta lnea es activada por el controlador de interrupciones cuando tiene una interrupcin que servir. Al activarse esta lnea, el procesador consulta los registros del controlador de interrupciones para averiguar qu IRQ es la que ha de atender. A partir del nmero de IRQ busca en el vector de interrupciones qu rutina debe llamar para atender una peticin del dispositivo asociado a dicha IRQ. Las rutinas de interrupcin generalmente toman un pequeo tiempo de ejecucin y la mayora no pueden ser interrumpidas cuando se estn atendiendo, porque al entrar en ellas se almacena el estado de los registros en una pila y si se interrumpen muchas veces, la pila se puede desbordar. Pasos para el procesamiento de una IRQ: 1) Terminar la ejecucin de la instruccin mquina en curso. 2) Salva el valor de contador de programa, IP, en la pila, de manera que en la CPU, al terminar el proceso, pueda seguir ejecutando el programa a partir de la ltima instruccin. 3) La CPU salta a la direccin donde est almacenada la rutina de servicio de interrupcin (ISR, Interrupt Service Routine) y ejecuta esa rutina que tiene como objetivo atender al dispositivo que gener la interrupcin.

4) Una vez que la rutina de la interrupcin termina, el procesador restaura el estado que haba guardado en la pila en el paso 2 y retorna al programa que se estaba usando anteriormente.

Tipos de interrupciones Interrupciones hardware: Estas son asncronas a la ejecucin del procesador, es decir, se pueden producir en cualquier momento independientemente de lo que est haciendo la CPU en ese momento. Las causas que lo producen son externas al procesador y a menudo suelen estar ligadas con distintos dispositivos de E/S. Interrupciones software o excepciones : Son aquellas que se producen de forma sncrona a la ejecucin del procesador y por tanto podran predecirse si se analiza con detenimiento la traza del programa que en ese momento estaba siendo ejecutado en la CPU. Normalmente las causas de estas interrupciones suelen ser realizaciones de operaciones no permitidas tales como la divisin por 0, el desbordamiento, el acceso a una posicin de memoria no permitida, etc. Trampas: A menudo se tiende a confundir las interrupciones software y las trampas, ya que su naturaleza es bastante similar. Sin embargo las excepciones se producen al realizar una operacin no permitida por lo que de algn modo podemos decir que no es controlada directamente por el programador si no que, por un fallo al programar, se producen. No obstante las trampas si que son provocadas por el programador, para provocar una trampa existen distintas instrucciones en el repertorio mquina que permiten al programador producir una interrupcin al ejecutar dicha instruccin. Suelen tener nemotcnicos tales como INT. Suelen ser de vital importancia ya que a partir de las trampas se pueden pedir al SO que realice determinadas funciones, para ello, en DOS se realiza la instruccin INT 0x21 y en Unix se utiliza INT 0x80.

Interrupciones hardware Son interrupciones que se producen como resultado de, normalmente, una operacin de E/S. No son producidas por ninguna instruccin si no que son seales que producen los dispositivos para indicarle al procesador que necesitan ser 'atendidos'. Las interrupciones hardware son interesantes en cuanto a que permiten mejorar la productividad del procesador ya que este ltimo puede ordenar una operacin de E/S y en lugar de tener que esperar a que el dispositivo acabe realizando una espera activa, es decir, sin hacer ningn trabajo til, se

puede dedicar a atender a otro proceso o aplicacin y cuando el dispositivo este de nuevo disponible ser el encargado de notificarle al procesador mediante la lnea de interrupcin ya que est preparado para continuar/terminar la operacin de E/S. Interrupciones software o excepciones A las interrupciones por software, se las denomina excepciones. En este apartado se consideran las llamadas al sistema operativo mediante una instruccin, normalmente de Entrada/Salida, por ejemplo una divisin por 0. Una interrupcin por software, se generar por un programa mientras est ejecutndose. En general acta de la siguiente manera: 1. Un programa que se vena ejecutando luego de su instruccin I5 , llama al Sistema Operativo, por ejemplo para leer un archivo de disco.(cuando un programa necesita un dato exterior , se detiene y pasa a cumplir con las tareas de recojer ese dato) 1. A tal efecto, luego de I5 existe en el programa, la instruccin de cdigo de mquina CD21, simbolizada INT 21 en Assembler, que realiza el requerimiento del paso 1. Puesto que no puede seguir le ejecucin de la instruccin I6 y siguientes del programa hasta que no se haya ledo el disco y est en memoria principal dicho archivo, virtualmente el programa se ha interrumpido, siendo, adems, que luego de INT 21, las instrucciones que se ejecutarn no sern del programa, sino del Sistema Operativo. ( se detiene el programa y ordena en este caso mediante INT21 ( interrupcion predefinida ) que recoge el dato solicitado, para poder sequir el programa que la ordeno ) 1. La ejecucin de INT 21 permite hallar la subrutina del Sistema Operativo. 1. Se ejecuta la subrutina del Sistema Operativo que prepara la lectura del disco. 1. Luego de ejecutarse la subrutina del Sistema Operativo, y una vez que se haya ledo el disco y verificado que la lectura es correcta, el Sistema Operativo ordenar reanudar la ejecucin del programa autointerrumpido en espera. 1. La ejecucin del programa se reanuda.

Trampas En este apartado se consideran las llamadas al sistema operativo mediante una instruccin, normalmente de Entrada/Salida. Una interrupcin por software, se prev en qu momento de la ejecucin de un programa suceder. En general acta de la siguiente manera: Un programa que se vena ejecutando luego de su instruccin I5, llama al Sistema Operativo, por ejemplo para leer un archivo de disco. A tal efecto, luego de I5 existe en el programa, la instruccin de cdigo de mquina CD21, simbolizada INT 21 en Assembler, que realiza el requerimiento del paso 1. Puesto que no puede seguir le ejecucin de la instruccin I6 y siguientes del programa hasta que no se haya ledo el disco y est en memoria principal dicho archivo, virtualmente el programa se ha interrumpido, siendo, adems, que luego de INT 21, las instrucciones que se ejecutarn no sern del programa, sino del Sistema Operativo. La ejecucin de INT 21 permite hallar la subrutina del Sistema Operativo. Se ejecuta la subrutina del Sistema Operativo que prepara la lectura del disco. Luego de ejecutarse la subrutina del Sistema Operativo, y una vez que se haya ledo el disco y verificado que la lectura es correcta, el Sistema Operativo ordenar reanudar la ejecucin del programa autointerrumpido en espera. La ejecucin del programa se reanuda.

Determinacin de la direccin de la rutina de servicio de interrupcin Hay dos alternativas para determinar la direccin de la rutina de servicio de interrupcin que debe ejecutarse al recibir una interrupcin determinada:

Direcciones fijas. Se hallan cableadas en el procesador y por tanto nunca pueden ser cambiadas. Esto implica que las RSI siempre estarn en una determinada posicin de la memoria. Direcciones variables (por interrupciones vectorizadas). En este grupo se incluyen aquellas que presentan una direccin variable y que, por tanto, no se halla cableada en el procesador. De esta manera el dispositivo debe dar informacin acerca de la localizacin de la direccin de comienzo de la RSI asociada a dicho perifrico.

Direcciones variables Hay distintas metodologas de diseo para las interrupciones con direcciones variables. En la actualidad, las alternativas que son implementadas de manera habitual son las siguientes:

Direccionamiento absoluto. En este caso es el dispositivo o la interfaz del dispositivo la encargada de conocer la direccin de la RSI y de enviarla al procesador para que ste pueda localizar dicha subrutina y ejecutarla. Direccionamiento relativo. El dispositivo solo suministra parte de la direccin de comienzo y es el procesador el encargado de completarla (aadiendo bits o sumando una determinada cantidad, que siempre ser fija). Esta alternativa tiene una ventaja sobre la anterior y es que permite especificar la direccin de comienzo con menos bits y por tanto simplifica el diseo. Ahora bien tiene una desventaja principal y es que limita el nmero de dispositivos que podemos conectar y adems ciertos bits de la direccin quedan fijados de forma permanente por la CPU lo que reduce la capacidad de reubicabilidad de la RSI. Una alternativa que utilizan ciertos procesadores como el 8080 o el 8085 es que en vez de enviar solamente la direccin de comienzo de la RSI se enva tambin el cdigo de la operacin de salto (por ejemplo CALL). Direccionamiento indirecto. Tambin conocida como direccionamiento por interrupciones vectorizadas. Se mantiene una tabla de vectores de interrupcin (direcciones de comienzo de las distintas RSI) y a cada interrupcin se le asocia un nmero que ser el ndice por el cual se acceder a la tabla y se recuperar la informacin de la direccin de comienzo. Necesita seales de conformidad o handshaking para sincronizar al procesador con la interfaz, ya que esta ltima tiene que indicarle al procesador cuando va a enviarle el ndice que necesita para buscar elvector de interrupcin (INT) y el procesador deber enviar otra seal para indicar que se ha reconocido la interrupcin (INTA#).

Determinacin de la fuente que genera la interrupcin Hay distintas formas de identificar la fuente de una determinada interrupcin. La primera alternativa que se consider fue asignar una lnea (un bit) para cada interrupcin pero esto supona un gran costo en cuanto a la relacin de nmero de dispositivos y nmero de bits usados y a menudo fijaba el lmite de dispositivos que se podan conectar. Por tanto, se pens con posterioridad que en cada patilla de interrupcin deberan poder conectarse ms de un dispositivo, pero entonces tendramos que imponer una metodologa que permitiese identificar de forma unvoca de qu dispositivo se trataba. Para ello hay varias directrices:

Polling. Se trata de que la CPU comprueba de manera sistemtica todos los dispositivos de manera que "busca" cul de ellos fue el que solicit la interrupcin. Esto tiene una ventaja y es que es barato a nivel de coste hardware ya que el "polling" se implementa en software, no obstante tiene otras desventajas que no podemos olvidar y es que suele ser lento porque tiene que comprobar en serie todos los dispositivos y establece una prioridad en los dispositivos (el orden de sondeo) y por tanto puede provocar inanicin. Interrupciones vectorizadas. Este concepto fue ya tratado en el apartado anterior y como ventajas podemos destacar que suele ser rpido pero implica un alto costo en el hardware. Hardware paralelo. Se utiliza un registro de interrupcin cuyos bits se controlan de forma independiente por las seales de peticin de interrupcin PI de cada perifrico. Segn la posicin de cada bit en el registro, se establece la prioridad.

Sistemas de prioridad Se necesita un mecanismo para priorizar las interrupciones y tratar primero las ms urgentes. Existen varias alternativas:

Interrupciones simultneas. No tienen por qu ocurrir de manera simultnea sino que se refiere a que en un momento dado pueden haber varias interrupciones activas. Interrupciones anidadas. Mientras se est procesando una determinada rutina de servicio de interrupcin sucede otra seal de interrupcin. Inhibicin de interrupciones. Se deshabilitan las dems interrupciones mientras se est tratando una.

Interrupciones simultneas En este mtodo tenemos dos alternativas, una de ellas es que exista algn hardware que tenga como entradas las seales de interrupcin y de como salida la interrupcin ms prioritaria que est activa en ese momento. Otra alternativa es tener un mtodo de identificacin de prioridades distribuida y no generalizada como en el caso anterior, en este caso tenemos que destacar dos tcnicas distintas que se pueden implementar en la prctica:

Polling. Como ya vimos es el CPU el que chequea los dispositivos y el orden de sondeo determina la prioridad.

Daisy-chain. (conexin en cadena) Podemos conectar los distintos dispositivos en cadena, en orden decreciente de prioridad y por tanto la seal de reconocimiento de interrupcin (INTA#) solo ser pasada al siguiente dispositivo en caso de que el anterior (ms prioritario) no haya solicitado los servicios del procesador. Sin embargo, algo importante es que las seales de interrupcin que van al procesador estn conectadas todas a un mismo cable, por tanto, deberemos utilizar alguna tcnica especial para que no se produzca un cortocircuito. Para evitar precisamente que la pista se cortocircuite se utiliza la tcnica del "open-collector" o "colector abierto" y consiste en conectar el colector de un transistor a la pista comn (un transistor por cada dispositivo) y por tanto estarn tantos colectores conectados como dispositivos tengamos (se entiende que son dispositivos que mandan peticin de interrupcin al procesador). Hbrida. Mezcla las dos tcnicas explicadas anteriormente.

Interrupciones anidadas Existen dos mtodos para tratar las interrupciones anidadas. El primero se basa en inhabilitar las interrupciones mientras se est ejecutando una determinada RSI. Esto puede realizarlo el hardware de manera automtica en algunos procesadores, pero en otros ser el usuario el encargado de deshabilitarlas en caso de que no desee que ninguna otra interrupcin pueda interrumpir el transcurso normal de la rutina de servicio de interrupcin. No es aconsejable deshabilitar las interrupciones durante mucho tiempo ya que esto puede provocar errores y prdida de informacin. La otra alternativa es permitir que solo las interrupciones ms prioritarias puedan suspender la ejecucin de la RSI actual. Para esto tendremos que definir qu lneas son ms prioritarias que otras. Otra consideracin de esta segunda alternativa es que al anidar distintas llamadas a rutinas tendremos que contar con una pila suficientemente grande para que esta no se desborde.

Inhibicin de interrupciones Hay distintas alternativas de inhibicin de interrupciones. Como ya hemos visto estas se pueden hacer de manera automtica por el hardware en algunos casos mientras que en otros ser el usuario el encargado de realizarlo por software y esto depende de la arquitectura del procesador que consideremos.

Las distintas opciones son:


Deshabilitar todas las interrupciones. Para esto basta con inhibir el bit del registro de flag dedicado a las interrupciones. Deshabilitar al principio de la RSI y activarlas de nuevo al finalizar la misma. Puede ser de manera automtica o por el usuario. Desactivar solo las interrupciones que tengan menor prioridad que la asociada a la RSI que se est ejecutando en ese momento. Deshabilitar de forma selectiva distintos niveles de prioridad de interrupcin. Para lo cual se emplean registros especiales denominados mscaras en el que cada uno de sus bits identifican a un nivel distinto y modificando su contenido se puede establecer que niveles estn activos en ese momento. Se puede cambiar por el programador.

Como se mencion anteriormente la PC esta constituida lgicamente por su BIOS y sistema operativo. La mayora de las rutinas que controlan al computador estn grabadas en el ROM del BIOS, aunque muchas rutinas son establecidas por el sistema operativo y se cargan en RAM al momento de encender al computador. Estas rutinas son denominadas interrupciones y son activadas mediante la instruccin: INT nmero. Una interrupcin es una operacin que invoca la ejecucin de una rutina especfica que suspende la ejecucin del programa que la llam, de tal manera que el sistema toma control del computador colocando en el stack el contenido de los registros CS e IP. El programa suspendido vuelve a activarse cuando termina la ejecucin de la interrupcin y son restablecidos los registros salvados. Existen dos razones para ejecutar una interrupcin: (1) intencionalmente como peticin para la entrada o salida de datos de un dispositivo. (2) un error serio y no intencional, como sobreflujo o divisin por cero.

You might also like