logo

Diferența dintre ISR și Function Call

În acest articol, veți afla despre diferența dintre ISR și apel de funcție , dar înainte de a discuta diferențele, trebuie să știți despre ISR și apelul de funcție pe scurt.

matrice de obiecte în java

Ce este ISR?

O rutină de serviciu de întrerupere (ISR) este o rutină software pe care hardware-ul o invocă ca răspuns la o întrerupere. ISR examinează o întrerupere, determină cum să o gestioneze, o execută și returnează o valoare logică de întrerupere. Dacă nu este necesară nicio manipulare suplimentară, ISR-ul notifică nucleul cu o valoare returnată. Un ISR trebuie să funcționeze foarte repede pentru a evita încetinirea funcționării dispozitivului și a tuturor ISR-urilor cu prioritate inferioară.

Deși un ISR poate muta datele dintr-un registru al procesorului sau dintr-un port hardware într-un buffer de memorie, în general, se bazează pe un fir de întrerupere (sau sarcină) dedicat, numit fir de serviciu de întrerupere (IST), pentru a face cea mai mare parte a procesării necesare. Dacă este necesară o procesare suplimentară, ISR returnează nucleului o valoare de întrerupere logică. Apoi mapează un număr de întrerupere fizică la o valoare de întrerupere logică.

Mecanismul de gestionare a întreruperilor

Mai jos este mecanismul de gestionare a întreruperilor în următorii pași, cum ar fi:

  • O întrerupere este o condiție care face ca CPU să suspende programul curent și să execute un ISR. Un ISR este un program special scris pentru a repara starea care a provocat întrerupere.
  • După ce o întrerupere este întreținută, procesorul revine la programul principal, exact la următoarea instrucțiune de unde a rămas.
  • În cazul transferului de date bazat pe întreruperi, ori de câte ori dispozitivul I/O este pregătit pentru transferul de date, acesta va întrerupe procesorul. În ISR, CPU va efectua transferul de date.
  • Această metodă este mai bună decât sondajul, deoarece CPU nu trebuie să piardă timp în verificarea stării dispozitivului I/O. O tastatură este un bun exemplu de acces la I/O condus de întreruperi.
  • În loc să verifice procesorul, tastatura ar trebui să întrerupă procesorul atunci când este apăsată o tastă. Astfel, timpul nu va fi pierdut în verificarea în mod repetat a tastaturii atunci când utilizatorul nu tastează deloc.
  • Dispozitivul I/O solicită o întrerupere prin trimiterea $overline{INTR}$ semnal către CPU.
  • Ori de câte ori CPU primește $overline{INTR}$ semnal, finalizează execuția instrucțiunii curente și apoi execută ISR. Când CPU este gata, atunci trimite semnal de confirmare prin intermediul IN TIMP CE linia.
  • ISR este executat, iar CPU revine la programul principal.
  • Dispozitivele I/O opresc $overline{INTR}$ semnal după execuție.
Diferența dintre ISR și Function Call

De exemplu: În exemplul de mai jos, transferul I/O prin I/O condus de întreruperi.

  • Dacă un dispozitiv I/O care dorește să efectueze un transfer de date cu procesorul trebuie să întrerupă procesorul.
  • O întrerupere este o condiție care face ca procesorul să execute o rutină de serviciu de întrerupere.
  • În ISR, procesorul va efectua transferul de date cu dispozitivul I/O.

În acest exemplu, întrerupeți cererea apăsând tasta de la tastatură,

  • În loc ca procesorul să verifice dacă o tastă este apăsată, tastatura întrerupe procesorul la apăsarea unei taste.
  • În ISR-ul tastaturii, care face parte din software-ul driverului tastaturii, procesorul va citi datele de pe tastatură.
Diferența dintre ISR și Function Call

Avantajele ISR

Mai jos sunt următoarele avantaje ale ISR, cum ar fi:

  • Evenimentele asincrone ISR pot apărea în orice moment în timpul execuției programului.
  • ISR salvează PC-ul, steaguri și înregistrează pe stivă, dezactivează toate întreruperile și încarcă adresa ISR.
  • ISR nu poate avea argumente care i se pot transmite.
  • ISR nu poate returna valori.
  • ISR activează întreruperile.
  • În general, ISR este mic, deoarece este nevoie de timp pentru alt proces.
  • Unele dintre ISR au propria lor stivă.

Ce este Function Call?

Un apel de funcție se mai numește și un apel de subrutină. O subrutină este un set de instrucțiuni necesare în mod repetat de către program. Face parte dintr-un program mai amplu care este responsabil pentru realizarea unei sarcini specifice. Programul mai mare poate executa o sarcină mare de lucru, iar subrutina poate efectua doar o sarcină simplă, care este, de asemenea, independentă de codarea programului rămasă.

O funcție este codificată în așa fel încât să poată fi apelată de mai multe ori și din locuri diferite (chiar și din cadrul altor funcții). Când este apelată o funcție, procesorul poate merge acolo unde se află codul funcției și poate executa instrucțiunile funcției unul câte unul. După finalizarea funcțiilor, procesorul va reveni exact acolo unde a rămas și va continua execuția începând de la următoarea instrucțiune.

Funcțiile sunt un instrument excelent pentru reutilizarea codului. Multe limbaje de programare moderne acceptă funcții. O colecție de funcții se numește a bibliotecă . Bibliotecile sunt adesea folosite ca mijloace de partajare și tranzacționare cu software. În unele cazuri, întregul program poate fi o secvență de subrutine.

algoritmul Bellford

În cazul unui procesor 8086, o subrutină este invocată de către a APEL instrucțiuni, iar controlul revine de către a DREAPTA instrucție. Reduce dimensiunea programului.

Diferența dintre ISR și Function Call

O funcție trebuie apelată în mod explicit și face parte din același context și fir de execuție ca și apelantul ei. Un ISR hardware nu este apelat în mod explicit, ci mai degrabă invocat de un eveniment extern. Contextul firului curent este păstrat automat atunci când este apelată o întrerupere înainte de a comuta contextul la ISR.

În schimb, are loc schimbarea de context invers, restabilind starea procesorului înainte de întrerupere, astfel încât execuția să continue din punctul de întrerupere. Mai jos sunt câteva diferențe între ISR și apelul de funcție.

ISR Apel de funcție
Întreruperea este de obicei inițiată de un microprocesor de semnal intern sau extern, mai degrabă decât de execuția instrucțiunilor. ISR este executat după stocarea stării curente a programului în stivă.
ISR îndeplinește sarcini diferite în funcție de dispozitivul întrerupt sau de instrucțiunile scrise de un programator.
Apelul de funcție este invocat prin executarea instrucțiunilor, care efectuează sarcinile specifice și reduc dimensiunea programului.
Hardware-ul determină adresa ISR.
Adresa ISR este scrisă în interiorul tabelului vector de întrerupere, iar adresa ISR pentru fiecare întrerupere este fixă.
Adresa subrutinei este scrisă în interiorul instrucțiunii, care este scrisă în codul programului principal.
ISR este utilizat pentru toate sarcinile de uz general. Apelurile de funcții sunt efectuate pentru sarcini specifice programului.
Când apare o întrerupere în timpul execuției unui program curent, prin urmare, după executarea instrucțiunii curente, procesorul execută ISR. După executarea ISR, procesorul trebuie să reia programul exact ca înainte de apariția întreruperii.
Pentru aceasta, sunt stocate conținutul PC-ului, registrele µP și unele condiții de stare. Colecția tuturor condițiilor de biți de stare dintr-un microprocesor se numește PSW (cuvânt de stare a programului).
  • În timpul ciclului de întrerupere, conținutul PC-ului și PSW este împins în stivă. Adresa de ramură pentru întreruperea particulară este apoi transmisă PC-ului și un nou PSW este încărcat în registrul de stare.
  • Ultima instrucțiune din ISR este revenirea de la instrucțiunea întreruptă. Când această instrucțiune este executată, vechiul PSW și adresa de retur sunt scoase din stivă.
Aici, doar un PC este stocat pe stivă pentru a obține adresa următoarei instrucțiuni din programul principal.
Subrutina trebuie să aibă acces la datele din subrutina de apelare și să returneze rezultatele la acea subrutină. Prin urmare, parametrii subrutinei și legătura de date este realizată.
Acest lucru se poate face prin
  • Registrul AC poate fi utilizat pentru un singur parametru de intrare și un singur parametru de ieșire. În calculatoarele cu mai multe registre de procesor, mai mulți parametri pot fi transferați în acest fel.
  • O altă modalitate de a transmite date către o subrutină este prin memorie.