Keskeytys vs. poikkeus
Missä tahansa tietokoneessa sen normaalin ohjelman suorittamisen aikana saattaa tapahtua tapahtumia, jotka voivat aiheuttaa CPU:n tilapäisen pysähtymisen. Tällaisia tapahtumia kutsutaan keskeytyksiksi. Keskeytykset voivat johtua joko ohjelmisto- tai laitteistovioista. Laitteistokeskeytyksiä kutsutaan (yksinkertaisesti) keskeytyksiksi, kun taas ohjelmistokeskeytyksiä kutsutaan poikkeuksiksi. Kun keskeytys (ohjelmisto tai laitteisto) on nostettu, ohjaus siirretään erityiseen alirutiiniin nimeltä ISR (Interrupt Service Routine), joka pystyy käsittelemään keskeytyksen aiheuttamia ehtoja.
Mikä on keskeytys?
Keskeytys-termi on yleensä varattu laitteistokeskeytyksiä varten. Ne ovat ulkoisten laitteistotapahtumien aiheuttamia ohjelman ohjauksen keskeytyksiä. Tässä ulkoinen tarkoittaa CPU:n ulkoista. Laitteistokeskeytykset tulevat yleensä monista eri lähteistä, kuten ajastinsiru, oheislaitteet (näppäimistöt, hiiri jne.), I/O-portit (sarja-, rinnakkais-, jne.), levyasemat, CMOS-kello, laajennuskortit (äänikortti, video) kortti jne). Tämä tarkoittaa, että laitteiston keskeytyksiä ei juuri koskaan tapahdu suorittavaan ohjelmaan liittyvän tapahtuman vuoksi. Esimerkiksi tapahtuma, kuten käyttäjän näppäimistön näppäimen painallus tai sisäinen laitteiston ajastimen aikakatkaisu, voi nostaa tällaista keskeytystä ja ilmoittaa CPU:lle, että tietty laite tarvitsee huomiota. Tällaisessa tilanteessa CPU lopettaa tekemänsä (eli keskeyttää nykyisen ohjelman), tarjoaa laitteen tarvitseman palvelun ja palaa normaaliin ohjelmaan. Kun tapahtuu laitteiston keskeytyksiä ja CPU käynnistää ISR:n, muut laitteistokeskeytykset poistetaan käytöstä (esim. 80 × 86 -koneissa). Jos tarvitset muita laitteiston keskeytyksiä ISR:n ollessa käynnissä, sinun on tehtävä se nimenomaisesti tyhjentämällä keskeytyslippu (sti-ohjeella).80×86-koneissa keskeytyslipun tyhjentäminen vaikuttaa vain laitteistokeskeytuksiin.
Mitä poikkeukset ovat?
Poikkeus on ohjelmistokeskeytys, joka voidaan tunnistaa erikoiskäsittelijän rutiiniksi. Poikkeus voidaan tunnistaa automaattisesti tapahtuvaksi ansaksi (Trap voidaan tunnistaa ohjauksen siirroksi, jonka ohjelmoija käynnistää). Yleensä poikkeuksiin ei liity erityisiä ohjeita (ansat luodaan tietyllä käskyllä). Joten poikkeus johtuu "poikkeuksellisesta" tilanteesta, joka tapahtuu ohjelman suorittamisen aikana. Esimerkiksi nollalla jakaminen, laittoman käyttökoodin suorittaminen tai muistiin liittyvä vika voi aiheuttaa poikkeuksia. Aina kun poikkeus nostetaan esiin, CPU keskeyttää väliaikaisesti suorittamansa ohjelman ja käynnistää ISR:n. ISR sisältää mitä tehdä poikkeuksella. Se voi korjata ongelman tai jos se ei ole mahdollista, se voi keskeyttää ohjelman kauniisti tulostamalla sopivan virheilmoituksen. Vaikka tietty ohje ei aiheuta poikkeusta, poikkeuksen aiheuttaa aina käsky. Esimerkiksi nollalla jakaminen voi tapahtua vain jakokäskyn suorittamisen aikana.
Mitä eroa on keskeytyksellä ja poikkeuksella?
Keskeytykset ovat laitteistokeskeytyksiä, kun taas poikkeukset ovat ohjelmistokeskeytyksiä. Laitteistokeskeytykset estävät yleensä muut laitteistokeskeytykset, mutta tämä ei päde poikkeuksiin. Jos sinun on kiellettävä laitteistokeskeytykset, kunnes poikkeus on toimitettu, sinun on tyhjennettävä keskeytyslippu. Ja yleensä tietokoneen keskeytyslippu vaikuttaa (laitteisto)keskeytyksiin poikkeuksien sijaan. Tämä tarkoittaa, että tämän lipun tyhjentäminen ei estä poikkeuksia.