Interrupt: Forskelle mellem versioner

Content deleted Content added
m sprog
rod
Linje 1:
{{eftersyn|Artiklen har ingen referencer og et uklart sprog der ikke harmonerer med det fagligt-tekniske tema|dato=november 2021}}
Et '''''interrupt''''' (dansk afbrydelse) er et signal til en [[cpu]] om at afbryde den aktive [[Proces (styresystem)|proces]] (det [[Computerprogram|program]] cpuen er i gang med at [[Afvikle (datalogi)|afvikle]]), og i stedet fortsætte med at [[Udføre (datalogi)|udføre]] [[maskinkode|instruktioner]] på en anden [[Hovedlager#Adressering|adresse i lageret]]. ''Interruptet'' signalerer, at der er indtruffet en hændelse, der kræver øjeblikkelig opmærksomhed. Inden der springes til denne adresse, vil bestemte oplysninger (parametre) blive gemt, således at den afbrudte programafvikling evt. kan fortsætte på et senere tidspunkt.
'''Interrupt''' ({{lang-da|afbrydelse}}) er en mekanisme i [[cpu]]-arkitekturen der har som formål
 
at afbryde den aktive {{illsup|de|opcode}} processering.
Adressen, der springes til, afhænger af det ''interrupt'', der er modtaget. På denne adresse skal ligge den '''''interrupthandler''''' (dansk computerprogram/procedure som håndterer den kaldte afbrydelse) eller '''''interrupt service routine''''' (andet navn men samme opførsel), der er relevant for det pågældende ''interrupt''.
'''Interruptet''' signalerer - i metaforisk forstand - at der er indtruffet en hændelse
 
(''{{illsup|de|Event (programmering)|Ereignis (Programmierung)|event}}'')
Et ''interrupt'' kan dannes af [[hardware]], et '''''hardware interrupt''''' - og af et kørende program, et '''''software interrupt'''''.
der kræver øjeblikkelig håndtering,
og håndteringen implementeres jævnfør en indbygget, dvs. ''hardcoded'',
'interrupthandler', evt. også kaldet
'interrupt service routine'.
Mekanismen agerer på [[Register (cpu)|register]]-niveau og kan i visse (få) tilfælde tilgåes ved [[programmering]] - et softwareinterrupt.
'''Interrupt''' mekanismen skelner - såvidt vides - ikke mellem software-genererede kritiske hændelser og hardware-kritiske hændelser.
 
== Hardwareinterrupt ==
Line 13 ⟶ 19:
 
== Softwareinterrupt ==
Et softwareinterrupt udløses af et program. Det sker som en særlig instruktion, for hvilke nok ikke alle programmeringssprog kan bruges, dels er gemt af vejen i kompilerings-processen.
Et ''softwareinterrupt'' udløses af det kørende program. Det kan ske direkte som en særlig instruktion, en teknik der af og til benyttes til kommunikation med maskinens [[operativsystem]], eller det kan udløses af en anden instruktion. Hvis et program forsøger at tilgå en adresse i lageret, der ikke aktuelt er tilgængeligt (fordi der køres med [[virtuelt lager]]), vil fejlen fanges af maskinens lagercontroller. Der dannes et ''interrupt''-signal, og en rutine i maskinens operativsystem vil blive sat i gang for at få den manglende ''page'' (side) læst ind. ''Division med nul'' eller forsøg på at tilgå lager, der tilhører et andet program, vil på nogle maskiner også udløse et ''interrupt'' (af og til benævnt et '''''trap''''').
 
Gængse {{illsup|de|Opcode|Opcode|Opcodes}}
Endelig kan en ukendt instruktion udløse et ''interrupt''. En ukendt instruktion kan være en maskininstruktion, der godt nok er defineret for den pågældende arkitektur, men som ikke findes på alle modeller af computere. I stedet vil en subrutine blive kaldt. Den vil så eftergøre det arbejde, som den rigtige instruktion skulle have gjort. Så bortset fra det større antal instruktioner udført og den benyttede tid, kan det kørende program ikke ”se”, at instruktionen reelt ikke fandtes. Man kan altså have mange forskellige computere, nogle dyrere end andre, men de kan alle udføre de samme instruktioner eller simulere dem.
* INT xxh (Interrupt / Intel 8086)
* SC xxh (System Call / Zilog Z8000)
* TRAP xh (Trap / Motorola 68000)
* CALL 0005h (CP/M-80)
Eksempelvis i [[assemblersprog]]
<syntaxhighlight lang="asm" style="border: dashed 1px #2F6FAB; padding: 1em">
int 80h
</syntaxhighlight>
 
== ''Maskable interrupt'' og ''Non-maskable interrupt'' ==