Cómo funciona el manejo de interrupciones en una capa física

3

Quiero entender cómo HW IRQ funciona en una capa física. Hago mi pregunta considerando un ejemplo específico. Como se sabe después de un paquete que llega a un adaptador de red, una interrupción de hardware es señalización. Wiki dice que

  

una interrupción es una señal al procesador emitida por hardware o   software que indica un evento que necesita atención inmediata.

Sé que el sistema operativo invocará un controlador de interrupción correspondiente cuando se detecte el tipo de interrupción. Pero no entiendo cómo la CPU detecta y distingue las interrupciones entrantes. Ahora hago mis preguntas:

Primero, ¿por qué la CPU sabe que la interrupción proviene del adaptador de red, pero no de otros dispositivos?

Segundo, ¿dónde se encuentran los controladores de interrupciones registrados en la CPU? ¿Existe un área de CPU específica que contenga las direcciones de los manejadores registradas por el sistema operativo?

    
pregunta dhicrintall

2 respuestas

5

Los detalles dependen completamente de la CPU, por lo que es mejor elegir su CPU favorita y estudiarla en detalle. Para un conocimiento más general, hay libros sobre arquitecturas de computadora, como los de William Stallings.

En uno de los diseños más simples y tradicionales, la CPU simplemente no "sabe" en qué dispositivo lo interrumpió. La CPU tiene una sola línea de interrupción. Si hay varios dispositivos, todos están vinculados a esa única línea: por ejemplo, con una gran compuerta OR. Cuando la CPU maneja la interrupción, el nivel superior de la rutina de manejo de interrupciones tiene que interrogar a todos los dispositivos observando sus respectivos registros de estado, para determinar cuál o cuáles requieren servicio. Cuando se tratan adecuadamente, anulan la señal de interrupción. El bloqueo de interrupciones específicas se puede implementar haciendo que el circuito externo sea sofisticado de modo que pueda programarse para ignorar selectivamente algunas de sus entradas.

Este diseño se puede mejorar de muchas maneras. Por ejemplo, puede haber protocolos mediante los cuales un dispositivo de interrupción tiene que invocar un ciclo de bus especial y colocar su ID (8 bits o lo que sea) en el bus de datos, de manera que la CPU lo detecte. La ID se puede usar para indexar un vector de interrupción para enviar una interrupción apropiada.

Un procesador ni siquiera tiene que tener pines de interrupción; en un diseño posible, se simula una interrupción cuando un dispositivo escribe en una ubicación de memoria especial. Efectivamente, la dirección y los pines de datos de la CPU sirven como entradas de interrupción. Consulte Interrupciones de mensaje señalado .

    
respondido por el Kaz
1

En el 8080 original, las interrupciones funcionaban al tener un pin que solicitaba una interrupción junto con un pestillo interno en la CPU para indicar si las interrupciones estaban habilitadas. En algún momento durante la ejecución de cada instrucción, la CPU bloquearía el "y" de (pin_asserted e interrupt_enabled). Durante el primer ciclo de la siguiente instrucción, la lógica que condujo a los cables de acceso a la memoria a realizar una búsqueda de código provocaría que se manejaran de manera ligeramente diferente cuando se detectó una interrupción, y el pestillo de "habilitación de interrupción" se apagaría solo cuando Ese ciclo de interrupción fue generado. Por lo general, el hardware externo notaría el patrón especial en los cables de acceso a la memoria, y en lugar de emitir el contenido de una dirección de memoria, en su lugar normalmente emitiría un patrón de bits correspondiente a una de las ocho instrucciones "RST" [RST00 a RST38]. Una instrucción RST38 fue equivalente a "JSR 0038h" (otras instrucciones RST utilizaron direcciones en múltiplos de ocho de 0000h a 0030h), por lo que la interrupción podría hacer que la ejecución se transfiriera a una dirección particular mientras se registra la ubicación anterior del contador del programa. No estoy seguro de qué hubiera hecho el procesador si se hubiera colocado en el bus algún otro código de operación, especialmente. si fue el primer byte de una instrucción multi-byte]

Los procesadores posteriores generalmente operan en algún principio similar, excepto que en lugar de confiar en un dispositivo externo para generar una instrucción, lo hacen internamente; dado que habrá un pestillo que dice que la "instrucción" está siendo reparada debido a una interrupción, el comportamiento de esa instrucción no necesita coincidir con el de cualquiera que pueda ejecutarse "normalmente". Por ejemplo, aunque no conozco los detalles internos del circuito del Z80, su comportamiento al usar interrupciones vectoriales es un poco como una versión extraña de la instrucción CALL: guardar el programa en contra de la pila, obtener un byte con un especial patrón de pines de control especiales afirmados, cargue ese byte en el LSB del contador del programa y copie el registro en el MSB, y pretenda que uno acaba de buscar un código de operación de JP (salto).

    
respondido por el supercat

Lea otras preguntas en las etiquetas