Afbryde

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 27. april 2022; verifikation kræver 1 redigering .

Afbrydelse er et af computerteknologiens grundlæggende begreber , som ligger i, at når en hændelse opstår, overføres kontrollen til en særlig procedure kaldet en interrupt-handler (ISR, eng.  Interrupt Service Routine ) [1] . I modsætning til betingede og ubetingede hop kan en interrupt kaldes hvor som helst i programmet, inklusive hvis programudførelsen er suspenderet og normalt forårsaget af begivenheder uden for programmet. Efter at have udført de nødvendige handlinger, returnerer interrupt-handleren som regel kontrol til det afbrudte program [2] .

Udnævnelse

Som regel bruges interrupts til at arbejde med perifere enheder. For eksempel skal du sende en anmodning om at indlæse data fra disken til hukommelsen, og mens indlæsningen er i gang, udføre nogle andre handlinger eller stoppe udførelsen, indtil en afbrydelse modtages, og efter at overførslen er fuldført, skal du gå til afbrydelseshandleren der vil begynde at behandle de indgående data [1] . Ved hjælp af interrupts kan multitasking , programfejlfinding , emulering af visse enheder osv. også implementeres .

Arter

Afhængigt af kilden til afbrydelsessignalet er de opdelt i:

Udtrykket "fælde" ( engelsk  fælde ) bruges nogle gange som et synonym for udtrykket "afbrydelse" eller "intern afbrydelse". Som regel er brugen fastlagt i dokumentationen fra producenten af ​​en bestemt processorarkitektur.

Maskering

Eksterne afbrydelser, afhængigt af muligheden for forbud, er opdelt i:

Interrupt-handlere er normalt skrevet på en sådan måde, at deres behandlingstid er så kort som muligt, da andre interrupts ikke kan behandles under deres drift, og hvis der er mange af dem (især fra én kilde), så kan de gå tabt. Windows bruger opkaldsmekanismen for forsinket procedure til at gøre dette .

Prioritering

Indtil afslutningen af ​​afbrydelsesbehandlingen er et forbud mod at behandle denne type afbrydelse normalt fastsat, således at processoren ikke går ind i behandlingscyklussen for en afbrydelse. Prioritering betyder, at alle afbrydelseskilder er opdelt i klasser, og hver klasse tildeles sit eget prioritetsniveau for afbrydelsesanmodninger [3] .

Afbrydelsestabel

En interrupt-vektor  er et enhedstildelt nummer, der identificerer den tilsvarende interrupt-handler. Interrupt-vektorer kombineres til en interrupt-vektortabel, der indeholder adresserne på interrupt-handlere [4] . Placeringen af ​​bordet afhænger af processorens type og driftstilstand.

Gennemsigtighed

Det forudsættes, at afbrydelsen skal give gennemsigtighed - det vil sige med undtagelse af data, der skal ændres ud fra formålet med afbrydelsen, skal databehandleren efter endt afbrydelsesbehandling bringes tilbage til samme tilstand, hvori den var på tidspunktet for opkaldet [5] . I det enkleste tilfælde er det nok at gemme tilstanden for alle processorregistre i stakken.

Softwareafbrydelse

En softwareafbrydelse er en synkron afbrydelse, der kan implementeres af et program ved hjælp af en speciel instruktion.

I x86-processorer, for eksplicit at kalde en synkron interrupt, er der en instruktionInt , hvis argument er interrupt-nummeret (fra 0 til 255). På IBM PC-kompatible computere behandles nogle afbrydelser af BIOS - rutiner , der er gemt i ROM , og afbrydelsen fungerer som en grænseflade for at få adgang til en tjeneste, der leveres af BIOS. Afbrydelser kan også betjenes af BIOS'en på udvidelseskort (for eksempel netværks- eller videokort ), operativsystemet og endda almindelige (applikations)programmer, der konstant er i hukommelsen, mens andre programmer kører (de såkaldte residente programmer). ). I modsætning til ægte tilstand , i den beskyttede tilstand af x86-processorer, kan almindelige programmer ikke serviceafbryde, denne funktion er kun tilgængelig for systemkoden (operativsystem).

MS-DOS bruger interrupts nummereret 20h til 3Fh til at interagere med dets moduler og applikationsprogrammer (numre er angivet i hexadecimal notation , som det er sædvanligt ved programmering i x86 assemblysprog ). For eksempel udføres adgang til hovedsættet af MS-DOS-funktioner ved at udføre en instruktion Int 21h(i dette tilfælde overføres funktionsnummeret og dets argumenter i registre ). Denne tildeling af interrupt-numre er ikke fastkablet, og andre programmer kan installere deres egne interrupt-handlere i stedet for eller oven på eksisterende handlere installeret af MS-DOS eller andre programmer, som normalt bruges til at ændre funktionalitet eller udvide listen over systemfunktioner. Virus drager også fordel af denne mulighed .

Noter

  1. 1 2 Tanenbaum, 2018 , s. 452.
  2. Pogorely, 1989 , s. 56.
  3. Tanenbaum, 2018 , s. 454=456.
  4. Tanenbaum, 2018 , s. 453.
  5. Tanenbaum, 2018 , s. 454.

Litteratur