19 oct 2010

IRQs en LInux

Una petición de interrupción IRQ ("Interrupt Request") es una señal que se origina en un dispositivo hardware (por ejemplo, un periférico), para indicar al procesador que algo requiere su atención inmediata;  se solicita al procesador que suspenda lo que está haciendo para atender la petición.


Hemos señalado que las interrupciones juegan un papel fundamental, en especial en la operación de dispositivos E/S, ya que les permite enviar estas peticiones a la UCP.  Sin ellas el sistema debería chequear constantemente los dispositivos para comprobar su actividad, pero las interrupciones permiten que los dispositivos puedan permanecer en silencio hasta el momento que requieren atención del procesador. ¿Podría figurarse un sistema telefónico donde hubiera que levantar periódicamente el auricular para comprobar si alguien nos llama?

Nota:  Veremos que estas peticiones pueden ser generadas no solo por dispositivos hardware, también por los programas, e incluso en circunstancias especiales (errores generalmente) por el propio procesador.  Resumimos que existen tres posibles orígenes de estas peticiones:  Hardware, Software, y del procesador.


IRQ  Utilización                                                                      
 0    Cronómetro del sistema
 1    Teclado estándar
 2    Controlador programable de interrupciones
 3    Puerto de comunicaciones (COM2 en windows)
 4    Puerto de comunicaciones (COM1 en windows)
 5    Tarjeta de sonido o segundo puerto paralelo (LPT2: en Windows)
 6    Controlador estándar de disquetes
 7    Puerto de impresora (LPT1 en windows)
 8    Sistema CMOS/reloj en tiempo real
 9    (libre)
10    (libre)
11    Marcador IRQ para manejo de PCI
11    Marcador IRQ para manejo de PCI
11    Marcador IRQ para manejo de PCI
11    Marcador IRQ para manejo de PCI
11    Controlador universal de host Intel 82371AB/EB PCI a USB
11    Crystal SoundFusion(tm) PCI Audio Accelerator
11    Lucent Win Modem
11    Intel(R) PRO/100 SP Mobile Combo Adapter
11    Texas Instruments PCI-1450 CardBus Controller
11    Texas Instruments PCI-1450 CardBus Controller
11    RAGE MOBILITY-M AGP (English)
12    Puerto de mouse compatible con PS/2
13    Procesador de datos numéricos
14    Controlador estándar para disco duro Bus Mastering IDE
15    Controlador estándar para disco duro Bus Mastering IDE

Una vez el sistema esta corriendo, tu puedes explorar que IRQs esta siendo usado examinando el contenido del archivo /proc/interrupts. Una de las formas mas facil de lanzar este comando es de la siguiente manera:

victor@linuxrd:~$ cat /proc/interrupts
           CPU0      
  0:    1152824   IO-APIC-edge      timer
  1:       7009   IO-APIC-edge      i8042
  8:          1   IO-APIC-edge      rtc0
  9:       1370   IO-APIC-fasteoi   acpi
 12:      10332   IO-APIC-edge      i8042
 16:     102641   IO-APIC-fasteoi   eth0
 17:       6189   IO-APIC-fasteoi   hda_intel
 20:     152041   IO-APIC-fasteoi   uhci_hcd:usb2
 21:      27641   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb3, sata_via
 22:          0   IO-APIC-edge      lis3lv02d
 23:          0   IO-APIC-fasteoi   uhci_hcd:usb4
 24:     236358   IO-APIC-fasteoi   eth1
NMI:          0   Non-maskable interrupts
LOC:    1836648   Local timer interrupts
SPU:          0   Spurious interrupts
PMI:          0   Performance monitoring interrupts
PND:          0   Performance pending work
RES:          0   Rescheduling interrupts
CAL:          0   Function call interrupts
TLB:          0   TLB shootdowns
TRM:          0   Thermal event interrupts
THR:          0   Threshold APIC interrupts
MCE:          0   Machine check exceptions
MCP:          0   Machine check polls
ERR:          0
MIS:          0
Posted by Víctor S. Recio

1 comments:

Anónimo dijo...

Buena publicación, sigue adelante!

Publicar un comentario

 
;