A megszakítás az, amikor a mikroprocesszor olyasmit tesz, amire nem kapott utasítást, mert olyan dolgok történnek, amelyek kívül esnek azon, amit a programnak tennie kellene. A megszakítások leggyakrabban azért történnek, mert a processzor jelet kap a hardvertől, de a programmal együtt futó szoftvertől is származhatnak. Megszakításokat okozhat többek között a billentyűk lenyomása a billentyűzeten, a beépített időzítő elindulása, egy adatátvitel, vagy bármilyen más olyan esemény, amely azonnali cselekvést igényel a processzortól. A megszakítások bármikor bekövetkezhetnek, miközben a processzor egy programot futtat, függetlenül attól, hogy a program forráskódjában hol található.
Típusok és források
- Hardver megszakítások: külső eszközök (billentyűzet, hálózat, lemezvezérlő, DMA) jelzik, hogy figyelmet vagy adatátvitelt igényelnek. Gyakran fizikai IRQ vonalak vagy modern rendszerekben APIC/PIC vezérlők közvetítik őket.
- Szoftver megszakítások: a programokból származnak, például rendszerhívások (system call) vagy explicit megszakítás utasítások (pl. x86 rendszeren az int utasítás).
- Kivétel (exception): a processzor által generált, a futó kód hibájára vagy speciális eseményre reagáló megszakítások (például nullával osztás, oldalhiba—page fault, tiltott memóriacím). Ezeket a CPU saját maga indítja.
- Maszkolható vs. nem maszkolható: bizonyos megszakítások elnyomhatók (maskable), míg a nem maszkolható megszakítások (NMI) mindig kiszolgálást igényelnek, mert kritikus hibát jeleznek.
Hogyan kezeli a processzor a megszakítást
Amikor megszakítás érkezik, a processzor általában a következő lépéseket hajtja végre:
- Megszakítás észlelése: hardverjel vagy belső feltétel hatására a CPU felismeri a megszakítást.
- Kontekstus mentése: a processzor elmenti a futó program állapotát (programszámláló/utasításpointer, zászlók, gyakran néhány regiszter) a verembe vagy speciális regiszterekbe, hogy később vissza lehessen állítani.
- Vektorozás: a megszakítás típusa alapján a CPU vagy az operációs rendszer kikeresi a megfelelő megszakítás-kezelő (ISR/Interrupt Service Routine) címét egy megszakítási vektor-táblából (pl. IVT, IDT).
- ISR végrehajtása: az adott megszakítás-kiszolgáló rutin futtatja a szükséges műveleteket (pl. adatolvasás, állapot-frissítés, eszközparancsok), majd jelzi, ha a hardvernek vissza kell igazolnia a teljesítést.
- Visszatérés: az ISR befejezése után a processzor visszaállítja a korábban mentett kontextust, és folytatja a megszakítás előtti végrehajtást (pl. IRET utasítással x86 rendszereken).
Operációs rendszer és vezérlés
Az operációs rendszer feladatai a megszakítások kezelésében:
- nyilvántartja a megszakítási vektorokat és megfelelő jogosultságokat,
- prioritásokat és maszkolást kezel (mely megszakítás engedélyezett egy adott pillanatban),
- biztosítja a biztonságos kontextusváltást (ha az ISR hosszú távú feldolgozást igényel, gyakran rövid kezelő szintű rutin (top-half) indít egy hosszabb feldolgozást a kernel háttérfolyamatában (bottom-half / tasklet / workqueue)),
- kezelni tudja a megszakítások egymásba ágyazódását (nesting) és elkerüli a versenyhelyzeteket kritikus szakaszok esetén.
Fontos fogalmak és gyakorlati szempontok
- Latency (késleltetés): az az idő, amíg a megszakítás bekövetkezésétől az ISR tényleges elindulásáig eltelik. Alacsony késleltetéses rendszereknél ezt minimalizálni kell.
- Throughput: hány megszakítást képes a rendszer egy időegység alatt kezelni anélkül, hogy túlterhelődne (interrupt storm problémák).
- Edge vs. level triggered: megszakítások lehetnek él- (edge) vagy szint- (level) vezéreltek; a megfelelő konfiguráció fontos az eszközmegbízhatóság szempontjából.
- Spurious interrupt: ritkán előfordul, hogy a hardver hibás jelzést ad; az OS-nek tudnia kell kezelni az ilyen hamis megszakításokat.
- DMA és megszakítások: a közvetlen memóriához való hozzáférés (DMA) lehetővé teszi az eszközök számára, hogy CPU beavatkozás nélkül mozgatják az adatokat, és csak a művelet végén küldenek megszakítást a befejezés jelzésére.
Gyakorlati példák
- Billentyűzet: egy gomb lenyomásakor hardver megszakítás érkezik, az ISR beolvassa a scancode-ot, és továbbítja a felhasználóprogram vagy az OS számára.
- Időzítő: periódikus időzítő megszakítások biztosítják az ütemezést (scheduling) és az időmérést az operációs rendszer számára.
- Hálózati kártya: bejövő csomag érkezésekor megszakítás jelzi, hogy az adat rendelkezésre áll, az ISR feldolgozza vagy átadja a csomagot a hálózati stacknek.
Összefoglalva: a megszakítások lehetővé teszik, hogy a processzor gyorsan és hatékonyan reagáljon külső és belső eseményekre anélkül, hogy a programok folyamatosan lekérdeznék az eszközök állapotát. A processzor és az operációs rendszer együtt biztosítják a megszakítások felismerését, priorizálását, biztonságos kiszolgálását és a végrehajtás utáni helyreállítást.
