Avbrudd vs unntak
I en hvilken som helst datamaskin, under normal kjøring av et program, kan det være hendelser som kan føre til at CPU-en stopper midlertidig. Hendelser som dette kalles avbrudd. Avbrudd kan være forårsaket av enten programvare- eller maskinvarefeil. Maskinvareavbrudd kalles (bare) avbrudd, mens programvareavbrudd kalles unntak. Når et avbrudd (programvare eller maskinvare) er utløst, overføres kontrollen til en spesiell subrutine k alt ISR (Interrupt Service Routine) som kan håndtere forholdene som oppstår av avbruddet.
Hva er avbrudd?
Begrepet avbrudd er vanligvis reservert for maskinvareavbrudd. De er programkontrollavbrudd forårsaket av eksterne maskinvarehendelser. Her betyr ekstern ekstern til CPU. Maskinvareavbrudd kommer vanligvis fra mange forskjellige kilder som timerbrikke, eksterne enheter (tastaturer, mus osv.), I/O-porter (serielle, parallelle osv.), diskstasjoner, CMOS-klokke, utvidelseskort (lydkort, video). kort osv.). Det betyr at maskinvareavbrudd nesten aldri oppstår på grunn av en eller annen hendelse relatert til det kjørende programmet. For eksempel kan en hendelse som et tastetrykk på tastaturet av brukeren, eller en intern maskinvaretidsavbrudd, øke denne typen avbrudd og kan informere CPU'en om at en bestemt enhet trenger litt oppmerksomhet. I en slik situasjon vil CPU-en stoppe alt den gjorde (dvs. pauser det gjeldende programmet), leverer tjenesten som kreves av enheten og vil gå tilbake til det vanlige programmet. Når maskinvareavbrudd oppstår og CPU-en starter ISR, blir andre maskinvareavbrudd deaktivert (f.eks. i 80×86-maskiner). Hvis du trenger andre maskinvareavbrudd mens ISR kjører, må du gjøre det eksplisitt ved å fjerne avbruddsflagget (med sti-instruksjon). I 80×86-maskiner vil fjerning av avbruddsflagget bare påvirke maskinvareavbrudd.
Hva er unntak?
Unntak er et programvareavbrudd, som kan identifiseres som en spesiell behandlerrutine. Unntak kan identifiseres som en automatisk opptredende felle (en Trap kan identifiseres som en overføring av kontroll, som initieres av programmereren). Generelt er det ingen spesifikke instruksjoner knyttet til unntak (feller genereres ved hjelp av en spesifikk instruksjon). Så et unntak oppstår på grunn av en "eksepsjonell" tilstand som oppstår under programkjøring. For eksempel kan divisjon med null, kjøring av en ulovlig opkode eller minnerelatert feil forårsake unntak. Når et unntak oppstår, suspenderer CPU midlertidig programmet den kjørte og starter ISR. ISR vil inneholde hva som skal gjøres med unntaket. Det kan løse problemet, eller hvis det ikke er mulig, kan det avbryte programmet ved å skrive ut en passende feilmelding. Selv om en spesifikk instruksjon ikke forårsaker et unntak, vil et unntak alltid være forårsaket av en instruksjon. For eksempel kan divisjon med null feil bare skje under utførelsen av divisjonsinstruksjonen.
Hva er forskjellen mellom avbrudd og unntak?
Avbrudd er maskinvareavbrudd, mens unntak er programvareavbrudd. Forekomster av maskinvareavbrudd deaktiverer vanligvis andre maskinvareavbrudd, men dette gjelder ikke for unntak. Hvis du trenger å ikke tillate maskinvareavbrudd før et unntak blir servert, må du eksplisitt fjerne avbruddsflagget. Og vanligvis påvirker avbruddsflagget på datamaskinen (maskinvare) avbrudd i motsetning til unntak. Dette betyr at sletting av dette flagget ikke vil forhindre unntak.