stringtranslate.com

Interrumpir

Fuentes de interrupción y manejo del procesador.

En las computadoras digitales , una interrupción (a veces denominada trampa ) [1] es una solicitud para que el procesador interrumpa el código que se está ejecutando actualmente (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 controlador de interrupciones (o rutina de servicio de interrupciones , ISR) para manejar el evento. Esta interrupción suele ser temporal, lo que permite que el software reanude [a] sus actividades normales una vez que finaliza el controlador de interrupciones, aunque la interrupción podría indicar un error fatal. [2]

Los dispositivos de hardware suelen utilizar interrupciones para indicar cambios de estado físico o electrónico que requieren atención urgente. Las interrupciones también se utilizan comúnmente para implementar llamadas al sistema y multitarea en la computadora , especialmente en la computación en tiempo real . Se dice que los sistemas que utilizan interrupciones de esta manera están impulsados ​​por interrupciones. [3]

Historia

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

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

Tipos

Se pueden emitir señales de interrupción en respuesta a eventos de hardware o software . Estas se clasifican como interrupciones de hardware o interrupciones de software , respectivamente. Para cualquier procesador en particular, la cantidad de tipos de interrupciones está limitada 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) [7] o, si no hay ningún SO, del programa básico que se ejecuta en la CPU. Dichos dispositivos externos pueden ser parte de la computadora (por ejemplo, un 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 desencadena interrupciones de hardware que hacen que el procesador lea la pulsación de la 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 la instrucción. En consecuencia, todas las señales de interrupción de hardware entrantes se condicionan sincronizándolas con el reloj del procesador y actúan sobre ellas solo en los límites de ejecución de instrucciones.

En muchos sistemas, cada dispositivo está asociado con una señal IRQ particular. Esto hace posible determinar rápidamente qué dispositivo de hardware está solicitando servicio y acelerar el servicio de ese dispositivo.

En algunos sistemas más antiguos, como el CDC 3600 de 1964 , [8] todas las interrupciones iban a la misma ubicación y el sistema operativo utilizaba una instrucción especializada para determinar la interrupción desenmascarada pendiente de mayor prioridad. En los sistemas contemporáneos, generalmente existe 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, por lo que el procesador la difiere [b] o la ignora [c], mientras que desenmascarar una interrupción es habilitarla . [9]

Los procesadores suelen tener un registro de máscara de interrupción interna , [d] que permite habilitar selectivamente [2] (y deshabilitar) las interrupciones de hardware. Cada señal de interrupción está asociada con un bit en el registro de máscara. En algunos sistemas, la interrupción se habilita cuando se establece el bit y se deshabilita cuando el bit se borra. En otros, ocurre lo contrario y un bit establecido desactiva la interrupción. Cuando la interrupción está deshabilitada, el procesador puede ignorar la señal de interrupción asociada o puede permanecer pendiente. Las señales que se ven 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 desactivar; estas se denominan interrupciones no enmascarables (NMI). Estos indican eventos de alta prioridad que no pueden ignorarse bajo ninguna circunstancia, como la señal de tiempo de espera de un temporizador de vigilancia . Con respecto a SPARC , la interrupción no enmascarable (NMI), a pesar de tener la mayor prioridad entre las interrupciones, se puede evitar mediante el uso de una máscara de interrupción. [10]

Interrupciones faltantes

Un modo de falla es cuando el hardware no genera la interrupción esperada por un cambio de estado, lo que hace que el sistema operativo espere indefinidamente. Dependiendo de los detalles, la falla podría afectar solo a un proceso o podría tener un impacto global. Algunos sistemas operativos tienen código específicamente para solucionar esto.

Por ejemplo, IBM Operating System/360 (OS/360) se basa en una interrupción del extremo del dispositivo que no está listo para estar listo cuando se ha montado una cinta en una unidad de cinta y no leerá la etiqueta de la cinta hasta que se produzca o se elimine esa interrupción. simulado. IBM agregó 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 puede encontrar ninguna fuente. El término "interrupción fantasma" o "interrupción fantasma" también puede utilizarse para describir este fenómeno. Las interrupciones espurias tienden a ser un problema con un circuito de interrupción OR cableado conectado a una entrada de procesador sensible al nivel. Estas interrupciones pueden ser difíciles de identificar cuando un sistema se comporta mal.

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 provocará un pequeño retraso 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 regrese al estado de reposo antes de que termine la instancia actual del ISR. El resultado es que el procesador pensará que hay otra interrupción pendiente, ya que el voltaje en su entrada de solicitud de interrupción no será lo suficientemente alto o bajo como para establecer un 1 lógico interno o un 0 lógico interno inequívoco. La interrupción aparente no tendrá una fuente identificable, de ahí el " apodo "espurio".

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

Una interrupción espuria puede provocar un punto muerto del sistema u otra operación indefinida si el ISR no tiene en cuenta la posibilidad de que se produzca dicha interrupción. Como las interrupciones espurias son principalmente un problema con los circuitos de interrupción OR cableados, una buena práctica de programación en tales sistemas es que el ISR verifique todas las fuentes de interrupción en busca de actividad y no tome ninguna medida (aparte de posiblemente registrar el evento) si ninguna de las fuentes está interrumpiendo. . Incluso pueden provocar que el ordenador se bloquee en escenarios adversos.

Interrupciones de software

El propio procesador solicita una interrupción de software al ejecutar instrucciones particulares o cuando se cumplen ciertas condiciones. Cada señal de interrupción de software está asociada con un controlador de interrupciones particular.

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

Normalmente, el núcleo del sistema operativo detectará y manejará dichas interrupciones. Algunas interrupciones se manejan de forma transparente para el programa; por ejemplo, la resolución normal de un error de página es hacer que la página requerida sea accesible en la memoria física. Pero en otros casos, como un error de segmentación, el sistema operativo ejecuta una 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 controlador 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. [12]

En un proceso del kernel , a menudo ocurre que algunos tipos de interrupciones de software no deben ocurrir. Si aun así ocurren, puede producirse un fallo del sistema operativo .

Terminología

Los términos interrupción , trampa , excepción , falla y aborto se utilizan para distinguir tipos de interrupciones, aunque "no existe un consenso claro sobre el significado exacto de estos términos". [13] 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 sólo a 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 . [1] También puede referirse a una interrupción sincrónica causada por una condición excepcional (por ejemplo, división por cero , acceso no válido a la memoria , código de operación ilegal ), [13] 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: fallas, trampas y abortos. [14] [15] Las interrupciones (de hardware) son interrupciones activadas de forma asincrónica por un dispositivo de E/S y permiten que el programa se reinicie sin pérdida de continuidad. [14] Un fallo también se puede reiniciar, pero está vinculado a la ejecución sincrónica de una instrucción: la dirección de retorno apunta a la instrucción errónea. Una trampa es similar a una falla excepto que la dirección de retorno apunta a la instrucción que se ejecutará después de la instrucción de captura; [16] un uso destacado es implementar llamadas al sistema . [15] Una cancelación se utiliza para errores graves, como errores de hardware y valores ilegales en las tablas del sistema, y ​​a menudo [f] no permite reiniciar el programa. [dieciséis]

Arm usa el término excepción para referirse a todos los tipos de interrupciones, [17] y divide las excepciones en interrupciones (de hardware) , abortos , reinicio e instrucciones generadoras de excepciones. Los abortos corresponden a excepciones x86 y pueden ser abortos de captación previa (búsquedas de instrucciones fallidas) o abortos de datos (accesos a datos fallidos), y pueden ser sincrónicos o asincrónicos. Los abortos asincrónicos pueden ser precisos o imprecisos. Los abortos de MMU (fallos de página) son sincrónicos. [18]

RISC-V utiliza interrupción como término general así 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 ser activada por un nivel de señal lógica o por un flanco de señal particular (transición de nivel). Las entradas sensibles al nivel solicitan continuamente el servicio del procesador siempre que se aplique un nivel lógico particular (alto o bajo) a la entrada. Las entradas sensibles a los bordes reaccionan a los bordes de la señal: un flanco particular (ascendente o descendente) provocará que se bloquee una solicitud de servicio; el procesador restablece el pestillo cuando se ejecuta el controlador de interrupciones.

Activado por nivel

Una interrupción activada por nivel se solicita manteniendo la señal de interrupción en su nivel lógico activo particular (alto o bajo) . Un dispositivo invoca una interrupción activada por nivel dirigiendo la señal y manteniéndola en el nivel activo. Niega la señal cuando el procesador le ordena que lo haga, generalmente después de que se haya reparado el dispositivo.

El procesador muestrea 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 se confirma cuando se produce el muestreo.

Las entradas activadas por nivel permiten que varios dispositivos compartan una señal de interrupción común a través de conexiones OR cableadas. El procesador sondea para determinar qué dispositivos están solicitando servicio. Después de dar servicio a un dispositivo, el procesador puede volver a sondear y, si es necesario, dar servicio a otros dispositivos antes de salir del ISR.

Activado por flanco

Una interrupción activada por flanco es una interrupción señalizada por una transición de nivel en la línea de interrupción, ya sea un flanco descendente (de mayor a menor) o un flanco ascendente (de menor a mayor). Un dispositivo que desea señalar una interrupción envía un pulso a la línea y luego la libera a su estado inactivo. Si el pulso es demasiado corto para ser detectado por las E/S sondeadas , es posible que se requiera hardware especial para detectarlo. La parte importante del disparo por flanco es que la señal debe realizar una transición para activar la interrupción; por ejemplo, si la señal fuera alta-baja-baja, solo se activaría una interrupción de flanco descendente y el nivel bajo continuo no desencadenaría una interrupción adicional. La señal debe volver al nivel alto y volver a caer para provocar una nueva interrupción. Esto contrasta con un disparador de nivel donde el nivel bajo continuaría creando interrupciones (si están habilitadas) hasta que la señal regrese a su nivel alto.

Las computadoras con interrupciones activadas por flanco pueden incluir un registro de interrupciones que retiene el estado de las interrupciones pendientes. Los sistemas con registros de interrupción generalmente también tienen 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 encontrada. Independientemente del método de disparo, el procesador comenzará a interrumpir el procesamiento en el siguiente límite de instrucción después de un disparo detectado, asegurando así:

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

Implementación del sistema

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

Si se utiliza un componente adicional, ese componente se conectaría entre el dispositivo de interrupción y el pin de interrupción del procesador para multiplexar varias fuentes de interrupción en una o dos líneas de CPU normalmente disponibles. Si se implementan como parte del controlador de memoria , las interrupciones se asignan al espacio de direcciones de memoria del sistema . [ cita necesaria ]

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). [23]

IRQ compartidas

Varios dispositivos pueden compartir una línea de interrupción activada por borde si están diseñados para ello. La línea de interrupción debe tener una resistencia pull-down o pull-up para que, cuando no se active activamente, se establezca en 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 dejan que la línea flote (no la impulsen activamente) 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 impulsos generados por todos los dispositivos. (Esto es análogo al cordón de algunos autobuses y tranvías que cualquier pasajero puede tirar para indicarle al conductor que está solicitando una parada). Sin embargo, los pulsos de interrupción de diferentes dispositivos pueden fusionarse si ocurren cerca en el tiempo. Para evitar perder interrupciones, la CPU debe dispararse en el flanco posterior del pulso (por ejemplo, el flanco ascendente si la línea se eleva y baja). Después de detectar una interrupción, la CPU debe verificar todos los dispositivos para conocer los requisitos de servicio.

Las interrupciones activadas por borde no sufren los problemas que tienen las interrupciones activadas por nivel al compartir. El servicio de un dispositivo de baja prioridad se puede posponer arbitrariamente, mientras se continúan recibiendo y atendiendo las interrupciones de dispositivos de alta prioridad. Si hay un dispositivo al que la CPU no sabe cómo dar servicio, lo que puede generar interrupciones espurias, no interferirá con la señalización de interrupciones de otros dispositivos. Sin embargo, es fácil que se pase por alto una interrupción activada por flanco (por ejemplo, cuando las interrupciones están enmascaradas durante un período) y, a menos que exista algún tipo de pestillo de hardware que registre el evento, es imposible recuperarla. Este problema causaba muchos "bloqueos" en el hardware de las primeras computadoras porque el procesador no sabía que se esperaba que hiciera algo. El hardware más moderno suele tener uno o más registros de estado de interrupción que bloquean las solicitudes de interrupción; Un código de manejo de interrupciones controlado por el borde bien escrito puede verificar estos registros para garantizar que no se pierda ningún evento.

El antiguo bus de Arquitectura Estándar de la Industria (ISA) utiliza interrupciones activadas por borde, sin exigir que los dispositivos puedan compartir líneas IRQ, pero todas las placas base ISA convencionales incluyen resistencias pull-up en sus líneas IRQ, por lo que los dispositivos ISA de buen comportamiento comparten líneas IRQ. debería funcionar bien. El puerto paralelo también utiliza interrupciones activadas por flanco. Muchos dispositivos más antiguos asumen que tienen uso exclusivo de líneas IRQ, lo que hace que compartirlas sea inseguro desde el punto de vista eléctrico.

Hay tres formas de activar varios dispositivos que "comparten la misma línea". La primera es por conducción exclusiva (conmutación) o conexión exclusiva (a pines). El siguiente es el bus (todos conectados a la misma línea de escucha): las tarjetas en un bus deben saber cuándo deben hablar y cuándo no hablar (es decir, el bus ISA). La conversación se puede activar de dos maneras: mediante pestillo de acumulación o mediante puertas lógicas. Las puertas lógicas esperan un flujo de datos continuo que se monitorea 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 ninguna velocidad negociada. Cada uno tiene sus ventajas de velocidad versus distancia. Un disparador, generalmente, es el método mediante el cual se detecta la excitación: flanco ascendente, flanco descendente, umbral ( el osciloscopio puede disparar 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 '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 y que no está relacionada con el hardware. Sin embargo, no confunda esto con las interrupciones de hardware que envían señales a la CPU (la CPU ejecuta el software a partir de una tabla de funciones, de manera similar a las interrupciones de software).

Dificultad para compartir líneas de interrupción.

Varios dispositivos que comparten una línea de interrupción (de cualquier estilo de activación) actúan como fuentes de interrupción espurias entre sí. Con muchos dispositivos en una línea, la carga de trabajo en el servicio de interrupciones crece en proporción al cuadrado del número de dispositivos. Por lo tanto, es preferible distribuir los dispositivos de manera uniforme a lo largo de las líneas de interrupción disponibles. La escasez de líneas de interrupción es un problema en diseños de sistemas más antiguos donde las líneas de interrupción son conductores físicos distintos. Las interrupciones señalizadas por mensajes, donde la línea de interrupción es virtual, se prefieren en las nuevas arquitecturas de sistemas (como PCI Express ) y alivian este problema en gran medida.

Algunos dispositivos con una interfaz de programación mal diseñada no ofrecen forma de determinar si han solicitado el servicio. Pueden encerrarse o comportarse mal si reciben servicio cuando no lo desean. Dichos dispositivos no pueden tolerar interrupciones espurias y, por lo tanto, tampoco pueden tolerar compartir una línea de interrupción. Las tarjetas ISA , debido a su diseño y construcción a menudo baratos, son conocidas por este problema. Estos dispositivos son cada vez más raros, a medida que la lógica del hardware se vuelve más barata y las nuevas arquitecturas de sistemas exigen interrupciones compartibles.

Híbrido

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

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

Señalado por mensaje

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

Las interrupciones señalizadas por mensajes se comportan de manera muy similar a las interrupciones activadas por flanco, en el sentido de que la interrupción es una señal momentánea en lugar de una condición continua. El software de manejo de interrupciones trata a ambos de la misma manera. Por lo general, se permite que se fusionen múltiples interrupciones señalizadas por mensajes pendientes con el mismo mensaje (la misma línea de interrupción virtual), del mismo modo que se pueden fusionar las interrupciones activadas por borde muy espaciadas.

Los vectores de interrupción señalizados por mensajes se pueden compartir, en la medida en que se pueda compartir el medio de comunicación subyacente. No se requiere ningún esfuerzo adicional.

Debido a que la identidad de la interrupción se indica mediante un patrón de bits de datos, que no requiere un conductor físico separado, se pueden manejar de manera eficiente muchas más interrupciones distintas. Esto reduce la necesidad de compartir. Los mensajes de interrupción también se pueden pasar a través de un bus serie, sin necesidad de líneas adicionales.

PCI Express , un bus informático en serie, utiliza exclusivamente interrupciones señalizadas por mensajes .

Timbre de la puerta

En una analogía de pulsador aplicada a sistemas informáticos , el término timbre o interrupción de timbre se utiliza a menudo para describir un mecanismo mediante el cual un sistema de software puede indicar o notificar a un dispositivo de hardware informático que hay trabajo por realizar. Normalmente, el sistema de software colocará los datos en algunas ubicaciones de memoria bien conocidas y acordadas mutuamente, y "tocará el timbre" escribiendo en una ubicación de memoria diferente. Esta ubicación de memoria diferente a menudo se denomina región del timbre, e incluso puede haber varios timbres con diferentes propósitos en esta región. Es este acto de escribir en la región de la memoria del timbre lo que "suena el timbre" y notifica al dispositivo de hardware que los datos están listos y en espera. El dispositivo de hardware ahora sabrá que los datos son válidos y que se puede actuar sobre ellos. Por lo general, escribiría los datos en una unidad de disco duro , los enviaría a través de una red , los cifraría , etc.

El término interrupción del timbre suele ser un nombre inapropiado . Es similar a una interrupción, porque hace que el dispositivo realice algún trabajo; sin embargo, la región del timbre a veces se implementa como una región sondeada , a veces la región del timbre escribe en registros de dispositivos físicos y, a veces, la región del timbre está cableada directamente a registros de dispositivos físicos. Cuando se escribe a través o directamente en registros de dispositivos físicos, esto puede causar una interrupción real en la unidad de procesamiento central ( CPU ) del dispositivo, si la tiene.

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

IPI multiprocesador

En sistemas multiprocesador , un procesador puede enviar una solicitud de interrupción a otro procesador mediante interrupciones entre procesadores [h] (IPI).

Actuación

Las interrupciones proporcionan una sobrecarga baja y una buena latencia con carga baja, pero se degradan significativamente con una tasa de interrupción alta a menos que se tenga cuidado para prevenir varias patologías. El fenómeno en el que el rendimiento general del sistema se ve gravemente afectado por cantidades excesivas de tiempo de procesamiento dedicado a manejar las interrupciones se denomina tormenta de interrupciones .

Existen varias formas de livelocks , cuando el sistema dedica todo su tiempo a procesar interrupciones excluyendo otras tareas requeridas. En condiciones extremas, una gran cantidad de interrupciones (como un tráfico de red muy elevado) pueden detener completamente el sistema. Para evitar tales problemas, un sistema operativo debe programar el manejo de las interrupciones de la red con tanto cuidado como programa la ejecución del proceso. [24]

Con procesadores multinúcleo, se pueden lograr mejoras adicionales de rendimiento en el manejo de interrupciones mediante el escalado del lado de recepción (RSS) cuando se utilizan NIC multicola . Estas NIC 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 provocadas por el tráfico de red recibido por una única NIC se puede distribuir entre varios núcleos. El sistema operativo puede realizar automáticamente la distribución de las interrupciones entre los núcleos, o el enrutamiento de las interrupciones (generalmente denominado afinidad IRQ ) se puede configurar manualmente. [25] [26]

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 que no requiere 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 del 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 procesando las solicitudes de interrupción de los mismos núcleos en los que la aplicación de destino consumirá paquetes de red particulares. [25] [27] [28]

Usos típicos

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

Los temporizadores de hardware se utilizan a menudo para generar interrupciones periódicas. En algunas aplicaciones, el controlador de interrupciones cuenta estas interrupciones para realizar un seguimiento del tiempo absoluto o transcurrido, o el programador de tareas del sistema operativo las utiliza para gestionar la ejecución de los procesos en ejecución , o ambos. Las interrupciones periódicas también se utilizan comúnmente para invocar muestreo desde dispositivos de entrada como convertidores analógico-digital , interfaces de codificador incremental y entradas GPIO , y para programar dispositivos de salida como convertidores digital-analógico , controladores de motor y salidas GPIO.

Una interrupción del disco señala la finalización de una transferencia de datos desde o hacia el periférico del disco; esto puede provocar que se ejecute 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 la computadora realice un apagado ordenado mientras todavía queda suficiente energía para hacerlo. Las interrupciones del teclado generalmente hacen que las pulsaciones de teclas se almacenen en el búfer para implementar la escritura anticipada .

A veces se utilizan interrupciones para emular instrucciones que no están implementadas en algunas computadoras de una familia de productos. [29] Por ejemplo, las instrucciones de punto flotante pueden implementarse en hardware en algunos sistemas y emularse en sistemas de menor costo. En el ú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 manejador de interrupciones implementará la función de punto flotante en el software y luego regresará al programa interrumpido como si se hubiera ejecutado la instrucción implementada en el hardware. [30] 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 kernel (posiblemente a través de llamadas al sistema) y manejadas por procesos, mientras que las interrupciones están mediadas por el procesador y manejadas por el kernel . El kernel puede pasar una interrupción como señal al proceso que la causó (ejemplos típicos son SIGSEGV , SIGBUS , SIGILL y SIGFPE ).

Ver también

Notas

  1. ^ El sistema operativo podría reanudar el proceso interrumpido o cambiar a un proceso diferente.
  2. ^ Por lo general, 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 de interrupción pendiente de prueba ( TPI ) de IBM System/370-XA y posteriores.
  3. ^ Por ejemplo, cuando los bits de máscara del programa en IBM System/360 son 0 (deshabilitados), los eventos de desbordamiento y significado correspondientes no dan como resultado una interrupción pendiente.
  4. ^ El registro de máscara puede ser un registro único o varios registros, por ejemplo, bits en el PSW y otros bits en los registros de control .
  5. ^ Ver INT (instrucción x86)
  6. ^ Algunos sistemas operativos pueden recuperarse de errores graves, por ejemplo, paginación en una página desde un archivo de paginación después de un error ECC incorregible en una página no modificada.
  7. ^ Esto podría ser solo el contador de programa (PC) , un PSW o varios registros.
  8. ^ Conocido como toques en el hombro en algunos sistemas operativos de IBM.

Referencias

  1. ^ ab "El archivo Jergon, versión 4.4.7". 2003-10-27 . Consultado el 20 de enero de 2022 .
  2. ^ ab Jonathan Corbet; Alejandro Rubini; Greg Kroah-Hartman (2005). "Controladores de dispositivos Linux, tercera edición, capítulo 10. Manejo de interrupciones" (PDF) . Medios O'Reilly . pag. 269 ​​. Consultado el 25 de diciembre de 2014 . Entonces es sólo cuestión de limpiar, ejecutar las interrupciones del software y volver al trabajo normal. Es posible que el "trabajo regular" haya cambiado como resultado de una interrupción (el controlador podría ser 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
  3. ^ Rosenthal, Scott (mayo de 1995). "Conceptos básicos de las interrupciones". Archivado desde el original el 26 de abril de 2016 . Consultado el 11 de noviembre de 2010 .
  4. ^ Codd, Edgar F. "Multiprogramación". Avances en Computadoras . 3 : 82.
  5. ^ Campana, C. Gordon; Newell, Allen (1971). Estructuras informáticas: lecturas y ejemplos. McGraw-Hill. pag. 46.ISBN _ 9780070043572. Consultado el 18 de febrero de 2019 .
  6. ^ ab Smotherman, Mark. "Interrupciones" . Consultado el 22 de diciembre de 2021 .
  7. ^ "Interrupciones de hardware" . Consultado el 9 de febrero de 2014 .
  8. ^ "Instrucciones de interrupción". Manual de referencia del sistema informático Control Data 3600 (PDF) . Corporación de datos de control. Julio de 1964. págs. 4–6. 60021300.
  9. ^ Bai, Ying (2017). Ingeniería de Microcontroladores con MSP432: Fundamentos y Aplicaciones. Prensa CRC. pag. 21.ISBN _ 978-1-4987-7298-3. LCCN  2016020120. En el sistema Cortex-M4, las interrupciones y excepciones tienen las siguientes propiedades: ... Generalmente, un solo bit en un registro de máscara se usa para enmascarar (deshabilitar) o desenmascarar (habilitar) que ocurran ciertas interrupciones/excepciones.
  10. ^ "Niveles de interrupción" . Consultado el 17 de noviembre de 2023 .
  11. ^ Li, Qing; Yao, Carolina (2003). Conceptos en tiempo real para sistemas integrados . Prensa CRC. pag. 163.ISBN _ 1482280825.
  12. ^ "Excepciones de hardware". docs.microsoft.com . 3 de agosto de 2021.
  13. ^ ab Hyde, Randall (1996). "Capítulo Diecisiete: Interrupciones, trampas y excepciones (Parte 1)". El arte de la programación en lenguaje ensamblador . Consultado el 22 de diciembre de 2021 . El concepto de interrupción es algo que ha ido ampliando su alcance a lo largo de los años. La familia 80x86 solo ha aumentado la confusión que rodea a las interrupciones al introducir la instrucción int (interrupción de software). De hecho, diferentes fabricantes han utilizado términos como excepciones, fallas, abortos, trampas e interrupciones para describir los fenómenos que analiza este capítulo. Lamentablemente no existe un consenso claro sobre el significado exacto de estos términos. Diferentes autores adoptan diferentes términos para su propio uso.
  14. ^ ab "Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32 Volumen 1: Arquitectura básica". Págs. 6-12 vol. 1 . Consultado el 22 de diciembre de 2021 .
  15. ^ ab Bryant, Randal E.; O'Hallaron, David R. (2016). "8.1.2 Clases de excepciones". Sistemas informáticos: la perspectiva de un programador (Tercera, edición global). Harlow: Pearson. ISBN 978-1-292-10176-7.
  16. ^ ab "Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, volumen 3A: Guía de programación del sistema, parte 1". pag. 6-5 vol. 3A . Consultado el 22 de diciembre de 2021 .
  17. ^ "Manejo de excepciones". desarrollador.arm.com . Guía del programador de la serie ARM Cortex-A para ARMv7-A . Consultado el 21 de enero de 2022 .
  18. ^ "Tipos de excepción". desarrollador.arm.com . Guía del programador de la serie ARM Cortex-A para ARMv7-A . Consultado el 22 de diciembre de 2021 .
  19. ^ Manual de referencia de sistemas informáticos Control Data 6400/6500/6600 (PDF) . Revisión K. Corporación de Datos de Control . 11 de octubre de 1966. 60021300K . Consultado el 17 de mayo de 2023 .
  20. ^ ab Principios de funcionamiento de IBM System/360 (PDF) (Octava ed.). IBM . Septiembre de 1968. p. 77. A22-6821-7.
  21. ^ Manual del procesador PDP-11 PDP11/04//34a/44/60/70 (PDF) . Corporación de equipos digitales . 1979, págs. 128-131.
  22. ^ Manual de interfaz y periféricos PDP-11 (PDF) . Corporación de equipos digitales . pag. 4.
  23. ^ Yiu, Joseph (1 de enero de 2010), Yiu, Joseph (ed.), "CAPÍTULO 2 - Descripción general de Cortex-M3", La guía definitiva de ARM Cortex-M3 (segunda edición) , Oxford: Newnes, págs. 11 a 24, doi :10.1016/b978-1-85617-963-8.00005-3, ISBN 978-1-85617-963-8, recuperado el 11 de octubre de 2023
  24. ^ Magnate, Jeffrey C.; Ramakrishnan, KK (1997). "Eliminar el bloqueo activo de recepción en un kernel controlado por interrupciones". Transacciones ACM en sistemas informáticos . 15 (3): 217–252. doi :10.1145/263326.263335. S2CID  215749380 . Consultado el 11 de noviembre de 2010 .
  25. ^ ab Tom Herbert; Willem de Bruijn (9 de mayo de 2014). "Documentación/redes/scaling.txt". Documentación del núcleo de Linux . kernel.org . Consultado el 16 de noviembre de 2014 .
  26. ^ "Hoja de datos de la familia de controladores Intel 82574 Gigabit Ethernet" (PDF) . Intel . Junio ​​de 2014. p. 1 . Consultado el 16 de noviembre de 2014 .
  27. ^ Jonathan Corbet (17 de noviembre de 2009). "Recibir dirección de paquetes". LWN.net . Consultado el 16 de noviembre de 2014 .
  28. ^ Jake Edge (7 de abril de 2010). "Recibir dirección de flujo". LWN.net . Consultado el 16 de noviembre de 2014 .
  29. ^ Así, Shalesh; et al. "Patente US 5632028 A". Patentes de Google . Consultado el 13 de agosto de 2017 .
  30. ^ Corporación Altera (2009). Referencia del procesador Nios II (PDF) . pag. 4 . Consultado el 13 de agosto de 2017 .

enlaces externos