actividad 3

17.02.2013 20:30

1.4. Interrupciones de Hardware.

 

Las interrupciones hardware son producidas por varias fuentes, por ejemplo del teclado, cada vez que se presiona una tecla y se suelta se genera una interrupción.

Otras interrupciones son originadas por el reloj, la impresora, el puerto serie, el disco, etcétera. Una interrupción de tipo hardware es una señal eléctrica producida por un dispositivo físico del ordenador. Esta señal informa a la CPU que el dispositivo requiere su

atención. La CPU parará el proceso que está ejecutando para atender la interrupción. Cuando la interrupción termina, la CPU reanuda la ejecución en donde fue interrumpida, pudiendo ejecutar el proceso parado originalmente o bien otro proceso.

Existe un hardware específico, para que los dispositivos puedan interrumpir lo que está haciendo la CPU. La propia CPU, tiene entradas específicas para ser interrumpida INT, cuando se activa esta entrada INT, la CPU para lo que está haciendo y activa la salida para reconocer la interrupción INTA, y comienza a ejecutar el código especial que maneja la interrupción. Algunas CPU´s disponen de un conjunto especial de registros, que solo son utilizados en el modo de ejecución de interrupciones, lo que facilita el trabajo de tratar las interrupciones.

La placa base del computador utiliza un controlador para decodificar las interrupciones que no son mas que señales eléctricas producidas por los dispositivos, coloca en el bus de datos información de que dispositivo interrumpió y activa la entrada INT de interrupción de la CPU. Este chip controlador protege a la

CPU y la aísla de los dispositivos que interrumpen, además de proporcionar flexibilidad al diseño del sistema. El controlador de interrupciones tiene un registro de estado para permitir o inhibir las interrupciones en el sistema.

Existe diverso hardware para implementar un controlador de interrupciones, los computadores IBM PC o compatibles, utilizan el controlador de interrupciones programable de Intel 82C59A-2 Cmos o sus chips compatibles. Este controlador ha sido utilizado desde los comienzos del IBM PC, y es bien conocido el espacio de direccionamiento de sus registros en la arquitectura ISA. Incluso en chips más modernos se ha mantenido la misma localización.

Interrupciones hardware en Linux.

Una de las principales tareas del sistema de manejo de interrupciones es llevar las diferentes interrupciones a los códigos de manejo de esas interrupciones.

Cuando se activa el contacto 6 del controlador de interrupciones, se debe reconocer cual es la interrupción asociada a ese contacto, por ejemplo el controlador del dispositivo disquete, por lo tanto el sistema de manejo de interrupciones debe encaminar a la rutina que trata esta interrupción, para ello Linux proporciona un conjunto de estructuras de datos y tablas, y un conjunto de funciones que las inicializan y las manejan.

El sistema de interrupciones

Estructuras de datos para soportar el sistema de interrupciones hardware

Estudiaremos las estructuras de datos del sistema de interrupciones:

irqaction almacena la dirección de la función de manejo de interrupciones.

irq_chip contiene las funciones que manejan un controlador de interrupciones

particular, es dependiente de la arquitectura.

irq_desc vector con una entrada para cada una de las interrupciones que pueden

ser atendidas.

Interrupción (también conocida como interrupción de hardware o petición de interrupción) es una señal recibida por el procesador de un ordenador, indicando que debe "interrumpir" el curso de ejecución actual y pasar a ejecutar código específico para tratar esta situación.

Una interrupción es una suspensión temporal de la ejecución de un proceso, para pasar a ejecutar una subrutina de servicio de interrupción, la cual, por lo general, no forma parte del programa (generalmente perteneciente al sistema operativo, o al BIOS). Luego de finalizada dicha subrutina, se reanuda la ejecución del programa.

Las interrupciones surgen de las necesidades que tienen los dispositivos periféricos de enviar información al procesador principal de un sistema de computación. La primera técnica que se empleó fue que el propio procesador se encargara de sondear (polling) los dispositivos 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 constantemente consumía tiempo en realizar todas las 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 la responsabilidad de comunicarse con el procesador 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.).

Funcionamiento del mecanismo de interrupciones

Cada dispositivo que desea comunicarse con el procesador por medio de interrupciones debe tener asignada una línea única capaz de avisar al CPU que le requiere para una operación. Esta línea es la llamada IRQ ("Interrupt ReQuest", petición de interrupción).

Las IRQ son líneas que llegan al controlador de interrupciones un componente de hardware dedicado a la gestión 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 líneas de interrupción (operación llamada comúnmente enmascarar por la utilización de una máscara), y establecer prioridades entre las distintas interrupciones habilitadas. Cuando varias líneas de petición de interrupción se activan a la vez, el controlador de interrupciones utilizará estas prioridades para escoger la interrupción sobre la que informará al procesador principal. También puede darse el caso de que una rutina de tratamiento de interrupción sea interrumpida para realizar otra rutina de tratamiento de una interrupción de mayor prioridad a la que se estaba ejecutando.Sin embargo hay interrupciones que no se pueden enmascarar o deshabilitar, las conocidas como interrupciones no enmascarables o NMI.

Un procesador principal que no tenga un controlador de interrupciones integrado, suele tener una única línea de interrupción llamada habitualmente INT. Esta línea es activada por el controlador de interrupciones cuando tiene una interrupción que servir. Al activarse esta línea, el procesador consulta los registros del controlador de interrupciones para averiguar cual IRQ hay que atender. A partir del número del IRQ busca en la tabla de vectores de interrupción la dirección de la rutina que debe llamar para atender una petición del dispositivo asociado a dicha IRQ.

Las rutinas de interrupción generalmente toman un pequeño tiempo de ejecución.

Pasos para el procesamiento de una IRQ:

  1. Terminar la ejecución de la instrucción de máquina 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 instrucción.
  3. La CPU salta a la dirección donde está almacenada la rutina de servicio de interrupción (Interrupt Service Routine (ISR)) y ejecuta esa rutina que tiene como objetivo atender al dispositivo que generó la interrupción.
  4. Una vez que la rutina de la interrupción termina, el procesador restaura el estado que había guardado en la pila en el paso 2 y retorna al programa que se estaba usando anteriormente.

Tipos de interrupciones

En este subapartado vamos a hacer una clasificación de las distintas clases de interrupciones que nos podemos encontrar atendiendo a la fuente que las produce. Por un lado distinguiremos si se producen por causas internas o externas al procesador y remarcaremos que este hecho está íntimamente ligado con que las interrupciones sean síncronas o asíncronas:

  • Interrupciones de hardware. Estas son asíncronas a la ejecución del procesador, es decir, se pueden producir en cualquier momento independientemente de lo que esté haciendo el 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.
  • Traps. Normalmente son causadas al realizarse operaciones no permitidas tales como la división por 0, el desbordamiento, el acceso a una posición de memoria no permitida, etc.
  • Interrupciones por software. Las interrupciones por software son generadas por el programa en ejecución. Para generarla, existen distintas instrucciones en el código máquina que permiten al programador producir una interrupción, suelen tener nemotécnicos tales como INT. Suelen ser de vital importancia ya que a partir de estas interrupciones se solicita al sistema operativo realizar determinadas funciones, para ello. Por ejemplo, en DOS se realiza la instrucción INT 0x21 y en Unix se utiliza INT 0x80 para hacer llamadas de sistema.

Interrupción no enmascarable

Una interrupción no enmascarable (o NMI) es un tipo especial de interrupción usada en la mayoría de los microordenadores como el IBM PC y el Apple II.

Una interrupción no enmascarable causa que la CPU deje lo que está haciendo, cambie el puntero de instrucción para que apunte a una dirección particular y continúe ejecutando el código de esa dirección. Se diferencia de los otros tipos de interrupción en que los programadores no pueden hacer que la CPU las ignore, aunque algunos ordenadores pueden por medios externos bloquear esa señal, dando un efecto similar al resto de las interrupciones.

Usos

Al no poderse desactivar son empleadas por dispositivos para los que el tiempo de respuesta es crítico, como por ejemplo el coprocesador matemático Intel 8087 en el IBM PC, el indicador de batería baja, o un error de paridad que ocurra en la memoria.

En algunos ordenadores Clónicos las interrupciones no emascarables se usaban para manejar las diferencias entre su hardware y el original de IBM. Así, si se intentaba acceder a uno de estos dispositivos se lanzaba una NMI y el BIOS ejecutaba el código para el hardware presente en esa máquina.

También se podían lanzar NMI por el usuario, permitiendo interrumpir el programa actual para permitir la depuración. En este caso al lanzarse una NMI se suspendía la ejecución del programa actual y el control se transfería a un depurador para que el programador pudiera inspeccionar el estado de la memoria, los registros, etc. Estas NMI eran lanzadas de diferentes maneras, como pulsando un botón, por medio de una combinación de teclas o por medio de un programa.

En juegos, se producía una NMI y se interrumpía el juego, de esta manera se podían conseguir vidas extras por ejemplo modificando el área de memoria donde se guardaban las vidas restantes.