Förstå avbrott och traps
Lär dig skilja mellan maskinvaruavbrott, programvaruavbrott och undantag samt förstå deras roll i systemets funktion.
Förstå avbrott och traps är en gratis lektion i Assembler och lågnivåprogrammering för x86-system på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Assembler och lågnivåprogrammering för x86-system, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Assembler och lågnivåprogrammering för x86-system innehåller totalt 4 lektioner.
Händelser som stoppar CPU:n
Vad är avbrott och traps? Tänk på dem som brådskande signaler som talar om för datorns CPU att pausa det den gör och uppmärksamma något viktigare.
De här signalerna är avgörande för hur operativsystem hanterar uppgifter, reagerar på hårdvara och hanterar fel. Utan dem skulle datorn varken kunna köra flera uppgifter samtidigt eller reagera när du trycker på en tangent!
CPU:ns normala flöde och avbrott
Normalt kör CPU:n instruktioner efter varandra i ett jämnt flöde. Men vad händer om någon trycker på en tangent eller om ett fel inträffar?
Avbrott och traps är mekanismer som gör att CPU:n tillfälligt kan stoppa sin aktuella uppgift, hantera den brådskande händelsen och sedan återuppta det ursprungliga arbetet.
Hårdvaruavbrott: externa signaler
Hårdvaruavbrott är externa signaler som genereras av hårdvaruenheter och kräver CPU:ns uppmärksamhet.
- De är asynkrona, vilket innebär att de kan inträffa när som helst och inte är kopplade till CPU:ns aktuella instruktion.
- Tänk på dem som en ringklocka – CPU:n slutar med det den gör för att svara.
Vanliga hårdvaruavbrott
De finns överallt! Här är några vanliga exempel:
- Tangenttryckning: När du skriver skickar tangentbordets styrenhet ett avbrott.
- Musrörelse: När du flyttar musen utlöses avbrott.
- Timeravbrott: Ett särskilt chip genererar avbrott med jämna mellanrum, så att operativsystemet kan schemalägga uppgifter.
- Disk-I/O: När data är klar från hårddisken signalerar den CPU:n.
Programvaruavbrott: programmerade anrop
Programvaruavbrott utlöses avsiktligt av ett program som körs med hjälp av en särskild instruktion (till exempel INT i x86-assembler).
- De är synkrona och inträffar exakt när instruktionen körs.
- Program använder dem för att begära tjänster från operativsystemet, till exempel för att läsa en fil eller skriva ut på skärmen.
Utlösa ett programvaruavbrott
I x86-assembler genererar instruktionen INT ett programvaruavbrott. Här används int 0x80 i Linux för att anropa en systemtjänst (syscall) som avslutar programmet.
Prova att köra det här enkla assemblerprogrammet:
section .data
msg db "Hello from Assembly!", 0xA
len equ $ - msg
section .text
global _start
_start:
; sys_write (syscall 4)
mov eax, 4 ; syscall number for sys_write
mov ebx, 1 ; file descriptor (stdout)
mov ecx, msg ; address of string to write
mov edx, len ; length of string
int 0x80 ; invoke kernel
; sys_exit (syscall 1)
mov eax, 1 ; syscall number for sys_exit
mov ebx, 0 ; exit code 0
int 0x80 ; invoke kernelUndantag: CPU:ns interna larm
Undantag är en annan typ av synkron händelse, men de utlöses internt av själva CPU:n när den upptäcker ett fel eller ett ovanligt tillstånd under körningen av en instruktion.
- De visar att något gick fel med den aktuella instruktionen eller dess data.
- Till skillnad från hårdvaruavbrott är de direkt kopplade till exekveringsflödet.
Fel, fällor och avbrott
Undantag kategoriseras efter hur de påverkar programmets körning:
- Fel: Ett fel som ofta kan korrigeras, så att programmet kan starta om den instruktion som orsakade felet (till exempel ett sidfel vid försök att komma åt minne som för närvarande inte finns i RAM).
- Fällor: Ett undantag som rapporteras omedelbart efter att den instruktion som orsakade det har körts, så att programmet kan fortsätta (till exempel en brytpunkt i en debugger).
- Avbrott: Allvarliga fel som inte kan återställas och som vanligtvis avslutar programmet (till exempel ett kritiskt maskinvarufel).
Verkliga utlösare av undantag
Ni har förmodligen stött på dessa, även om ni inte kände till namnet:
- Division med noll: Försök att dividera ett tal med noll.
- Ogiltig opcode: CPU:n stöter på en instruktion som den inte känner igen.
- Sidfel: Ett program försöker komma åt en minnesadress som inte är mappad eller tillgänglig.
- Allmänt skyddsfel (GPF): Ett program försöker komma åt minne som det saknar behörighet till eller utför en privilegierad åtgärd på felaktigt sätt.
Viktiga skillnader i sammanfattning
Låt oss tydliggöra de viktigaste skillnaderna:
- Källa: Hårdvaruavbrott är externa, programvaruavbrott initieras av program och undantag uppstår internt i CPU:n.
- Tidpunkt: Hårdvaruavbrott är asynkrona; programvaruavbrott och undantag är synkrona.
- Syfte: Avbrott hanterar händelser (I/O, timers och anrop till operativsystemet); undantag hanterar fel eller särskilda tillstånd.
- Möjlighet att korrigera: Vissa undantag (fel) kan korrigeras, medan andra (avbrott) inte kan det.
Att skilja mellan händelsetyper
Vilket av följande scenarier beskriver ett hårdvaruavbrott?
Repetition: CPU:ns händelsehanterare
I den här lektionen har vi gått igenom de viktiga mekanismer som gör att en CPU kan reagera på händelser och fel:
- Hårdvaruavbrott: Externa signaler från enheter (tangentbord och timer).
- Programvaruavbrott: Programinitierade begäranden om tjänster från operativsystemet (till exempel instruktionen
INT). - Undantag: Interna CPU-fel eller ovanliga tillstånd (till exempel division med noll och sidfel).
Genom att förstå dessa får ni en bättre uppfattning om hur operativsystem hanterar uppgifter och upprätthåller stabilitet på låg nivå.
Lär dig Assembly med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Förstå avbrott och traps” gratis?
Ja – hela texten till ”Förstå avbrott och traps” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Assembler och lågnivåprogrammering för x86-system, kan Ni uppgradera till CoddyKit PRO. Kursen i Assembler och lågnivåprogrammering för x86-system innehåller totalt 4 lektioner.
Vad lär jag mig i ”Förstå avbrott och traps”?
Lär dig skilja mellan maskinvaruavbrott, programvaruavbrott och undantag samt förstå deras roll i systemets funktion. Ni övar på Assembler och lågnivåprogrammering för x86-system med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Assembler och lågnivåprogrammering för x86-system?
Du behöver inga förkunskaper. Utbildningen i Assembler och lågnivåprogrammering för x86-system på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Förstå avbrott och traps”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Assembler och lågnivåprogrammering för x86-system-lektionen?
Ja. Varje Assembler och lågnivåprogrammering för x86-system-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Förstå avbrott och traps
- Interrupt Descriptor Table (IDT)
- Egna undantagshanterare
- Den programmerbara avbrottskontrollern (PIC) och APIC