Articulo de referencia

Interrumpir

Taxonomía de una interrupción simple En las computadoras digitales , una interrupción {{cite book\n | title = Introduction to computer organization: ARM - An under the hood look...

Taxonomía de una interrupción simple

En las computadoras digitales , una interrupción [ a ] es una solicitud para que el procesador interrumpa el código que se está ejecutando (cuando está permitido), de modo que el evento pueda procesarse de manera oportuna. Si se acepta la solicitud, el procesador suspenderá sus actividades actuales, guardará su estado y ejecutará una función llamada manejador de interrupciones (o rutina de servicio de interrupción , ISR) para gestionar el evento. Esta interrupción suele ser temporal, lo que permite que el software reanude [ b ] sus actividades normales una vez que el manejador de interrupciones finalice, aunque la interrupción también podría indicar un error fatal. [ 3 ]

Las interrupciones son utilizadas comúnmente por los dispositivos de hardware para indicar cambios de estado electrónicos o físicos que requieren atención inmediata. También se utilizan comúnmente para implementar la multitarea y las llamadas al sistema , especialmente en la computación en tiempo real . Se dice que los sistemas que utilizan interrupciones de esta manera son sistemas controlados por interrupciones. [ 4 ]

Historia

Las interrupciones de hardware se introdujeron como una optimización, eliminando el tiempo de espera improductivo en los bucles de sondeo , a la espera de eventos externos. El primer sistema en utilizar este enfoque fue el DYSEAC , completado en 1954, aunque los sistemas anteriores proporcionaban funciones de detección de errores. [ 5 ]

Generalmente se le atribuye al ordenador UNIVAC 1103A el primer uso de interrupciones en 1953. [ 6 ] [ 7 ] Anteriormente, en el UNIVAC I (1951), "el desbordamiento aritmético activaba la ejecución de una rutina de corrección de dos instrucciones en la dirección 0 o, a elección del programador, hacía que el ordenador se detuviera". El IBM 650 (1954) incorporó la primera aparición del enmascaramiento de interrupciones. El DYSEAC (1954) de la Oficina Nacional de Estándares fue el primero en utilizar interrupciones para E/S. El IBM 704 fue el primero en utilizar interrupciones para depuración , con una "trampa de transferencia", que podía invocar una rutina especial cuando se encontraba una instrucción de salto. El sistema TX-2 del Laboratorio Lincoln del MIT (1957) fue el primero en proporcionar múltiples niveles de interrupciones de prioridad. [ 7 ]

Tipos

Las señales de interrupción pueden generarse en respuesta a eventos de hardware o software . Estas se clasifican como interrupciones de hardware o interrupciones de software , respectivamente. Para un procesador en particular, el número de tipos de interrupción está limitado por la arquitectura.

interrupciones de hardware

Una interrupción de hardware es una condición relacionada con el estado del hardware que puede ser señalada por un dispositivo de hardware externo, por ejemplo, una línea de solicitud de interrupción (IRQ) en una PC, o detectada por dispositivos integrados en la lógica del procesador (por ejemplo, el temporizador de la CPU en IBM System/370), para comunicar que el dispositivo necesita atención del sistema operativo (SO) [ 8 ] o, si no hay SO, del programa bare metal que se ejecuta en la CPU. Dichos dispositivos externos pueden ser parte de la computadora (por ejemplo, controlador de disco ) o pueden ser periféricos externos . Por ejemplo, presionar una tecla del teclado o mover un mouse conectado a un puerto PS/2 activa interrupciones de hardware que hacen que el procesador lea la pulsación de tecla o la posición del mouse.

Las interrupciones de hardware pueden llegar de forma asíncrona con respecto al reloj del procesador y en cualquier momento durante la ejecución de las instrucciones. Por consiguiente, todas las señales de interrupción de hardware entrantes se sincronizan con el reloj del procesador y solo se procesan en los límites de la ejecución de las instrucciones.

En muchos sistemas, cada dispositivo está asociado a una señal IRQ específica. Esto permite determinar rápidamente qué dispositivo de hardware solicita servicio y agilizar su atención.

En algunos sistemas más antiguos, como el CDC 3600 de 1964 , [ 9 ] todas las interrupciones iban a la misma ubicación, y el sistema operativo utilizaba una instrucción especializada para determinar la interrupción no enmascarada pendiente de mayor prioridad. En los sistemas contemporáneos, generalmente hay una rutina de interrupción distinta para cada tipo de interrupción (o para cada fuente de interrupción), a menudo implementada como una o más tablas de vectores de interrupción .

Enmascaramiento

Enmascarar una interrupción es deshabilitarla, de modo que el procesador la difiere [ c ] o la ignora [ d ] , mientras que desenmascarar una interrupción es habilitarla. [ 10 ]

Los procesadores suelen tener un registro de máscara de interrupción interno , [ e ] que permite la habilitación selectiva [ 3 ] (y deshabilitación) de las interrupciones de hardware. Cada señal de interrupción está asociada a un bit en el registro de máscara. En algunos sistemas, la interrupción se habilita cuando el bit está activado y se deshabilita cuando está desactivado. En otros, ocurre lo contrario: un bit activado deshabilita la interrupción. Cuando la interrupción está deshabilitada, la señal de interrupción asociada puede ser ignorada por el procesador o puede permanecer pendiente. Las señales afectadas por la máscara se denominan interrupciones enmascarables .

Algunas señales de interrupción no se ven afectadas por la máscara de interrupción y, por lo tanto, no se pueden deshabilitar; estas se denominan interrupciones no enmascarables (NMI). Estas indican eventos de alta prioridad que no se pueden ignorar bajo ninguna circunstancia, como la señal de tiempo de espera de un temporizador de vigilancia . En el caso de SPARC , la interrupción no enmascarable (NMI), a pesar de tener la máxima prioridad entre las interrupciones, se puede evitar mediante el uso de una máscara de interrupción. [ 11 ]

Faltan interrupciones

Un modo de fallo se produce cuando el hardware no genera la interrupción esperada ante un cambio de estado, lo que provoca que el sistema operativo espere indefinidamente. Dependiendo de los detalles, el fallo puede afectar solo a un proceso o tener un impacto global. Algunos sistemas operativos cuentan con código específico para gestionar este tipo de fallos.

Por ejemplo, el sistema operativo IBM/360 (OS/360) se basa en una interrupción de fin de dispositivo (de no listo a listo) cuando se monta una cinta en una unidad de cinta, y no lee la etiqueta de la cinta hasta que se produce o se simula dicha interrupción. IBM añadió código en OS/360 para que el comando VARY ONLINE simule una interrupción de fin de dispositivo en el dispositivo de destino.

Interrupciones espurias

Una interrupción espuria es una interrupción de hardware para la cual no se encuentra ningún origen. El término "interrupción fantasma" o "interrupción fantasma" también puede usarse para describir este fenómeno. Las interrupciones espurias suelen ser un problema con un circuito de interrupción OR cableado conectado a una entrada de procesador sensible al nivel. Dichas interrupciones pueden ser difíciles de identificar cuando un sistema funciona incorrectamente.

En un circuito OR cableado, la carga/descarga de capacitancia parásita a través de la resistencia de polarización de la línea de interrupción provoca un pequeño retardo antes de que el procesador reconozca que la fuente de interrupción se ha borrado. Si el dispositivo de interrupción se borra demasiado tarde en la rutina de servicio de interrupción (ISR), no habrá tiempo suficiente para que el circuito de interrupción vuelva al estado de reposo antes de que finalice la instancia actual de la ISR. Como resultado, el procesador pensará que hay otra interrupción pendiente, ya que la tensión en su entrada de solicitud de interrupción no será lo suficientemente alta ni baja como para establecer un 1 o 0 lógico interno inequívoco. La aparente interrupción no tendrá una fuente identificable, de ahí el nombre de "espuria".

Una interrupción espuria también puede ser el resultado de anomalías eléctricas debidas a un diseño de circuito defectuoso, altos niveles de ruido , diafonía , problemas de sincronización o, más raramente, errores del dispositivo . [ 12 ]

Una interrupción espuria puede provocar un bloqueo del sistema u otro funcionamiento indefinido si la rutina de servicio de interrupción (ISR) no contempla la posibilidad de que se produzca dicha interrupción. Dado que las interrupciones espurias suelen ser un problema en los circuitos de interrupción OR cableados, una buena práctica de programación en estos sistemas consiste en que la ISR compruebe si hay actividad en todas las fuentes de interrupción y no realice ninguna acción (salvo, posiblemente, registrar el evento) si ninguna de ellas está generando una interrupción.

Interrupciones de software

Gestión de fuentes de interrupción y procesadores

El procesador solicita una interrupción de software al ejecutar instrucciones específicas o cuando se cumplen ciertas condiciones. Cada señal de interrupción de software está asociada a un controlador de interrupción específico.

Una interrupción de software puede ser causada intencionalmente mediante la ejecución de una instrucción especial que, por diseño, invoca una interrupción al ejecutarse. [ f ] Dichas instrucciones funcionan de manera similar a las llamadas a subrutinas y se utilizan para diversos fines, como solicitar servicios del sistema operativo e interactuar con controladores de dispositivos (por ejemplo, para leer o escribir en medios de almacenamiento). Las interrupciones de software también pueden ser provocadas por errores de ejecución de programas o por el sistema de memoria virtual .

Normalmente, el núcleo del sistema operativo captura y gestiona las interrupciones de software. Algunas interrupciones se gestionan de forma transparente para el programa; por ejemplo, la resolución normal de un fallo de página consiste en hacer accesible la página requerida en la memoria física. Pero en otros casos, como un fallo de segmentación, el sistema operativo ejecuta una función de devolución de llamada del proceso. En sistemas operativos tipo Unix , esto implica enviar una señal como SIGSEGV , SIGBUS , SIGILL o SIGFPE , que puede llamar a un manejador de señales o ejecutar una acción predeterminada (terminar el programa). En Windows, la devolución de llamada se realiza mediante el Manejo Estructurado de Excepciones con un código de excepción como STATUS_ACCESS_VIOLATION o STATUS_INTEGER_DIVIDE_BY_ZERO. [ 13 ] Las interrupciones de software intencionadas para llamadas al sistema dan como resultado llamadas a rutinas en el núcleo para realizar la función solicitada por la llamada al sistema.

En un proceso del núcleo , a menudo ciertos tipos de interrupciones de software no deberían ocurrir. Si, a pesar de ello, se producen, puede provocar un fallo del sistema operativo .

Terminología

Los términos interrupción , trampa , excepción , fallo y aborto se utilizan para distinguir los tipos de interrupciones, aunque "no hay un consenso claro sobre el significado exacto de estos términos". [ 14 ] El término trampa puede referirse a cualquier interrupción, a cualquier interrupción de software, a cualquier interrupción de software síncrona, o solo a las interrupciones causadas por instrucciones con trampa en sus nombres. En algunos usos, el término trampa se refiere específicamente a un punto de interrupción destinado a iniciar un cambio de contexto a un programa monitor o depurador . [ 2 ] También puede referirse a una interrupción síncrona causada por una condición excepcional (por ejemplo, división por cero , acceso a memoria no válido , código de operación ilegal ), [ 14 ] aunque el término excepción es más común para esto.

x86 divide las interrupciones en interrupciones (de hardware) y excepciones de software , e identifica tres tipos de excepciones: fallos, trampas y abortos. [ 15 ] [ 16 ] Las interrupciones (de hardware) son interrupciones activadas asincrónicamente por un dispositivo de E/S y permiten reiniciar el programa sin pérdida de continuidad. [ 15 ] Un fallo también se puede reiniciar, pero está vinculado a la ejecución síncrona de una instrucción: la dirección de retorno apunta a la instrucción que causó el fallo. Una trampa es similar a un fallo, excepto que la dirección de retorno apunta a la instrucción que se ejecutará después de la instrucción que causó la trampa; [ 17 ] un uso destacado es implementar llamadas al sistema . [ 16 ] Un aborto se utiliza para errores graves, como errores de hardware y valores no válidos en las tablas del sistema, y ​​a menudo [ g ] no permite reiniciar el programa. [ 17 ]

ARM utiliza el término excepción para referirse a todos los tipos de interrupciones, [ 18 ] y divide las excepciones en interrupciones (de hardware) , abortos , reinicios e instrucciones generadoras de excepciones. Los abortos corresponden a excepciones x86 y pueden ser abortos de prebúsqueda (fallos en la obtención de instrucciones) o abortos de datos (fallos en el acceso a datos), y pueden ser síncronos o asíncronos. Los abortos asíncronos pueden ser precisos o imprecisos. Los abortos de la MMU (fallos de página) son síncronos. [ 19 ]

RISC-V utiliza el término interrupción tanto para el conjunto general como para el subconjunto externo; las interrupciones internas se denominan excepciones.

Métodos de activación

Cada entrada de señal de interrupción está diseñada para activarse mediante un nivel de señal lógica o un flanco de señal específico (transición de nivel). Las entradas sensibles al nivel solicitan continuamente el servicio del procesador mientras se aplique un nivel lógico determinado (alto o bajo). Las entradas sensibles al flanco reaccionan a los flancos de señal: un flanco determinado (ascendente o descendente) provoca que se registre una solicitud de servicio; el procesador restablece el registro cuando se ejecuta el controlador de interrupción.

Activado por nivel

Se solicita una interrupción por nivel manteniendo la señal de interrupción en su nivel lógico activo (alto o bajo) . Un dispositivo activa una interrupción por nivel llevando la señal al nivel activo y manteniéndola en él. La señal se desactiva cuando el procesador se lo ordena, generalmente después de que el dispositivo haya recibido mantenimiento.

El procesador toma muestras de la señal de entrada de interrupción durante cada ciclo de instrucción. El procesador reconocerá la solicitud de interrupción si la señal está activa cuando se produce el muestreo.

Las entradas activadas por nivel permiten que varios dispositivos compartan una señal de interrupción común mediante conexiones OR cableadas. El procesador realiza sondeos para determinar qué dispositivos solicitan servicio. Tras atender un dispositivo, el procesador puede volver a sondear y, si es necesario, atender otros dispositivos antes de salir de la rutina de servicio de interrupción (ISR). Como se describió anteriormente, un procesador cuya entrada de interrupción sensible al nivel está conectada a un circuito OR cableado es susceptible a interrupciones espurias, que, de producirse, pueden causar un bloqueo total u otro fallo del sistema potencialmente fatal.

Activado por borde

Una interrupción activada por flanco es aquella que se señala mediante una transición de nivel en la línea de interrupción, ya sea un flanco descendente (de alto a bajo) o un flanco ascendente (de bajo a alto). El dispositivo que desea generar una interrupción envía un pulso a la línea y, a continuación, la desactiva.

Lo importante del disparo por flanco es que la señal debe cambiar de estado para activar la interrupción; por ejemplo, si la transición fuera de alto a bajo, solo se activaría una interrupción por flanco descendente, y el nivel bajo continuo no activaría ninguna otra. La señal debe volver al nivel alto y volver a bajar para activar una nueva interrupción. Esto contrasta con el disparo por nivel, donde el nivel bajo continuaría generando interrupciones (si están habilitadas) hasta que la señal vuelva a su nivel alto.

Los ordenadores con interrupciones activadas por flanco pueden incluir un registro de interrupción que conserva el estado de las interrupciones pendientes. Los sistemas con registros de interrupción generalmente también disponen de registros de máscara de interrupción.

Respuesta del procesador

El procesador muestrea las señales de activación de interrupción o el registro de interrupción durante cada ciclo de instrucción y procesará la interrupción habilitada de mayor prioridad que encuentre. Independientemente del método de activación, el procesador comenzará el procesamiento de la interrupción en el siguiente límite de instrucción después de la detección de la señal de activación, asegurando así:

  • Todas las instrucciones anteriores a la indicada por el PC se han ejecutado por completo.
  • No se ha ejecutado ninguna instrucción más allá de la indicada por el PC, o bien dichas instrucciones se deshacen antes de gestionar la interrupción.
  • El estado del procesador [ h ] se guarda de una manera conocida. Normalmente, el estado se almacena en una ubicación conocida, pero en algunos sistemas se almacena en una pila.

Existen varias arquitecturas diferentes para el manejo de interrupciones. En algunas, hay un único manejador de interrupciones [ 20 ] que debe buscar la interrupción habilitada de mayor prioridad. En otras, hay manejadores de interrupciones separados para distintos tipos de interrupciones, [ 21 ] distintos canales o dispositivos de E/S, o ambos. [ 22 ] [ 23 ] Varias causas de interrupción pueden tener el mismo tipo de interrupción y, por lo tanto, el mismo manejador de interrupciones, lo que requiere que el manejador de interrupciones determine la causa. [ 21 ]

Implementación del sistema

Las interrupciones pueden ser gestionadas completamente por hardware por la CPU, o pueden ser gestionadas tanto por la CPU como por otro componente, como un controlador de interrupciones programable o un puente sur .

Si se utiliza un componente adicional, este se conectaría entre el dispositivo que genera la interrupción y el pin de interrupción del procesador para multiplexar varias fuentes de interrupción en las una o dos líneas de la CPU que suelen estar disponibles. Si se implementa como parte del controlador de memoria , las interrupciones se asignan al espacio de direcciones de memoria del sistema .

En las implementaciones de sistemas en un chip (SoC), las interrupciones provienen de diferentes bloques del chip y generalmente se agregan en un controlador de interrupciones conectado a uno o varios procesadores (en un sistema multinúcleo). [ 24 ]

Líneas de interrupción compartidas

Varios dispositivos pueden compartir una línea de interrupción activada por flanco si están diseñados para ello. La línea de interrupción debe tener una resistencia de polarización a tierra o a tierra para que, cuando no esté activa, vuelva a su estado inactivo, que es su estado predeterminado. Los dispositivos señalan una interrupción llevando brevemente la línea a su estado no predeterminado y la dejan flotando (sin activarla) cuando no señalan una interrupción. Este tipo de conexión también se conoce como colector abierto . La línea transporta entonces todos los pulsos generados por todos los dispositivos. (Esto es análogo al cordón de algunos autobuses y tranvías que cualquier pasajero puede tirar para indicar al conductor que solicita una parada). Sin embargo, los pulsos de interrupción de diferentes dispositivos pueden fusionarse si ocurren en un intervalo de tiempo cercano. Para evitar la pérdida de interrupciones, la CPU debe activarse en el flanco descendente del pulso (por ejemplo, en el flanco ascendente si la línea está polarizada a tierra y se mantiene a nivel bajo). Después de detectar una interrupción, la CPU debe verificar todos los dispositivos para comprobar los requisitos de servicio.

Las interrupciones activadas por flanco no presentan los problemas de compartición que sí tienen las activadas por nivel. El servicio de un dispositivo de baja prioridad puede posponerse arbitrariamente, mientras que las interrupciones de dispositivos de alta prioridad se siguen recibiendo y procesando. Si existe un dispositivo que la CPU desconoce cómo atender, lo que puede generar interrupciones espurias, esto no interferirá con la señalización de interrupción de otros dispositivos. Sin embargo, es fácil que una interrupción activada por flanco pase desapercibida —por ejemplo, cuando las interrupciones se enmascaran durante un período— y, a menos que exista algún tipo de registro de hardware que registre el evento, es imposible recuperarlo. Este problema provocó muchos bloqueos en el hardware informático antiguo, ya que el procesador desconocía que debía realizar alguna acción. El hardware más moderno suele tener uno o más registros de estado de interrupción que registran las solicitudes de interrupción; un código de gestión de interrupciones bien escrito, basado en flancos, puede comprobar estos registros para garantizar que no se pierda ningún evento.

El bus ISA ( Industry Standard Architecture ) utiliza interrupciones activadas por flanco, sin exigir que los dispositivos puedan compartir líneas IRQ. Sin embargo, todas las placas base ISA convencionales incluyen resistencias pull-up en sus líneas IRQ, por lo que los dispositivos ISA que se comportan correctamente y comparten líneas IRQ deberían funcionar sin problemas. El puerto paralelo también utiliza interrupciones activadas por flanco. Muchos dispositivos antiguos asumen que tienen el uso exclusivo de las líneas IRQ, lo que hace que compartirlas sea eléctricamente inseguro.

Existen tres formas de conectar varios dispositivos que comparten la misma línea. La primera es mediante conducción exclusiva (conmutación) o conexión exclusiva (a pines). La segunda es mediante bus (todos conectados a la misma línea): las tarjetas en un bus deben saber cuándo deben comunicarse y cuándo no (es decir, el bus ISA). La comunicación se puede activar de dos maneras: mediante un pestillo de acumulación o mediante puertas lógicas. Las puertas lógicas esperan un flujo de datos continuo que se monitoriza en busca de señales clave. Los acumuladores solo se activan cuando el lado remoto excita la puerta más allá de un umbral, por lo que no se requiere una velocidad negociada. Cada método tiene sus ventajas en cuanto a velocidad y distancia. Un disparador, generalmente, es el método mediante el cual se detecta la excitación: flanco ascendente, flanco descendente, umbral ( el osciloscopio puede activar una amplia variedad de formas y condiciones).

La activación de interrupciones de software debe estar integrada en el software (tanto en el sistema operativo como en la aplicación). Una aplicación en C tiene una tabla de activación (una tabla de funciones) en su encabezado, que tanto la aplicación como el sistema operativo conocen y utilizan adecuadamente, sin relación con el hardware. Sin embargo, no hay que confundir esto con las interrupciones de hardware, que envían señales a la CPU (la CPU ejecuta software a partir de una tabla de funciones, de forma similar a las interrupciones de software).

Dificultad para compartir líneas de interrupción

Varios dispositivos que comparten una línea de interrupción (independientemente del tipo de activación) actúan como fuentes de interrupción espurias entre sí. Con muchos dispositivos en una misma línea, la carga de trabajo para gestionar las interrupciones aumenta proporcionalmente al número de dispositivos. Por lo tanto, es preferible distribuir los dispositivos de manera uniforme entre las líneas de interrupción disponibles. La escasez de líneas de interrupción es un problema en los diseños de sistemas antiguos, donde las líneas de interrupción son conductores físicos independientes. Las interrupciones señalizadas por mensaje, donde la línea de interrupción es virtual, son las preferidas en las nuevas arquitecturas de sistemas (como PCI Express ) y alivian este problema considerablemente.

Algunos dispositivos con una interfaz de programación mal diseñada no permiten determinar si han solicitado servicio. Pueden bloquearse o presentar fallos si se les presta servicio cuando no lo desean. Dichos dispositivos no toleran interrupciones falsas y, por lo tanto, tampoco toleran compartir una línea de interrupción. Las tarjetas ISA , debido a su diseño y construcción a menudo económicos, son conocidas por este problema. Estos dispositivos son cada vez más raros, ya que la lógica de hardware se abarata y las nuevas arquitecturas de sistema exigen interrupciones compartibles.

Híbrido

Algunos sistemas utilizan una combinación de señalización activada por nivel y por flanco. El hardware no solo detecta un flanco, sino que también verifica que la señal de interrupción permanezca activa durante un período de tiempo determinado.

Un uso común de las interrupciones híbridas es para la entrada de interrupción no enmascarable (NMI). Dado que las NMI generalmente señalan eventos importantes, o incluso catastróficos, del sistema, una buena implementación de esta señal busca garantizar la validez de la interrupción verificando que permanezca activa durante un período de tiempo. Este enfoque de dos pasos ayuda a evitar que las interrupciones falsas afecten al sistema.

Señalizado por mensaje

Una interrupción señalizada por mensaje no utiliza una línea de interrupción física. En su lugar, un dispositivo indica su solicitud de servicio enviando un mensaje breve a través de un medio de comunicación, normalmente un bus de computadora . El mensaje puede ser de un tipo reservado para interrupciones o de un tipo preexistente, como una escritura en memoria.

Las interrupciones señalizadas por mensaje se comportan de forma muy similar a las interrupciones activadas por flanco, ya que la interrupción es una señal momentánea en lugar de una condición continua. El software de gestión de interrupciones las trata de manera muy parecida. Normalmente, se permite la fusión de varias interrupciones señalizadas por mensaje pendientes con el mismo mensaje (la misma línea de interrupción virtual), al igual que se permite la fusión de interrupciones activadas por flanco muy próximas entre sí.

Los vectores de interrupción señalizados por mensajes pueden compartirse, siempre que el medio de comunicación subyacente sea compartible. No se requiere ningún esfuerzo adicional.

Dado que la identidad de la interrupción se indica mediante un patrón de bits de datos, sin necesidad de un conductor físico independiente, se pueden gestionar de forma eficiente muchas más interrupciones distintas. Esto reduce la necesidad de compartir recursos. Los mensajes de interrupción también se pueden transmitir a través de un bus serie, sin necesidad de líneas adicionales.

PCI Express , un bus serie para ordenadores, utiliza exclusivamente interrupciones señalizadas por mensajes .

Timbre de la puerta

En una analogía con un botón pulsador aplicada a sistemas informáticos , el término "timbre" o "interrupción de timbre" se usa a menudo para describir un mecanismo mediante el cual un sistema de software puede indicar o notificar a un dispositivo de hardware que hay una tarea pendiente. Normalmente, el sistema de software coloca los datos en ubicaciones de memoria conocidas y acordadas, y "llama a la puerta" escribiendo en una ubicación de memoria diferente. Esta ubicación de memoria se suele denominar región de timbre, e incluso puede haber varios timbres con diferentes funciones en esta región. Es esta acción de escribir en la región de memoria del timbre la que "llama a la puerta" y notifica al dispositivo de hardware que los datos están listos y esperando. El dispositivo de hardware entonces sabe que los datos son válidos y puede procesarlos. Normalmente, escribiría los datos en un disco duro , los enviaría a través de una red , los cifraría , etc.

El término "interrupción de timbre" suele ser un nombre inapropiado . Si bien es similar a una interrupción, ya que provoca que el dispositivo realice alguna tarea, la región del timbre a veces se implementa como una región de sondeo , otras veces escribe directamente en los registros físicos del dispositivo y, en ocasiones, está conectada directamente a dichos registros. Tanto al escribir a través de los registros físicos como directamente en ellos, esto puede provocar una interrupción real en la unidad central de procesamiento ( CPU ) del dispositivo, si la tiene.

Las interrupciones por timbre se pueden comparar con las interrupciones señalizadas por mensaje , ya que tienen algunas similitudes.

IPI multiprocesador

En los sistemas multiprocesador , un procesador puede enviar una solicitud de interrupción a otro procesador a través de interrupciones entre procesadores [ i ] (IPI).

Actuación

Las interrupciones ofrecen una baja sobrecarga y una buena latencia con cargas bajas, pero su rendimiento se degrada significativamente con una alta tasa de interrupciones, a menos que se tomen precauciones para evitar diversas patologías. El fenómeno en el que el rendimiento general del sistema se ve gravemente afectado por el excesivo tiempo de procesamiento dedicado a gestionar las interrupciones se denomina tormenta de interrupciones .

Existen diversas formas de bloqueos permanentes , en las que el sistema dedica todo su tiempo a procesar interrupciones, excluyendo otras tareas necesarias. En condiciones extremas, un gran número de interrupciones (como un tráfico de red muy elevado) puede paralizar completamente el sistema. Para evitar estos problemas, un sistema operativo debe planificar el manejo de las interrupciones de red con la misma precisión con la que planifica la ejecución de los procesos. [ 25 ]

Con procesadores multinúcleo, se pueden lograr mejoras adicionales en el rendimiento del manejo de interrupciones mediante el escalado del lado de recepción (RSS) cuando se utilizan tarjetas de red multicola . Estas tarjetas de red proporcionan múltiples colas de recepción asociadas a interrupciones separadas; al enrutar cada una de esas interrupciones a diferentes núcleos, el procesamiento de las solicitudes de interrupción activadas por el tráfico de red recibido por una sola tarjeta de red se puede distribuir entre varios núcleos. La distribución de las interrupciones entre los núcleos puede ser realizada automáticamente por el sistema operativo, o bien el enrutamiento de las interrupciones (generalmente denominado afinidad IRQ ) puede configurarse manualmente. [ 26 ] [ 27 ]

Una implementación puramente basada en software de la distribución del tráfico de recepción, conocida como dirección de paquetes de recepción (RPS), distribuye el tráfico recibido entre los núcleos posteriores en la ruta de datos, como parte de la funcionalidad del controlador de interrupciones . Las ventajas de RPS sobre RSS incluyen la ausencia de requisitos de hardware específico, filtros de distribución de tráfico más avanzados y una tasa reducida de interrupciones producidas por una NIC. Como desventaja, RPS aumenta la tasa de interrupciones entre procesadores (IPI). La dirección de flujo de recepción (RFS) lleva el enfoque basado en software más allá al tener en cuenta la localidad de la aplicación ; se logran mejoras adicionales en el rendimiento al procesar las solicitudes de interrupción por los mismos núcleos en los que la aplicación objetivo consumirá determinados paquetes de red. [ 26 ] [ 28 ] [ 29 ]

Usos típicos

Las interrupciones se utilizan habitualmente para dar servicio a los temporizadores de hardware, transferir datos desde y hacia el almacenamiento (p. ej., E/S de disco) e interfaces de comunicación (p. ej., UART , Ethernet ), gestionar eventos de teclado y ratón, y responder a cualquier otro evento sensible al tiempo según lo requiera el sistema de la aplicación. Las interrupciones no enmascarables se utilizan normalmente para responder a solicitudes de alta prioridad, como los tiempos de espera del temporizador de vigilancia, las señales de apagado y las trampas .

Los temporizadores de hardware se utilizan a menudo para generar interrupciones periódicas. En algunas aplicaciones, el gestor de interrupciones contabiliza estas interrupciones para controlar el tiempo absoluto o transcurrido, o bien el planificador de tareas del sistema operativo las utiliza para gestionar la ejecución de los procesos en ejecución , o ambas cosas. Las interrupciones periódicas también se utilizan habitualmente para invocar el muestreo de dispositivos de entrada como convertidores analógico-digitales , interfaces de codificadores incrementales y entradas GPIO , y para programar dispositivos de salida como convertidores digital-analógicos , controladores de motor , pantallas multiplexadas y salidas GPIO.

Una interrupción de disco indica la finalización de una transferencia de datos desde o hacia el periférico de disco; esto puede provocar la ejecución de un proceso que esté esperando para leer o escribir. Una interrupción de apagado predice una pérdida inminente de energía, lo que permite que el equipo se apague de forma ordenada mientras aún tenga suficiente energía para hacerlo. Las interrupciones de teclado normalmente hacen que las pulsaciones de teclas se almacenen en búfer para implementar la función de autocompletado .

Las interrupciones se utilizan a veces para emular instrucciones que no están implementadas en algunos ordenadores de una familia de productos. [ 30 ] [ 31 ] Por ejemplo, las instrucciones de punto flotante pueden estar implementadas en hardware en algunos sistemas y emuladas en sistemas de menor coste. En este último caso, la ejecución de una instrucción de punto flotante no implementada provocará una interrupción de excepción de "instrucción ilegal". El controlador de interrupciones implementará la función de punto flotante en software y luego volverá al programa interrumpido como si se hubiera ejecutado la instrucción implementada en hardware. [ 32 ] Esto proporciona portabilidad del software de aplicación en toda la línea.

Las interrupciones son similares a las señales , con la diferencia de que las señales se utilizan para la comunicación entre procesos (IPC), mediada por el núcleo (posiblemente mediante llamadas al sistema) y gestionada por los procesos, mientras que las interrupciones son mediadas por el procesador y gestionadas por el núcleo . El núcleo puede pasar una interrupción como señal al proceso que la causó (ejemplos típicos son SIGSEGV , SIGBUS , SIGILL y SIGFPE ).

Véase también

Notas

  1. La nomenclatura varía según la plataforma y el autor. Otros términos utilizados incluyen excepción [ 1 ] y trampa . [ 2 ]
  2. El sistema operativo podría reanudar el proceso interrumpido o podría cambiar a un proceso diferente.
  3. Normalmente, los eventos de interrupción asociados con E/S permanecen pendientes hasta que la interrupción se habilita o se borra explícitamente, por ejemplo, mediante la instrucción Test Pending Interruption ( TPI ) de IBM System/370-XA y posteriores.
  4. Por ejemplo, cuando los bits de máscara de programa en el IBM System/360 son 0 (deshabilitados), los eventos de desbordamiento y significancia correspondientes no dan como resultado una interrupción pendiente.
  5. El registro de máscara puede ser un solo registro o varios registros, por ejemplo, bits en el PSW y otros bits en los registros de control .
  6. Ver INT (instrucción x86)
  7. Algunos sistemas operativos pueden recuperarse de errores graves, por ejemplo, paginando una página desde un archivo de paginación después de un error ECC incorregible en una página no modificada.
  8. Esto podría ser simplemente el Contador de Programa (PC) , un PSW o varios registros.
  9. Conocido como toques en el hombro en algunos sistemas operativos de IBM.

Referencias

  1. Plantz, Robert G. «Capítulo 21: Excepciones e interrupciones». Introducción a la organización de computadoras: ARM - Una mirada al interior del hardware y el lenguaje ensamblador ARM A64 . No Starch Press . pág.  468. ISBN 978-1-7185-0274-1LCCN 2024946402. NOTA: Si bien los conceptos generales son los mismos, la terminología varía, por lo que debe tenerlo en cuenta al leer los manuales correspondientes. Por ejemplo, ARM utiliza el término excepción como término más general, siendo una interrupción un tipo de excepción. Intel, por otro lado, utiliza el término interrupción como término más general, siendo una excepción un tipo de interrupción. 
  2. 1 2 "The Jargon File, versión 4.4.7" . 27 de octubre de 2003. Archivado del original el 18 de febrero de 2007. Consultado el 20 de enero de 2022 .
  3. 1 2 Jonathan Corbet; Alessandro Rubini; Greg Kroah-Hartman (2005). " Controladores de dispositivos Linux , tercera edición, capítulo 10. Manejo de interrupciones" (PDF) . O'Reilly Media . pág. 269. Archivado (PDF) del original el 14 de marzo de 2015. Recuperado el 25 de diciembre de 2014. Luego , solo es cuestión de limpiar, ejecutar interrupciones de software y volver al trabajo normal. El "trabajo normal" bien podría haber cambiado como resultado de una interrupción (el manejador podría un proceso, por ejemplo), por lo que lo último que sucede al regresar de una interrupción es una posible reprogramación del procesador. wake_up
  4. Rosenthal, Scott (mayo de 1995). "Conceptos básicos de interrupciones" . Archivado del original el 26 de abril de 2016. Consultado el 11 de noviembre de 2010 .
  5. Codd, Edgar F. "Multiprogramación". Avances en Computadoras . 3 : 82.
  6. Bell, C. Gordon; Newell, Allen (1971). Estructuras informáticas: lecturas y ejemplos . McGraw-Hill. pág. 46. ISBN  9780070043572. Consultado el 18 de febrero de 2019 .
  7. 1 2 Smotherman, Mark. "Interrumpe" . Archivado del original el 4 de abril de 2020. Recuperado el 22 de diciembre de 2021 .
  8. "Interrupciones de hardware" . Archivado del original el 3 de septiembre de 2014. Consultado el 9 de febrero de 2014 .
  9. "Instrucciones de interrupción". Manual de referencia del sistema informático Control Data 3600 (PDF) . Control Data Corporation. Julio de 1964. págs. 4–6 . 60021300. 
  10. Bai, Ying (2017). Ingeniería de microcontroladores con MSP432: Fundamentos y aplicaciones . CRC Press. pág. 21. ISBN  978-1-4987-7298-3LCCN 2016020120. En el sistema Cortex -M4, las interrupciones y excepciones tienen las siguientes propiedades: ... Generalmente, se utiliza un solo bit en un registro de máscara para enmascarar (deshabilitar) o desenmascarar (habilitar) ciertas interrupciones/excepciones . 
  11. "Niveles de interrupción" . Archivado del original el 17/11/2023 . Consultado el 17/11/2023 .
  12. Li, Qing; Yao, Caroline (2003). Conceptos en tiempo real para sistemas embebidos . CRC Press. pág. 163. ISBN  1482280825.
  13. "Excepciones de hardware" . docs.microsoft.com . 3 de agosto de 2021. Archivado del original el 22 de diciembre de 2021. Consultado el 21 de enero de 2022 .
  14. 1 2 Hyde, Randall (1996). "Capítulo diecisiete: Interrupciones, trampas y excepciones (Parte 1)" . El arte de la programación en lenguaje ensamblador . Archivado del original el 22 de diciembre de 2021. Recuperado el 22 de diciembre de 2021. El concepto de interrupción es algo que ha ampliado su alcance a lo largo de los años. La familia 80x86 solo ha aumentado la confusión en torno a las interrupciones al introducir la instrucción int (interrupción de software). De hecho, diferentes fabricantes han utilizado términos como excepciones, fallos, abortos, trampas e interrupciones para describir los fenómenos que se analizan en este capítulo. Desafortunadamente, no existe un consenso claro sobre el significado exacto de estos términos. Diferentes autores adoptan diferentes términos para su propio uso.
  15. 1 2 "Manual del desarrollador de software de las arquitecturas Intel® 64 e IA-32 Volumen 1: Arquitectura básica" . págs. 6–12 Vol. 1. Consultado el 22 de diciembre de 2021 . 
  16. 1 2 Bryant, Randal E.; O'Hallaron, David R. (2016). "8.1.2 Clases de excepciones". Sistemas informáticos: una perspectiva del programador (Tercera edición global). Harlow: Pearson. ISBN  978-1-292-10176-7.
  17. 1 2 "Manual del desarrollador de software para arquitecturas Intel® 64 e IA-32, volumen 3A: Guía de programación del sistema, parte 1" . pág. 6-5 Vol. 3A . Consultado el 22 de diciembre de 2021 . 
  18. "Gestión de excepciones" . developer.arm.com . Guía del programador de la serie ARM Cortex-A para ARMv7-A . Consultado el 21 de enero de 2022 .
  19. "Tipos de excepción" . developer.arm.com . Guía del programador de la serie ARM Cortex-A para ARMv7-A . Consultado el 22 de diciembre de 2021 .
  20. "Capítulo IV - Sistema de interrupciones" (PDF) . 3600 - Sistema informático - Manual de referencia (PDF) . Revisión K. Control Data Corporation . 11 de octubre de 1966. págs. 4-1 – 4-12 . 60021300K . Consultado el 17 de mayo de 2023 . 
  21. 1 2 Principios de funcionamiento del sistema IBM/360 (PDF) (Octava ed.). IBM . Septiembre de 1968. pág. 77. A22-6821-7. Archivado (PDF) del original el 19 de marzo de 2022. Recuperado el 17 de mayo de 2023 .  
  22. "Capítulo 5. TÉCNICAS DE PROGRAMACIÓN" (PDF) . Manual del procesador PDP-11 PDP11/04/34a/44/60/70 (PDF) . Digital Equipment Corporation . 1979. págs. 128–131 . Consultado el 1 de marzo de 2025 . 
  23. Manual de periféricos e interfaces del PDP-11 (PDF) . Digital Equipment Corporation . pág. 4. Archivado (PDF) del original el 4 de junio de 2023. Consultado el 2 de junio de 2023 . 
  24. Yiu, Joseph (1 de enero de 2010), "CAPÍTULO 2 - Descripción general del Cortex-M3" , en Yiu, Joseph (ed.), La guía definitiva del ARM Cortex-M3 (Segunda edición) , Oxford: Newnes, pp. 11–24 , doi : 10.1016/b978-1-85617-963-8.00005-3 , ISBN  978-1-85617-963-8, consultado el 11 de octubre de 2023
  25. Mogul, Jeffrey C.; Ramakrishnan, KK (1997). "Eliminación del bloqueo de recepción en un núcleo controlado por interrupciones" . ACM Transactions on Computer Systems . 15 (3): 217– 252. doi : 10.1145/263326.263335 . S2CID 215749380. Recuperado el 11 de noviembre de 2010 . 
  26. 1 2 Tom Herbert; Willem de Bruijn (9 de mayo de 2014). "Documentation/networking/scaling.txt" . Documentación del kernel de Linux . kernel.org . Archivado del original el 22 de mayo de 2014. Recuperado el 16 de noviembre de 2014 .
  27. "Hoja de datos de la familia de controladores Gigabit Ethernet Intel 82574" (PDF) . Intel . Junio ​​de 2014. pág. 1. Consultado el 16 de noviembre de 2014 . 
  28. Jonathan Corbet (17 de noviembre de 2009). "Recepción de direccionamiento de paquetes" . LWN.net . Archivado del original el 24 de mayo de 2018. Recuperado el 16 de noviembre de 2014 .
  29. Jake Edge (7 de abril de 2010). "Receive flow steering" . LWN.net . Archivado del original el 29 de noviembre de 2014. Recuperado el 16 de noviembre de 2014 .
  30. "SIMULADOR DECIMAL" (PDF) . Sistema operativo IBM System/360 - Guía de compatibilidad con el modelo 91 (PDF) . Biblioteca de referencia de sistemas. págs. 11–12 . C28-6666-0 . Consultado el 2 de septiembre de 2024 . 
  31. Thusoo, Shalesh; et al. "Patente US 5632028 A" . Patentes de Google . Consultado el 13 de agosto de 2017 . 
  32. Altera Corporation (2009). Referencia del procesador Nios II (PDF) . pág. 4. Consultado el 13 de agosto de 2017 . 
  • Interrupciones simplificadas
  • Interrupciones para el microcontrolador Microchip PIC
  • Tabla de interrupciones de IBM PC
  • Universidad de Alberta CMPUT 296 Computación Concreta: Notas sobre Interrupciones , archivado del original el 13 de marzo de 2012.
  • Interrupciones por cambio de pin en Arduino ( Archivado el 31/01/2023 en Wayback Machine) - Artículo de Adityapratap Singh
Obtenido de " https://en.wikipedia.org/w/index.php?title=Interrupt&oldid=1362919721#Software_interrupts "