Megszakítás vs kivétel
Bármely számítógépen egy program normál végrehajtása során előfordulhatnak olyan események, amelyek a CPU ideiglenes leállását okozhatják. Az ehhez hasonló eseményeket megszakításoknak nevezzük. A megszakításokat szoftver- vagy hardverhibák okozhatják. A hardveres megszakításokat (egyszerűen) megszakításoknak, míg a szoftveres megszakításokat kivételeknek nevezzük. Ha egy megszakítást (szoftvert vagy hardvert) emelnek, a vezérlés átkerül az ISR (Interrupt Service Routine) nevű speciális szubrutinba, amely képes kezelni a megszakítás által előidézett feltételeket.
Mi az a megszakítás?
A megszakítás kifejezést általában a hardveres megszakításokra tartják fenn. Ezek külső hardveresemények által okozott programvezérlési megszakítások. Itt a külső a CPU-n kívüli kifejezést jelenti. A hardveres megszakítások általában sok különböző forrásból származnak, mint például időzítő chip, perifériás eszközök (billentyűzetek, egér stb.), I/O portok (soros, párhuzamos stb.), lemezmeghajtók, CMOS óra, bővítőkártyák (hangkártya, videó). kártya stb.). Ez azt jelenti, hogy hardveres megszakítások szinte soha nem fordulnak elő a végrehajtó programmal kapcsolatos események miatt. Például egy olyan esemény, mint a felhasználó billentyűzetének billentyűlenyomása, vagy egy belső hardveres időzítés, előidézheti ezt a fajta megszakítást, és tájékoztathatja a CPU-t, hogy egy bizonyos eszköz figyelmet igényel. Ilyen helyzetben a CPU leállítja azt, amit valaha is csinált (azaz szünetelteti az aktuális programot), biztosítja az eszköz által igényelt szolgáltatást, és visszatér a normál programhoz. Amikor hardveres megszakítások lépnek fel, és a CPU elindítja az ISR-t, a többi hardveres megszakítás le van tiltva (például 80 × 86-os gépeknél). Ha más hardveres megszakításokra van szüksége, miközben az ISR fut, akkor ezt kifejezetten meg kell tennie a megszakítási jelző törlésével (sti utasítással).80×86-os gépeken a megszakításjelző törlése csak a hardveres megszakításokra lesz hatással.
Mi a kivétel?
A kivétel egy szoftveres megszakítás, amely egy speciális kezelői rutinként azonosítható. A kivétel azonosítható egy automatikusan fellépő csapdaként (a Trap azonosítható a vezérlés átadásaként, amelyet a programozó kezdeményez). Általában nincsenek kivételekhez specifikus utasítások (a csapdákat egy adott utasítás segítségével állítják elő). Tehát kivétel történik egy „kivételes” körülmény miatt, amely a program végrehajtása során fordul elő. Például a nullával való osztás, illegális műveleti kód végrehajtása vagy a memóriával kapcsolatos hiba kivételeket okozhat. Kivétel esetén a CPU ideiglenesen felfüggeszti az általa végrehajtott programot, és elindítja az ISR-t. Az ISR tartalmazza, hogy mit kell tenni a kivétellel. Megoldhatja a problémát, vagy ha ez nem lehetséges, akkor egy megfelelő hibaüzenet kinyomtatásával kecsesen megszakíthatja a programot. Bár egy adott utasítás nem okoz kivételt, kivételt mindig egy utasítás okoz. Például a nullával való osztás csak az osztási utasítás végrehajtása során fordulhat elő.
Mi a különbség a megszakítás és a kivétel között?
A megszakítások hardveres megszakítások, míg a kivételek a szoftveres megszakítások. A hardveres megszakítások előfordulása általában letiltja a többi hardveres megszakítást, de ez a kivételekre nem igaz. Ha le kell tiltania a hardveres megszakításokat, amíg kivételt nem szolgáltat, akkor kifejezetten törölnie kell a megszakítási jelzőt. És általában a számítógépen lévő megszakítási jelző hatással van a (hardveres) megszakításokra, szemben a kivételekkel. Ez azt jelenti, hogy a jelző törlése nem akadályozza meg a kivételeket.