IRQ
IRQ je zkratka z anglického Interrupt ReQuest (česky požadavek na přerušení). Označuje signál, kterým požádá zařízení (např. klávesnice, časovač atd.) procesor o pozornost, tedy požádá o přerušení probíhajícího procesu za účelem provedení důležitější akce.
IRQ (přerušení) se provádí následovně: Zařízení sdělí řadiči přerušení, že potřebuje provést přerušení (například při stisknutí klávesy na klávesnici je také vyslán požadavek na přerušení). Řadič přerušení poté upozorní CPU, že jsou čekající (pending) přerušení. Když se CPU dostane do stavu kdy je ochotné přerušení přijmout, přeruší probíhající výpočet, zeptá se řadiče na nejdůležitější nezamaskované čekající přerušení a spustí jeho obsluhu. Ta typicky odloží právě probíhající proces (uloží si jeho stav), provede základní obsluhu zařízení (složitější věci může naplánovat na provedení později), informuje řadič přerušení o dokončení obsluhy přerušení, obnoví stav procesu a pokračuje dále …
Přerušení často bývají identifikovány indexem s formátu zkratky IRQ následované číslem přerušení. Například pro programovatelné řadiče z rodiny Intel 8259 existuje 8 přerušení, které bývají běžně označované jako IRQ0 až IRQ7. V počítačových systémech založených na x86 architektuře, které používají 2 z programovatelných řadičů jsou přerušení číslována od IRQ0 do IRQ15.
Některé procesory mají řadič přerušení integrovaný, ale častější je uvedený stav kdy je řadič logicky oddělen (není nutné aby byl oddělen fyzicky). Řadič obvykle vyhodnocuje priority přerušení, umožňuje některá přerušení ignorovat (maskovat) a pamatuje si, která přerušení čekají na vyřízení.
x86 IRQ [editovat]
Pro seznam přerušení a diskuzi ohledně hardwarových IRQ pro systémy x86 se podívejte do článku Intel 8259.
Na systémech, které využívají Intel 8259 je typicky využito 16 IRQ. IRQ 0 až 7 jsou spravovány jedním Intel 8259 programovatelným řadičem přerušení (zkráceně PIC) a IRQ 8 až 16 druhým Intel 8259 PIC. První PIC, primární, tzv. master, je jediný, který přímo komunikuje s procesorem, kdežto druhý, tzv. slave, namísto procesoru signalizuje prvnímu (master PIC) pomocí přerušení IRQ 2, a master předává tento signál přímo procesoru. Existuje tedy 15 IRQ dostupných pro hardware.
Na novějších systémech s použitím tzv. Intel APIC Architecture je typicky k dispozici 24 IRQ a 8 dalších je využito pro předávání PCI přerušení tak, aby se vyhnulo konfliktu mezi dynamicky konfigurovanými PCI přerušeními a staticky konfigurovanými ISA přerušeními. Na dřívějších APIC systémech existovalo pouze 16 IRQ nebo pouze s Intel 8259 řadiči PCI přerušení byly předávány do 16 IRQ s použitím PIR obvodu integrovaného do southbridge.
Nejjednodušší způsob, jak zjistit tyto informace na Microsoft Windows je použít Správce zařízení (Device Manager) nebo Systémové informace Microsoft (msinfo32.exe). Na systémech Linux, IRQ mapování může být zobrazeno použitím příkazu cat /proc/interrupts nebo procinfo programy.
Master PIC [editovat]
- IRQ 0 — systémový časovač (nelze změnit)
- IRQ 1 — přerušení klávesnice (viz klávesnice)
- IRQ 2 — předává signály z IRQs 8–15
- — každé zařízení konfigurované tak, aby používalo IRQ 2 ve skutečnosti používá přerušení IRQ 9
- IRQ 3 — sériový port controller pro COM2 (sdílený s COM4, pokud je COM4 dostupný)
- IRQ 4 — řadič sériového portu COM1 (sdílený s COM3, pokud je COM3 dostupný)
- IRQ 5 — LPT port 2 nebo zvuková karta
- IRQ 6 — řadič disketové mechaniky (viz disketa)
- IRQ 7 — LPT port 1 nebo zvuková karta (8-bit Sound Blaster a kompatibilní)
Slave PIC [editovat]
- IRQ 8 — hodiny reálného času
- IRQ 9 — open interrupt / available nebo SCSI host adapter
- IRQ 10 — open interrupt / available nebo SCSI nebo NIC
- IRQ 11 — open interrupt / available nebo SCSI nebo NIC
- IRQ 12 — myš na PS/2
- IRQ 13 — matematický koprocessor nebo integrovaná floating point unit nebo meziprocesorové přerušení (angl. inter-processor interrupt) (použití závisí na OS)
- IRQ 14 — primární ATA kanál
- IRQ 15 — sekundární ATA kanál
- ATA rozhraní obvykle obsluhuje hard disky a CD-ROM mechaniky
V tomto článku byl použit překlad textu z článku Interrupt_request na anglické Wikipedii.