Que es una interrupción
Una 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, sino que pertenece al sistema operativo (o al BIOS). Una vez finalizada dicha
subrutina, se reanuda la ejecución del programa.
Las interrupciones surgen de la necesidad que tienen los dispositivos periféricos de enviar
información al procesador principal de un sistema informático.
Cuando se genere una interrupción, se deben salvar algunos registros del BCP del proceso,
como son el contador del programa, el estado y los registros del procesador; para que al
momento de retomar la ejecución del programa el procesador pueda continuar a partir de la
última instrucción.
Una interrupción puede ser:
- Sincrónica: Es generada por la CPU al ejecutar instrucciones.
- Asincrónica: Es generada por otros dispositivos y no está relacionada al reloj del
sistema.
Tipos de interrupciones.
● 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 las producen son externas al procesador y a menudo suelen estar ligadas
con los distintos dispositivos de E/S.
Las interrupciones de hardware son aquellas interrupciones que se producen como
resultado de, por lo general, una operación de E/S. No son producidas por ninguna
instrucción de un programa sino por las señales que emiten los dispositivos periféricos para
indicarle al procesador que necesitan ser atendidos.
Cuando el microprocesador accede a un periférico (disco duro, puerto de comunicación…),
puede transcurrir algún tiempo antes de que los datos sean obtenidos o transmitidos. La
solución más simple es esperar hasta recibir los datos o hasta que se haya efectuado la
transmisión (polling), pero esta solución bloquea todos los programas en ejecución, y eso no
puede admitirse en un sistema multitarea. Por ello, en los sistemas modernos se prefiere un
funcionamiento mediante interrupciones, ya que éstas permiten mejorar la productividad del
procesador, de forma que este último puede ordenar una operación de E/S y, en lugar de
tener que realizar una espera activa, se puede dedicar a atender a otro proceso o aplicación
hasta que el dispositivo esté de nuevo disponible, siendo dicho dispositivo el encargado de
notificar al procesador mediante la línea de interrupción que ya está preparado para
continuar/terminar la operación de E/S.
● 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).
La interrupción por software, también denominadas llamadas al sistema, son aquellas
generadas por un programa mientras este está ejecutándose. En general, actúan de la
siguiente manera:
Un programa que se venía ejecutando luego de su instrucción 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 recoger ese dato).
A tal efecto, luego de I5 existe en el programa, la instrucción de código de máquina CD21,
simbolizada INT 21 en Assembler, que realiza el requerimiento del paso 1. Puesto que no
puede seguir le ejecución de la instrucción I6 y siguientes del programa hasta que no se
haya leído el disco y esté en memoria principal dicho archivo, virtualmente el programa se
ha interrumpido, siendo, además, que luego de INT 21, las instrucciones que se ejecutarán
no serán del programa, sino del Sistema Operativo. Se detiene el programa y ordena en
este caso mediante INT21 (interrupción predefinida) que recoge el dato solicitado, para
poder seguir el programa que la ordenó).
La ejecución 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 leído el
disco y verificado que la lectura es correcta, el Sistema Operativo ordenará reanudar la
ejecución del programa auto interrumpido en espera.
La ejecución del programa se reanuda.
● Excepciones:
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 entre 0, el desbordamiento, el acceso a
una posición de memoria no permitida, código de operación incorrecto, Instrucción no
permitida en el modo de ejecución actual, etc.
Las excepciones son un tipo de interrupción sincrónica típicamente causada por una
condición de error en un programa, como por ejemplo una división entre 0 o un acceso
inválido a memoria en un proceso de usuario. Normalmente genera un cambio de contexto
a modo supervisor para que el sistema operativo atienda el error. Así pues, las excepciones
son un mecanismo de protección que permite garantizar la integridad de los datos
almacenados tanto en el espacio de usuario como en el espacio kernel. Cuando el Sistema
Operativo detecta una excepción intenta solucionarla, pero en caso de no poder
simplemente notificará la condición de error a la aplicación/usuario y abortará la misma.
Motivos de las interrupciones
1. Excepciones de programa: hay determinadas causas que hacen que un
programa presente un problema en su ejecución, por lo que deberá generarse
una interrupción, de forma que el sistema operativo trate dicha causa.
Ejemplos son el desbordamiento en las operaciones aritméticas, la división por
cero, el intento de ejecutar una instrucción con código de operación incorrecto
o de direccional una posición de memoria prohibida.
2. Interrupciones de reloj: el oscilador que gobierna las fases de ejecución de las
instrucciones máquina se denomina reloj. Cuando se dice que un
microprocesador es de 1.60GHz, lo que se está especificando es que el
oscilador que gobierna el ritmo de su funcionamiento interno produce una
onda cuadrada con una frecuencia de 1.60GHz. La señal producida por este
oscilador o por cualquier otro se divide mediante un divisor de frecuencia para
generar una interrupción cada cierto intervalo de tiempo. Estas
interrupciones, que se están produciendo constantemente, se denominan
interrupciones de reloj o ticks, dando lugar al reloj como generador de
interrupciones periódicas. El objetivo de estas interrupciones es hacer que el sistema
operativo entre a ejecutar operaciones de forma sistemática cada cierto
intervalo de tiempo. De esta manera, el sistema operativo puede evitar que un
programa monopolice el uso de la computadora y puede hacer que entren a
ejecutarse programas en determinados instantes de tiempo. Estas interrupciones se
producen cada varios milisegundos, por ejemplo cada 20 milisegundos.
3. Interrupciones de E/S: una de las funciones principales del kernel o núcleo de
cualquier sistema operativo es mantener una comunicación tal con el
microprocesador, que permite controlar correctamente los dispositivos de E/S.
Los controladores de estos dispositivos necesitan interrumpir para indicar las
operaciones que realizan.
4. Excepciones del hardware: La detección de un error de paridad en la
memoria o un corte de corriente se avisan mediante la correspondiente
interrupción. Las memorias RAM se dividen en estáticas y dinámicas. Una
Computadora usa tanto memoria de nueve bits (ocho bits y un bit de paridad,en 9
chips de memoria RAM dinámica) como memoria de ocho bits sin paridad. En
el primer caso los ocho primeros son para datos y el noveno es para el chequeo de
paridad, que se refiere al uso de bits de paridad para verificar si los datos
han sido transmitidos correctamente. El bit de paridades es añadido a cada
siete bits que se transmite. El bit de paridad para cada byte (siete bits de datos
más un bit de paridad) se pone para que todos los bytes tengan un número impar o
par de grupos de bits. Por ejemplo, si dos dispositivos se están comunicando con
paridad par (la forma más común de chequeo de paridad), cuando el dispositivo
transmisor envía datos, se cuenta el número de grupos de bits en cada grupo
de siete bits. Si el número de bits es par, se pone el bit de paridad a 0; si el
número de bits es impar, se pone el bit de paridad a 1. De esta forma, cada
byte tiene un número par de grupos de bits. En el caso de recepción, el
dispositivo chequea cada byte para asegurarse que tiene un número par de grupos
de bits. Si el receptor encuentra un número impar de grupos de bits, sabe que se ha
producido un error durante la transmisión. El transmisor y el receptor deben estar de
acuerdo en chequear la paridad y el tipo de paridad a usar,par o impar. Si
ambos no tienen configurada la misma paridad, la comunicación se hace
imposible. Este chequeo de paridad sirve para los dispositivos de
almacenamiento de memoria, por ejemplo, para cada vez que se arranca la
máquina. Así, una interrupción se genera cuando se detecta un error de paridad.
5. Instrucciones de TRAP: Estas instrucciones permiten que un programa
genere una interrupción. Estas instrucciones se emplean fundamentalmente para
solicitar los servicios del sistema operativo. Precisamente la activación misma del
sistema operativo solamente se realiza mediante el mecanismo de las
interrupciones. Cuando es un proceso en ejecución el que desea un servicio del
sistema operativo ha de utilizar una instrucción TRAP, que genera la
interrupción pertinente. En los demás casos será una interrupción,interna o externa,
la que reclame la atención del sistema operativo. Cuando Se programa en un
lenguaje de alto nivel, como C, la solicitud de un servicio del sistema operativo se
hace mediante una llamada a una función (por ejemplo: n = fork(), que es
para la creación de un nuevo proceso). No hay que confundir esta llamada con
el servicio del sistema operativo. La función fork del lenguaje C no realiza el
servicio fork, simplemente se limita a solicitar este servicio del sistema operativo.
Importancia de las interrupciones.
Todo esto de las interrupciones surgió debido a que en el pasado el procesador tenía que
estar verificando constantemente que dispositivos necesitaban su atención y en ocasiones
verificaba en vano ya que ninguno necesitaba atención ocasionando una pérdida de tiempo,
por eso las interrupciones solucionan este problema porque no es el procesador el que tiene
que preocuparse por estar verificando constantemente si no que los mismos dispositivos le
avisan al procesador cuando necesitan su atención y así se ahorra tiempo el procesador y
por consiguiente aumenta el rendimiento del sistema en general.
También es de aclarar que en ciertos intervalos de tiempo puede convenir no aceptar
señales de interrupción. Por eso las interrupciones pueden inhibirse por programa (aunque
esto no deben poder hacerlo las mismas), este se conoce como enmascaramiento de
interrupciones.
La interrupción enmascarable es una interrupción de hardware que bajo control (flanco o por
nivel) del software puede desactivarse o ignorarse mediante las instrucciones de la CPU.
Una no enmascarable es una interrupción de hardware que no puede ser desactivada o
ignorada por las instrucciones de la CPU. Se pueden programar por nivel (cambio de estado
lógico) o por flanco (cambio de estado de 1 a 0).
Interrupción por protección de memoria
Para ello se emplea un mecanismo llamado circuito de protección de memoria, cuando se
está en modo usuario, se activa un circuito que verifica que la dirección de memoria es
legal. Es habitual utilizar registros límite para la protección los valores base y límite de cada
proceso se guardan en su BCP.
Interrupción por división por 0
Estas interrupciones quedan atrapadas, como cuando el hardware interrumpe, detiene la
ejecución del programa actual y devuelve el control al sistema operativo, que luego maneja
el evento. Si bien las acciones dependen mucho del entorno, comúnmente el programa
puede terminarse, todos los recursos liberados (memoria, archivos abiertos) y,
opcionalmente, volcados de núcleo / seguimientos de pila generados con fines de
depuración en un sistema de desarrolladores.
Interrupción por desbordamiento
Se produce un desbordamiento de enteros cuando una operación aritmética intenta crear un
valor numérico que está fuera del rango que puede representarse con un número dado de
dígitos, ya sea mayor que el máximo o menor que el mínimo valor representable.
Cuántas interrupciones se puede manejar en una máquina
El número de interrupciones que puede soportar una máquina está ligado a su propia
arquitectura, ejemplos:
Vector de interrupciones
En informática, el vector de interrupciones es un vector que contiene el valor que apunta a
la dirección de memoria del gestor de una interrupción. En muchas arquitecturas de
computación típicas, los vectores de interrupción se almacenan en una tabla en una zona
de memoria, la llamada tabla de vectores de interrupción, de modo que cuando se atiende
una petición de interrupción de número n, el sistema, tras realizar eventualmente algunas
tareas previas (tales como salvar el valor de ciertos registros) transfiere el control a la
dirección indicada por el elemento n-ésimo de dicha tabla.
Usualmente, en las arquitecturas más típicas, la transferencia de control se efectuará de
modo análogo a una llamada a función a nivel de máquina, almacenándose en una pila el
estado actual del registro contador de programa, que será recuperado por una instrucción
máquina de retorno de interrupción, que restaurará el estado correspondiente a la ejecución
normal de programa forzando la ejecución de la siguiente instrucción.
En general, cada uno de los controladores del sistema, incluidos los de los adaptadores de
red y los de las líneas SLIP, tienen que poseer su propio vector de interrupción (o “IRQ”).
Una interrupción detiene el proceso momentáneamente para dar paso a la entrada/salida o
a otras operaciones. El procesamiento se reanuda una vez terminada la operación en
cuestión. Por ello, es importante que todos y cada uno de los dispositivos instalados en el
sistema tengan una interrupción que no cause conflictos con las del hardware ni con las de
otros periféricos (a no ser que el dispositivo en cuestión sea capaz de compartir
interrupciones). A menos que un dispositivo acepte compartir interrupciones, no debe usar
su vector de interrupción en ningún otro dispositivo del sistema. Consulte la documentación
del hardware de la red para determinar los vectores que acepta el hardware. El DCU
(Utilidad de configuración de dispositivos) enumera el hardware instalado en el sistema y los
vectores en uso.
Procesamiento de interrupciones
El procesamiento de interrupciones está mediado por un “controlador de interrupciones”,
conocido en el sistema de Windows como IRQ, el cual gestiona las interrupciones ya sea
por orden de llegada o por su prioridad.
Pasos:
1. Se detiene la ejecución del programa actual, se suspende temporalmente el
programa que está siendo ejecutado.
2. Salvar algunos registros del BCP del proceso, como son el contador del programa, el
estado y los registros del procesador; para que al momento de retomar la ejecución
del programa el procesador pueda continuar a partir de la última instrucción.
3. La CPU salta a la dirección de memoria donde se encuentra almacenada la rutina de
interrupción y ejecuta esa rutina que tiene como objetivo atender al dispositivo que
generó la interrupción.
4. Una vez que la rutina de interrupción termina el procesador vuelve a tomar el control.
El procesador retoma los procesos que quedaron pendientes y que se estaban
ejecutando antes de que se generara la interrupción.
Nivel de prioridad:
1. Excepciones del procesador.
2. Interrupciones de software.
3. Interrupciones de hardware no enmascarables.
4. Interrupciones de hardware enmascarables