logo

Forskjellen mellom ISR og funksjonsanrop

I denne artikkelen vil du lære om forskjellen mellom ISR og funksjonsanrop , men før du diskuterer forskjellene, må du vite om ISR- og funksjonskallet i korte trekk.

latekslister

Hva er ISR?

En avbruddstjenesterutine (ISR) er en programvarerutine som maskinvare påkaller som svar på et avbrudd. ISR undersøker et avbrudd, bestemmer hvordan det skal håndteres, utfører det og returnerer en logisk avbruddsverdi. Hvis ingen ytterligere håndtering er nødvendig, varsler ISR kjernen med en returverdi. En ISR må utføre svært raskt for å unngå å bremse driften av enheten og driften av alle lavere prioriterte ISR-er.

Selv om en ISR kan flytte data fra et CPU-register eller en maskinvareport til en minnebuffer, er den generelt avhengig av en dedikert avbruddstråd (eller oppgave), kalt avbruddstjenestetråden (IST), for å gjøre det meste av den nødvendige behandlingen. Hvis ytterligere behandling er nødvendig, returnerer ISR en logisk avbruddsverdi til kjernen. Deretter tilordner den et fysisk avbruddsnummer til en logisk avbruddsverdi.

Mekanisme for avbruddshåndtering

Nedenfor er mekanismen for avbruddshåndtering i følgende trinn, for eksempel:

  • Et avbrudd er en tilstand som får CPUen til å suspendere det gjeldende programmet og utføre en ISR. En ISR er et spesialskrevet program for å betjene tilstanden som forårsaket avbruddet.
  • Etter at et avbrudd er betjent, går CPU-en tilbake til hovedprogrammet, nøyaktig ved neste instruksjon der den forlot.
  • Ved avbruddsdrevet dataoverføring, når I/O-enheten er klar for dataoverføring, vil den avbryte CPU. I ISR vil CPU utføre dataoverføringen.
  • Denne metoden er bedre enn polling fordi CPU-en ikke trenger å kaste bort tid på å sjekke statusen til I/O-enheten. Et tastatur er et godt eksempel på avbruddsdrevet I/O-tilgang.
  • I stedet for å sjekke CPU, bør tastaturet avbryte CPU når en tast trykkes. Tiden vil derfor ikke bli kastet bort på å gjentatte ganger sjekke tastaturet når brukeren ikke skriver i det hele tatt.
  • I/O-enheten ber om et avbrudd ved å sende $overline{INTR}$ signal til CPU.
  • Når CPU mottar $overline{INTR}$ signal, fullfører den utførelsen av gjeldende instruksjon og utfører deretter ISR. Når CPU-en er klar, sender den et bekreftelsessignal gjennom SAMTIDIG SOM linje.
  • ISR blir utført, og CPU-en går tilbake til hovedprogrammet.
  • I/O-enheter slår av $overline{INTR}$ signal etter utførelse.
Forskjellen mellom ISR og funksjonsanrop

For eksempel: I eksemplet nedenfor, I/O-overføring ved avbruddsdrevet I/O.

  • Hvis en I/O-enhet som ønsker å utføre en dataoverføring med prosessoren, må avbryte prosessoren.
  • Et avbrudd er en tilstand som får prosessoren til å utføre en avbruddstjenesterutine.
  • I ISR vil prosessoren utføre dataoverføring med I/O-enheten.

I dette eksemplet, avbryt forespørselen ved å trykke på tastaturtasten,

  • I stedet for at prosessoren sjekker om en tast trykkes, avbryter tastaturet prosessoren når en tast trykkes.
  • I ISR-en til tastaturet, som er en del av tastaturdriverprogramvaren, vil prosessoren lese dataene fra tastaturet.
Forskjellen mellom ISR og funksjonsanrop

Fordeler med ISR

Nedenfor er følgende fordeler med ISR, for eksempel:

  • Asynkrone ISR-hendelser kan oppstå når som helst under programmets kjøring.
  • ISR lagrer PC-en, flagger og registrerer på stabelen, deaktiverer alle avbruddene og laster inn adressen til ISR.
  • ISR kan ikke ha argumenter som kan overføres til den.
  • ISR kan ikke returnere verdier.
  • ISR aktiverer avbruddene.
  • Generelt er ISR liten da det tar tid for en annen prosess.
  • Noen av ISR har sin egen stack.

Hva er funksjonsanrop?

Et funksjonsanrop kalles også et subrutineanrop. En subrutine er et sett med instruksjoner som programmet trenger gjentatte ganger. Det er en del av et større program som har ansvar for å utføre en konkret oppgave. Det større programmet kan utføre en stor arbeidsbelastning, og subrutinen kan utføre bare en enkel oppgave, som også er uavhengig av den gjenværende programkodingen.

En funksjon er kodet på en slik måte at den kan kalles opp flere ganger og fra forskjellige steder (selv fra andre funksjoner). Når en funksjon kalles, kan prosessoren gå til der koden for funksjonen befinner seg og utføre instruksjonene for funksjonen én etter én. Etter å ha fullført funksjonene, vil prosessoren gå tilbake til nøyaktig der den slapp og fortsette utførelsen fra neste instruksjon.

freddie mercury

Funksjoner er et flott verktøy for gjenbruk av kode. Mange moderne programmeringsspråk støtter funksjoner. En samling funksjoner kalles a bibliotek . Biblioteker brukes ofte som midler for deling og handel med programvare. I noen tilfeller kan hele programmet være en sekvens av subrutiner.

Når det gjelder en 8086-prosessor, påkalles en subrutine av en ANROP instruksjon, og kontroll returnerer av en IKKE SANT instruksjon. Det reduserer størrelsen på programmet.

Forskjellen mellom ISR og funksjonsanrop

En funksjon må kalles eksplisitt og er en del av den samme konteksten og utførelsestråden som den som ringer. En maskinvare-ISR kalles ikke eksplisitt, men påkalles snarere av en ekstern hendelse. Den gjeldende trådens kontekst blir automatisk bevart når et avbrudd kalles før du bytter kontekst til ISR.

Til gjengjeld skjer den omvendte kontekstbryteren, og gjenoppretter tilstanden til prosessoren før avbruddet, slik at kjøringen fortsetter fra avbruddspunktet. Nedenfor er noen flere forskjeller mellom ISR og funksjonskall.

ISR Funksjonsanrop
Avbruddet initieres vanligvis av en intern eller ekstern signalmikroprosessor i stedet for å utføre instruksjoner. ISR utføres etter å ha lagret programmets nåværende status i stabelen.
ISR utfører forskjellige oppgaver avhengig av den avbrutte enheten eller instruksjoner skrevet av en programmerer.
Funksjonskallet påkalles ved å utføre instruksjoner, som utfører de spesifikke oppgavene og reduserer programmets størrelse.
Maskinvaren bestemmer adressen til ISR.
ISR-adressen er skrevet inne i avbruddsvektortabellen, og ISR-adressen for hvert avbrudd er fast.
Adressen til subrutinen er skrevet inne i instruksjonen, som er skrevet inne i hovedprogramkoden.
ISR brukes til alle generelle oppgaver. Funksjonskall gjøres for programspesifikke oppgaver.
Når et avbrudd oppstår under kjøringen av et gjeldende program, vil derfor prosessoren, etter kjøringen av den gjeldende instruksjonen, utføre ISR. Etter utførelse av ISR, må prosessoren gjenoppta programmet nøyaktig som før avbruddet skjedde.
For dette lagres PC-innholdet, µP-registrene og noen statusforhold. Samlingen av alle statusbitforhold i en mikroprosessor kalles PSW (programstatusord).
  • Under avbruddssyklusen skyves innholdet på PC-en og PSW-en på stabelen. Grenadressen for det aktuelle avbruddet sendes deretter til PC, og en ny PSW lastes inn i statusregisteret.
  • Den siste instruksjonen i ISR ​​er returen fra avbrutt instruksjon. Når denne instruksjonen utføres, blir den gamle PSW og returadressen tatt ut av stabelen.
Her er det kun en PC som er lagret på stabelen for å få adressen til neste instruksjon i hovedprogrammet.
Subrutinen må ha tilgang til data fra den anropende subrutinen og returnere resultater til den subrutinen. Derfor er subrutineparametere og datakobling utført.
Dette kan gjøres gjennom
  • AC-registeret kan brukes for en enkelt inngangsparameter og en enkelt utgangsparameter. I datamaskiner med flere prosessorregistre kan flere parametere sendes på denne måten.
  • En annen måte å sende data til en subrutine på er gjennom minnet.