En la mainbord tenemos un controlador de interrupciones (IRC) que actúa como un multiplexor entre los dispositivos que puede elevar una interrupción y la CPU:manejo de interrupciones (Linux/General)
|--------|
|-----------| | |
-(0)------| IRC _____|______| CPU |
-(...)----| ____/ | | |
-(15)-----|/ | |--------|
|-----------|
Cada dispositivo está asociado a un IRQ (el número a la izquierda). Después de cada ejecución, la CPU detecta la línea de solicitud de interrupción. Si se detecta una señal, se realizará un guardado de estado y la CPU cargará una Rutina de controlador de interrupciones que se puede encontrar en el Vector de interrupción que se encuentra en una dirección fija en la memoria. Por lo que puedo ver, el Número de IRQ y el Número de Vector en el Vector de Interrupción no son los mismos porque tengo, por ejemplo, mi tarjeta de red registrada en IRQ 8. En un procesador Intel Pentium, esto apuntaría a una rutina que se usa para señalar una condición de error, por lo que debe haber una asignación en algún lugar que apunte al controlador correcto.
Preguntas:
1) Si escribo un controlador de dispositivo y registran un IRQ X para ello. ¿De dónde sabe el sistema qué dispositivo debe manejarse? Puedo, por ejemplo, usar request_irq() con IRQ número 10, pero ¿cómo sabe el sistema que el controlador debe usarse para el mouse o el teclado o para lo que sea que escriba el controlador?
2) ¿Cómo se ve entonces el vector de interrupción? Quiero decir que si uso el IRQ 10 para mi dispositivo esto sobrescribiría un controlador estándar que es para el manejo de errores en la tabla (el primero utilizable es 32 según Silberschatz (Conceptos del sistema operativo)).
3) ¿Quién establece inicialmente las IRQ? ¿Bios? El sistema operativo?
4) ¿Quién es responsable de la coincidencia de la IRQ y la compensación en el vector de interrupción?
5) Es posible compartir IRQS. ¿Cómo es eso posible? Hay carriles de hardware en la placa base que conectan los dispositivos al controlador de interrupción. ¿Cómo se pueden configurar los carriles para la misma Interrupción? Debe haber una tabla que diga que las líneas 2 y 3 manejan IRQ15, p. ¿Dónde reside esta tabla y cómo se llama?
Una explicación más detallada sobre la configuración de interrupción, la manipulación y la cartografía se puede encontrar aquí: [Un código de pie en el interior del núcleo marco de interrupción] (http://linuxburps.blogspot.in/2013/10/linux-interrupt- handling.html) –