Todo programa es una
sucesión de instrucciones que le indican al procesador la acción que este debe
realizar, pero estas no son pasadas de forma directa del programa al
procesador, antes de esto se llevan a cabo algunos pasos intermedios.
INTERRUPCIONES
La comunicación
entre el procesador y la memoria principal es a gran velocidad, sin embargo la
mayoría de programas deben interactuar con algún tipo de dispositivo de E/S,
durante este proceso la ejecución del programa se ve interrumpida ya que la
comunicación con dichos dispositivos es significativamente más lenta que con la
memoria, en algunas ocasiones esta operación puede ser incluso más lenta ya que
puede requerir la intervención humana y obviamente el tiempo de reacción se
reducirá de manera drástica.
TIPOS DE INTERRUPCIONES:
Del Programa:
En un procesador típico habrá un registro llamado contador
de programa (PC), que se usa para llevar la cuenta de cuál es la próxima
instrucción a leer. A menos que se diga otra cosa, el procesador siempre
incrementará el PC después de leer cada instrucción, de forma que después se
lea la instrucción siguiente en la secuencia (es decir, la instrucción ubicada
en la dirección inmediatamente superior de la memoria).
De Entrada y salida:
Las interrupciones son generadas por los dispositivos periféricos habilitando una señal del CPU (llamada
IRQ del inglés "interrupt request") para solicitar atención del
mismo. Por ejemplo. cuando un disco duro completa una lectura solicita atención
al igual que cada vez que se presiona una tecla o se mueve el ratón.
La primera técnica que
se empleó para esto fue el polling,
que consistía en que el propio procesador se encargara de sondear los
dispositivos periféricos cada cierto tiempo para averiguar si tenía pendiente
alguna comunicación para él. Este método presentaba el inconveniente de ser muy
ineficiente, ya que el procesador consumía constantemente tiempo y recursos en
realizar estas instrucciones de sondeo.
El mecanismo de
interrupciones fue la solución que permitió al procesador desentenderse de esta
problemática, y delegar en el dispositivo periférico la responsabilidad de
comunicarse con él cuando lo necesitara. El procesador, en este caso, no sondea
a ningún 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 información, una condición de error, etc.).
Interrupciones de hadware:
Cuando un periférico desea acceder a un recurso, envía un pedido de interrupción al procesador para llamar su atención. Los periféricos cuentan con un número de interrupción que se denomina IRQ (Peticiones de Interrupción. Es como si cada periférico tirara de un "hilo" que está atado a una campana para señalarle al equipo que desea que le preste atención.
Este "hilo" es, de hecho, una línea física que conecta cada ranura de expansión así como cada interfaz E/S a la placa madre. Para una ranura ISA de 8 bits, por ejemplo, hay 8 líneas IRQ que unen ranuras ISA de 8 bits a la placa madre (IRQ0 a IRQ7). Estos IRQ están controlados por un "controlador de interrupción" que se encarga de “cederle la palabra” al IRQ que posee la mayor prioridad.
Al aparecer las ranuras de 16 bits, se agregaron IRQ 8 a 15. En consecuencia , fue necesario agregar un segundo controlador de interrupción. Los dos grupos de interrupciones están unidos por IRQ 2 el cual se conecta (o "produce una cascada") a IRQ9. En cierto modo, esta cascada "inserta" IRQ 8 a 15 entre IRQ1 y 3:
Dado que la prioridad va del IRQ inferior al superior y que se insertan IRQ 8 a 15 entre IRQ 1 y 3, el orden de prioridad es el siguiente:
0 > 1 > 8 > 9 > 10 > 11 > 12 > 13 > 14 > 15 > 3 > 4 > 5 > 6 > 7
No hay comentarios:
Publicar un comentario