Pregunta

que debería compartir el primer lo que sé - y que es un completo caos. Hay varias preguntas diferentes sobre el tema, así que por favor no se irritan:.)

1) Para encontrar una ISR, CPU está provisto de un número de interrupción. En x86 máquinas (286/386 y superiores) hay una IVT con ISR en ella; cada entrada de 4 bytes de tamaño. Así que tenemos que multiplicar el número de interrupciones por 4 para encontrar el ISR. Así primer grupo de preguntas es - estoy totalmente confuso en el mecanismo de la CPU de la recepción de la interrupción. Para levantar una interrupción, en primer lugar, el dispositivo deberá sondear IRQ - ¿entonces qué? El número de interrupción viaja "en la IRQ" hacia la CPU? También leí algo así como poner dispositivo de dirección de ISR en el bus de datos; ¿Cuál es eso entonces? ¿Cuál es el concepto de dispositivos anulando el ISR. Puede alguien pocos dispositivos ejemplo, donde las encuestas de CPU para las interrupciones decir? Y ¿de dónde se encuentra el ISR para ellos?

2) Si dos dispositivos comparten una IRQ (que es muy posible), ¿cómo se diferencia de la CPU entre ellos? ¿Qué pasa si ambos dispositivos plantean una interrupción de la misma prioridad al mismo tiempo. Llegué a conocer habrá enmascaramiento de interrupciones mismo tipo y de baja prioridad - pero cómo sucede esto la comunicación entre la CPU y el controlador de dispositivo? Estudié el papel de la PIC y APIC para este problema, pero no podía entender.

Gracias por leer. Muchas gracias por responder.

¿Fue útil?

Solución

CPUs no sondean para interrupciones, al menos no en un sentido de software. Con respecto al software, las interrupciones son eventos asíncronos.

Lo que pasa es que el hardware dentro de la CPU reconoce la petición de interrupción, que es una entrada eléctrica de una línea de interrupción, y en respuesta, los conjuntos de lado la ejecución normal de los acontecimientos para responder a la interrupción. En la mayoría de las CPU modernas, lo que sucede a continuación es determinada por un apretón de manos hardware en particular con el tipo de CPU, pero la mayoría de ellos reciben un número de algún tipo de dispositivo de interrupción. Ese número puede ser de 8 bits o 32 o lo que sea, dependiendo del diseño de la CPU. La CPU continuación, utiliza este número de interrupciones para indexar en la tabla de vectores de interrupción, para encontrar una dirección para iniciar la ejecución de la rutina de servicio de interrupción. Una vez que se determina que la dirección, (y el contexto de ejecución actual se guarda de forma segura a la pila) la CPU inicia la ejecución de la ISR.

Cuando dos dispositivos comparten una línea de solicitud de interrupción, pueden causar diferentes ISR para ejecutar devolviendo un número de interrupción diferente durante ese proceso de establecimiento de comunicación. Si tiene el número de vectores suficientes disponibles, cada dispositivo de interrupción puede utilizar su propio vector de interrupción.

Sin embargo, dos dispositivos pueden incluso compartir una línea de solicitud de interrupción y un vector de interrupción, siempre y cuando el ISR compartido es lo suficientemente inteligente como para ir de nuevo a todas las posibles fuentes de la interrupción determinada, y registros de estado de comprobación para ver qué dispositivo solicita el servicio.

Un poco más de detalle

Supongamos que tiene un sistema compuesto de una CPU, y el controlador de interrupción, y un dispositivo de interrupción. En los viejos tiempos, éstas habrían sido los dispositivos físicos separados, pero ahora los tres podrían incluso residir en el mismo chip, pero todas las señales son todavía allí dentro de la caja de cerámica. Voy a utilizar una CPU PowerPC (PPC) con un controlador de interrupciones integrado, conectado a un dispositivo en un bus PCI, como un ejemplo que debe servir muy bien.

Digamos que el dispositivo es un puerto serie que está transmitiendo algunos datos. Un controlador de puerto serie típica se carga montón de datos en FIFO del dispositivo, y la CPU puede hacer un trabajo regular, mientras que el dispositivo hace su cosa. Típicamente, estos dispositivos pueden ser configurados para generar una solicitud de interrupción cuando el dispositivo se está agotando en los datos para transmitir, de manera que el controlador de dispositivo puede volver y piensos más en él.

La lógica de hardware en el dispositivo esperará un bus PCI de reconocimiento de interrupción, y en ese momento, un par de cosas pueden suceder. Algunos dispositivos utilizan 'autovectoring', lo que significa que se basan en el controlador de interrupciones para procurar que la rutina de servicio correcto es seleccionado. Otros tendrán un registro, que se pre-programar el controlador de dispositivo, que contiene un vector de interrupción que el dispositivo se coloque sobre el bus de datos en respuesta a la de reconocimiento de interrupción, para el controlador de interrupciones para recoger.

Un bus PCI tiene sólo cuatro líneas de solicitud de interrupción, por lo que nuestro dispositivo serie tendrá que valer uno de esos. (No importa que en el momento, por lo general algo ranurar dependiente ..) Siguiente en línea es el controlador de interrupciones (por ejemplo PIC / APIC), que decidirá si reconocer la interrupción sobre la base de los bits de máscara que se han establecido en sus propios registros. Suponiendo que reconoce la interrupción, o bien se obtiene entonces el vector desde el dispositivo de interrupción (a través de las líneas de bus de datos), o puede si el uso de modo programado un 'enlatada' valor proporcionado por el propio controlador de dispositivo de la APIC. Hasta el momento, la CPU ha sido felizmente ignorante de todas estas idas y venidas, pero que está a punto de cambiar.

Ahora es el momento para el controlador de interrupciones para obtener la atención del núcleo de la CPU. La CPU tendrá su propia máscara de interrupción bits (s) que pueden causar que simplemente ignorar la solicitud de la PIC. Suponiendo que la CPU está listo para tomar las interrupciones, ahora es el momento para la acción real para empezar. La instrucción en curso por lo general tiene que ser retirado antes de la ca ISRn comenzar, así que con los procesadores segmentados esto es un poco complicado, pero basta con decir que en algún momento en el flujo de instrucciones, el contexto del procesador se guarda fuera de la pila y el ISR por hardware determinado se hace cargo.

Algunos núcleos de CPU tienen múltiples líneas de petición, y pueden iniciar el proceso de reducción de ISR que se extiende a través de la lógica de hardware que salta el puntero de instrucciones de la CPU a uno de un puñado de los mejores controladores de nivel. La edad de 68 K, y, posiblemente, otros lo hicieron de esa manera. PowerPC (y creo, el x86) tienen una sola entrada de petición de interrupción. El x86 sí mismo comporta un poco como un PIC, y se puede obtener un vector a partir de los PIC externos (s), pero el powerPC simplemente salta a una dirección fija, 0x00000500.

En el PPC, el código en 0x0500 es probable que sólo va a saltar inmediatamente a algún lugar de la memoria donde hay espacio suficiente para hacer algunos graves código de decisión, pero aún así es la rutina de servicio de interrupción. Esa rutina irá primero al PIC y obtener el vector, y también pedir el PIC para detener la afirmación de la solicitud de interrupción en el núcleo de la CPU. Una vez que se conoce el vector, el ISR nivel superior puede Files a un controlador más específico que dará servicio a todos los dispositivos que se sabe que el uso de ese vector. El manejador de vector específico luego camina por la lista de dispositivos asignados a ese vector, comprobando los bits de estado de interrupción en esos dispositivos, para ver cuáles necesitan servicio.

Cuando un dispositivo, como el puerto serie hipotética, se encuentra el servicio querer, el ISR para ese dispositivo toma las acciones apropiadas, por ejemplo, la carga de valor de los datos de la siguiente FIFO de un buffer de sistema operativo en la transmisión del puerto FIFO. Algunos dispositivos se reducirá automáticamente su solicitud de interrupción en respuesta a la que se accede, por ejemplo, escribir un byte en la transmisión FIFO podría hacer que el dispositivo de puerto serie a de-assert la línea de solicitud. Otros dispositivos requerirán un poco especial registro de control para ser activado, juego, aclarado, lo que usted quiera, con el fin de dejar caer la petición. Hay millones y millones de diferentes dispositivos de E / S y no hay dos de ellos parecen cada vez de hacerlo de la misma manera, por lo que es difícil generalizar, pero eso es por lo general la forma de la misma.

Ahora, obviamente no hay más que decir - ¿qué pasa con las prioridades de interrupción? lo que sucede en un procesador multi-core? ¿Qué hay de controladores de interrupciones anidadas? Pero he quemado suficiente espacio en el servidor. Esperan nada de esto ayuda.

Otros consejos

He venido esta pregunta como después de 3 años .. Espero poder ayudar;)

El Intel 8259A o simplemente el "PIC" tiene 8 pines, IRQ0-IRQ7, cada pin se conecta a un único dispositivo ..

vamos a suponer que u presiona un botón en el teclado .. la tensión del pasador IRQ1, que está conectado a la KBD, es alta .. así que después de la CPU se interrumpe, reconocer la interrupción bla bla bla ... la PIC no sólo tiene que añadir 8 con el número de la línea IRQ así IRQ1 medios 1 + 8 que significa 9

SO la CPU establece su CS e IP en la entrada noveno en la tabla de vector .. y porque el IVT es una matriz de largos que sólo se multiplica el número de células por 4;)

CPU.CS = IVT [9] .CS CPU.IP = IVT [9] .IP

las ofertas de ESR con el dispositivo a través de los puertos de E / S;) Lo siento por mi mala Inglés .. soy árabe sin embargo:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top