Interrupciones IRQ
Sistemas Operativos, ejecución de procesos por interrupciones IRQ Contenido
- Interrupciones IRQ
- Sistemas Operativos, ejecución de procesos por interrupciones IRQ
- Introducción
- La subrutina de servicio de interrupción
- Funcionamiento del mecanismo de interrupciones
- Conflictos con interrupciones
- Procesamiento de una interrupción
- Tipos de interrupciones.
- Sistemas de prioridad de interrupciones
- Determinación de la fuente que genera la interrupción
- Determinación de la dirección de la rutina de servicio de interrupción
- Configuración IRQ
- Las 15 IRQs de periféricos conocidos
- Resolución de conflictos del hardware
Introducción
En el contexto de la informática, una interrupción (Interrupt ReQuest, IRQ, también conocida como 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 del proceso actual y pasar a ejecutar código específico para otro proceso. Más tarde el procesador regresará al estado original y terminará con el primer proceso.
Una interrupción es un cable que llega hasta el procesador, si se envía una señal eléctrica por el cable de interrupciones el procesador deja de hacer lo que está haciendo y realiza otra tarea.
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, sino que pertenece al sistema operativo o al BIOS. Una vez finalizada dicha subrutina, se reanuda la ejecución del programa interrumpido originalmente.
La subrutina de servicio de interrupción
Tareas de la rutina de interrupción:
- guardar los registros y datos del proceso interrumpido
- averiguar quién ha interrumpido al procesador
- saltar al nuevo proceso para su ejecución por el sistema operativo
- regresar al procesador al estado original y terminar la tarea del proceso interrumpido
- esperar una nueva interrupción
Las interrupciones surgen de la necesidad que tienen los dispositivos periféricos de enviar información al procesador. El procesador ignora a los dispositivos E/S instalados en la computadora, es responsabilidad de los dispositivos E/S interrumpir al procesador para que haga una tarea.
Funcionamiento del mecanismo de interrupciones
Todos los dispositivos que deseen comunicarse con el procesador por medio de interrupciones deben tener asignada una línea única capaz de avisar al CPU que hay una tarea para realizar. Esta línea se denomina IRQ ("Interrupt ReQuest" o 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 mismo. El controlador de interrupciones debe ser capaz de habilitar o inhibir las líneas de interrupción y establecer prioridades entre las mismas. Cuando varias líneas de petición de interrupción se activan a la vez, el controlador de interrupciones utilizará las 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; aunque hay interrupciones que no se pueden deshabilitar (conocidas como interrupciones no enmascarables o NMI).
Por ejemplo la interrupción del reloj de la computadora no se puede enmascarar y cuando el reloj tiene que comunicar la hora al procesador lo hace con máxima prioridad y si es necesario interrumpirá a otra interrupción en curso.
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 RAM de la rutina a la que debe llamar para atender la petición del dispositivo asociado a dicha IRQ.
La tabla de vectores son punteros a una dirección de memoria RAM donde está el procesos a ejecutar.
La cantidad de vectores de interrupciones son 15 o 24 en computadoras modernas, y se asocian a una línea física como un cables. Cada dispositivo se apropia de una línea e instala un vector de interrupción que apunta a la memoria RAM donde está el proceso que ejecuta tareas para el dispositivo.
Conflictos con interrupciones
Es muy común que al instalar un nuevo dispositivo en una computadora el nuevo dispositivo se apropia de un cables o línea de interrupción ya ocupado, también puede suceder que la tabla de vectores de interrupciones se corrompa y apunte a un lugar de memoria incorrecto.
Si hay un problema de interrupciones la computadora deja de funcionar o los dispositivos en conflicto no funcionan.
Procesamiento de una interrupción
- Terminar la ejecución de la instrucción del proceso en actual proceso y mandarlo al estado de bloqueado para restaurarlo más tarde.
- Salvar el estado del procesador (valores de registros y flags) y el valor del contador de programa, IP, en la pila, de manera que en la CPU, al terminar el proceso de interrupción, pueda seguir ejecutando el programa interrumpido a partir de la última instrucción.
- La CPU salta a la dirección donde está almacenada la rutina de servicio de interrupción (Interrupt Service Routine, o abreviado ISR) y ejecuta esa rutina que tiene como objetivo atender al dispositivo que generó la interrupción.
- 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.
Atendiendo a la fuente que las produce, las interrupciones pueden clasificarse de la siguiente forma:
- Interrupciones de hardware: 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 las producen son externas al procesador y a menudo suelen estar relacionadas con los distintos dispositivos de E/S.
- Excepciones de errores: Son aquellas que se producen de forma síncrona a la ejecución del procesador y por tanto podrían predecirse si se analiza con detenimiento la traza del programa que en ese momento estaba siendo ejecutado en la CPU. 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 aquellas generadas por un programa en ejecución. Para generarlas, existen distintas instrucciones en el código máquina que permiten al programador producir una interrupción, las cuales suelen tener nemotécnicos tales como INT (por ejemplo, en DOS se realiza la instrucción INT 0x21 y en Unix se utiliza INT 0x80 para hacer llamadas de sistema).
- Reloj: las computadoras tienen un reloj digital para una base de tiempos y temporización, muchos procesos necesitan medir el tiempo en milisegundos y segundos y hacen usos del reloj de la computadora. El reloj de la computadora notifica al procesador del tiempo transcurrido por medio de una interrupción.
- Fallo de hardware: si un componente del computador se rompe o tiene un fallo puede generar una interrupción y notificar al procesador del problema.
Sistemas de prioridad de interrupciones
El sistema operativo necesita un mecanismo para priorizar las interrupciones y tratar primero las más urgentes. Para ello, existen varias alternativas:
- Interrupciones simultáneas: No tienen por qué ocurrir de manera simultánea 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 interrupción puede suceder otra señal de interrupción.
- Inhibición de interrupciones: Se deshabilitan las demás interrupciones mientras se está tratando una interrupción, inhibir las interrupciones es muy ineficiente y se usa en casos especiales. inhibir las interrupciones por mucho tiempo puede generar interbloque de procesos, los sistemas operativos deben impedir el interbloqueo.
Determinación de la fuente que genera la interrupción
Hay distintas formas de identificar la fuente de una determinada interrupción. La primera alternativa que se consideró fue asignar una línea (un bit) para cada interrupción, lo cual suponía un gran costo en cuanto a la relación de número de dispositivos y número de bits usados y a menudo limitaba el número de dispositivos que se podían conectar. Por ello, se pensó con posterioridad en que en cada patilla de interrupción debería poder conectarse más de un dispositivo, debiendo implementar por tanto una metodología que permitiese identificar de forma unívoca de qué dispositivo se trataba. Para ello hay varias directrices:
- Polling: el microprocesador comprueba de manera sistemática todos los dispositivos de manera que «busca» cuál de ellos fue el que solicitó la interrupción. 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 inanición.
- Interrupciones vectorizadas: este concepto fue ya tratado en el apartado anterior. Como ventajas podemos destacar que suele ser rápido pero implica un alto costo en el hardware.
- Hardware paralelo: se utiliza un registro de interrupción cuyos bits se controlan de forma independiente por las señales de petición de interrupción.
Determinación de la dirección de la rutina de servicio de interrupción
Hay dos alternativas para determinar la dirección de la rutina de servicio de interrupción que se debe ejecutar al recibir una interrupción determinada:
- Direcciones fijas: Se hallan cableadas en el procesador y por tanto nunca pueden ser cambiadas. Esto implica que las rutinas de servicios de interrupciones siempre estarán en una determinada posición de la memoria.
- Direcciones variables (por interrupciones vectorizadas): En este grupo se incluyen aquellas que presentan una dirección variable y que, por tanto, no se halla cableada en el procesador. De esta manera el dispositivo debe dar información acerca de la localización de la dirección de comienzo de la rutina de servicio de interrupción asociada a dicho periférico. Los drivers de los fabricantes de dispositivos deben instalar en la RAM los procesos que atienden las interrupciones, la técnica de direcciones variables puede generar gran cantidad de conflictos de IRQ.
Conflictos del hardware
Una interrupción es una línea que une el periférico al procesador. Una interrupción es una interrupción de hardware cuando es solicitada por uno de los componentes de hardware de la PC. Por ejemplo, este es el caso al tocar una tecla, el teclado llama la atención del procesador sobre la tecla presionada. No obstante no se puede solicitar al mismo tiempo dos interrupciones o dos dispositivos no pueden pedir la misma interrupción. Por lo tanto, al instalar las tarjetas de expansión, debe asegurarse que, durante la configuración, la misma interrupción no se utilice para dos periféricos diferentes. Si esto sucediera, ocurriría un "conflicto del hardware" y ningún periférico funcionaria.
Verdaderamente, si dos periféricos utilizan el mismo interruptor, interrupción, el sistema no sabrá cómo distinguirlos. Un conflicto del hardware no sucede únicamente cuando dos periféricos poseen el mismo hardware. También puede ocurrir un conflicto cuando dos periféricos poseen la misma dirección E/S o usan los mismos canales DMA, los canales de DMA son accesos directo a memoria sin pasar por el procesador.
Configuración IRQ
La IRQ de una tarjeta de expansión puede modificarse para asignarle un número IRQ que no está siendo utilizado por otro periférico.
En los periféricos más antiguos, este número IRQ se adjunta a los puentes que se encuentran en la placa.
En las placas recientes (que poseen un BIOS Plug & Play), el parámetro de recurso (direcciones IRQ, DMA E/S) es automático. También puede ser realizado por el SO con la ayuda de utilidades que brinda la tarjeta de expansión. Este modo plug & play debe ser desactivado en ocasiones para que puedan modificarse los parámetros manualmente.
Aún no resulta fácil hallar recursos disponibles para todos los periféricos. Por lo tanto, he aquí una lista incompleta de recursos que se utilizan generalmente, los que por consiguiente no pueden asignarse en forma manual:
Las 15 IRQs de periféricos conocidos
- 0 Reloj interno, (alta prioridad)
- 1 Teclado
- 2 Controlador de interrupción programable Cascada de IRQ 8 a 15
- 3 Puerto de comunicaciones COM2/COM4
- 4 Puerto de comunicaciones COM1/COM3
- 5 libre
- 6 Controlador de disquete
- 7 Puerto de impresora LPT1
- 8 CMOS (Reloj digital de tiempo real)
- 9 libre
- 10 libre
- 11 libre
- 12 Puerto del ratón PS2/libre
- 13 Procesador de datos numéricos (coprocesador matemático)
- 14 Controlador de disco duro primario (IDE)
- 15 Controlador de disco duro secundario (IDE)
Las computadoras modernas tienen más líneas de interrupciones y suelen tener electrónica dedicada especialmente a tratar las interrupciones de forma muy eficiente.
Los puertos de E/S seriales COM1 y COM4 así como los puertos COM2 y COM3 usan los mismos interruptores y son una fuente de conflictos de IRQ si se instalan periféricos simultáneamente en COM1 Y COM4 o COM2 y COM3. Puede parecer ilógico en cuanto se usa la misma interrupción. En realidad, es posible utilizar el puerto COM1 tanto como el puerto COM4 (así como el puerto COM2 y el COM3) en tanto no se activen al mismo tiempo. De lo contrario, el equipo podría congelarse y funcionar defectuosamente.
De todas formas el puerto serial COMx de E/S de las computadoras modernas ha desaparecido y se ha remplazado por el puerto serial de E/S USB.
Resolución de conflictos del hardware
Si tiene un problema de hardware, primero intente de identificar el problema afín de poder determinar cuál es el periférico que lo está causando. Esto significa que debe tratar de eliminar tantas variables como sea posible hasta descubrir cuál es el elemento responsable:
- abrir la carcasa del equipo y retirar uno a uno los periféricos de E/S o elementos que puedan estar causando el conflicto.
- desactivar o desinstalar el software en el sistema operativo para detener el funcionamiento del periférico conflictivo.
- verificar en el BIOS que todo está bien. Muchos BIOS permiten cambiar números de IRQ a periféricos estándar (no recomendado).
En la actualidad el sistema Plug & Play resuelve los problemas de IRQ. Los problemas de interrupciones han desaparecidos o son muy pocos frecuentes.
FIN ...
No hay comentarios.:
Publicar un comentario
Realiza un comentario, debes autenticar una cuenta Gmail, Yahoo, OpenID, etc.