logo

Differenza tra ISR e chiamata di funzione

In questo articolo imparerai la differenza tra il ISR E chiamata di funzione , ma prima di discutere le differenze, devi conoscere in breve l'ISR e la chiamata di funzione.

dividere le stringhe c++

Cos'è l'ISR?

Una routine di servizio di interruzione (ISR) è una routine software che l'hardware richiama in risposta a un'interruzione. ISR esamina un interrupt, determina come gestirlo, lo esegue e restituisce un valore di interrupt logico. Se non è richiesta alcuna ulteriore gestione, l'ISR avvisa il kernel con un valore di ritorno. Un ISR deve essere eseguito molto rapidamente per evitare di rallentare il funzionamento del dispositivo e il funzionamento di tutti gli ISR ​​con priorità inferiore.

Sebbene un ISR possa spostare i dati da un registro della CPU o da una porta hardware in un buffer di memoria, in genere si basa su un thread di interruzione dedicato (o attività), chiamato thread del servizio di interruzione (IST), per eseguire la maggior parte dell'elaborazione richiesta. Se è necessaria un'ulteriore elaborazione, l'ISR restituisce un valore di interruzione logico al kernel. Quindi associa un numero di interrupt fisico a un valore di interrupt logico.

Meccanismo di gestione degli interrupt

Di seguito è riportato il meccanismo di gestione degli interrupt nei passaggi seguenti, ad esempio:

  • Un'interruzione è una condizione che fa sì che la CPU sospenda il programma corrente ed esegua un ISR. Un ISR è un programma scritto appositamente per risolvere la condizione che ha causato l'interruzione.
  • Dopo che un'interruzione è stata servita, la CPU ritorna al programma principale, esattamente all'istruzione successiva da cui era rimasta.
  • Nel trasferimento dati basato su interruzione, ogni volta che il dispositivo I/O è pronto per il trasferimento dati, interromperà la CPU. Nell'ISR, la CPU eseguirà il trasferimento dei dati.
  • Questo metodo è migliore del polling perché la CPU non deve perdere tempo nel controllare lo stato del dispositivo I/O. Una tastiera è un buon esempio di accesso I/O basato su interrupt.
  • Invece di controllare la CPU, la tastiera dovrebbe interrompere la CPU quando viene premuto un tasto. In questo modo non si perderà tempo controllando ripetutamente la tastiera quando l'utente non sta digitando.
  • Il dispositivo I/O richiede un'interruzione inviando il file $overline{INTR}$ segnale alla CPU.
  • Ogni volta che la CPU riceve $overline{INTR}$ segnale, completa l'esecuzione dell'istruzione corrente e quindi esegue l'ISR. Quando la CPU è pronta, invia un segnale di riconoscimento attraverso il MENTRE linea.
  • L'ISR viene eseguito e la CPU ritorna al programma principale.
  • I dispositivi I/O spengono il $overline{INTR}$ segnale dopo l'esecuzione.
Differenza tra ISR e chiamata di funzione

Per esempio: Nell'esempio seguente, trasferimento I/O tramite I/O gestito da interrupt.

  • Se un dispositivo I/O che vuole eseguire un trasferimento dati con il processore deve interrompere il processore.
  • Un'interruzione è una condizione che fa sì che il processore esegua una routine di servizio di interruzione.
  • Nell'ISR, il processore eseguirà il trasferimento dei dati con il dispositivo I/O.

In questo esempio, interrompi la richiesta premendo il tasto della tastiera,

  • Invece del processore che controlla se viene premuto un tasto, la tastiera interrompe il processore quando si preme un tasto.
  • Nell'ISR della tastiera, che fa parte del software del driver della tastiera, il processore leggerà i dati dalla tastiera.
Differenza tra ISR e chiamata di funzione

Vantaggi dell'ISR

Di seguito sono riportati i seguenti vantaggi dell'ISR, come ad esempio:

  • Gli eventi asincroni ISR ​​possono verificarsi in qualsiasi momento durante l'esecuzione del programma.
  • ISR salva il PC, i flag e i registri nello stack, disabilita tutti gli interrupt e carica l'indirizzo dell'ISR.
  • ISR non può avere argomenti da trasmettergli.
  • ISR non può restituire valori.
  • ISR abilita gli interrupt.
  • Generalmente, l'ISR è piccolo poiché richiede il tempo di un altro processo.
  • Alcuni ISR ​​hanno il proprio stack.

Cos'è la chiamata di funzione?

Una chiamata di funzione è anche chiamata chiamata di subroutine. Una subroutine è un insieme di istruzioni necessarie ripetutamente al programma. Fa parte di un programma più ampio che è responsabile dello svolgimento di un compito specifico. Il programma più grande può eseguire un carico di lavoro pesante e la subroutine può eseguire solo un compito semplice, che è anche indipendente dalla rimanente codifica del programma.

Una funzione è codificata in modo tale da poter essere chiamata più volte e da luoghi diversi (anche dall'interno di altre funzioni). Quando viene chiamata una funzione, il processore può andare dove risiede il codice della funzione ed eseguire le istruzioni della funzione una per una. Dopo aver completato le funzioni, il processore ritornerà esattamente al punto in cui si era interrotto e continuerà l'esecuzione a partire dall'istruzione successiva.

Le funzioni sono un ottimo strumento per il riutilizzo del codice. Molti linguaggi di programmazione moderni supportano le funzioni. Un insieme di funzioni si chiama a biblioteca . Le librerie sono spesso utilizzate come mezzo per condividere e scambiare software. In alcuni casi, l'intero programma potrebbe essere una sequenza di subroutine.

Nel caso di un processore 8086, una subroutine viene invocata da a CHIAMATA istruzione e ritorni di controllo da a GIUSTO istruzioni. Riduce la dimensione del programma.

contare distinti

Differenza tra ISR e chiamata di funzione

Una funzione deve essere chiamata esplicitamente e fa parte dello stesso contesto e thread di esecuzione del suo chiamante. Un ISR hardware non viene chiamato esplicitamente ma piuttosto invocato da qualche evento esterno. Il contesto del thread corrente viene automaticamente preservato quando viene chiamato un interrupt prima di passare il contesto all'ISR.

In cambio, avviene il cambio di contesto inverso, ripristinando lo stato del processore prima dell'interruzione in modo che l'esecuzione continui dal punto di interruzione. Di seguito sono riportate alcune ulteriori differenze tra ISR e la chiamata di funzione.

ISR Chiamata di funzione
L'interruzione viene solitamente avviata da un microprocessore di segnale interno o esterno anziché dall'esecuzione di istruzioni. L'ISR viene eseguito dopo aver memorizzato lo stato corrente del programma nello stack.
L'ISR esegue compiti diversi a seconda del dispositivo interrotto o delle istruzioni scritte da un programmatore.
La chiamata alla funzione viene richiamata eseguendo istruzioni che eseguono compiti specifici e riducono le dimensioni del programma.
L'hardware determina l'indirizzo dell'ISR.
L'indirizzo ISR viene scritto all'interno della tabella vettoriale degli interrupt e l'indirizzo ISR per ciascun interrupt è fisso.
L'indirizzo della subroutine è scritto all'interno dell'istruzione, che è scritta all'interno del codice del programma principale.
L'ISR viene utilizzato per tutte le attività di uso generale. Le chiamate di funzione vengono effettuate per attività specifiche del programma.
Quando si verifica un'interruzione durante l'esecuzione di un programma corrente, quindi, dopo l'esecuzione dell'istruzione corrente, il processore esegue ISR. Dopo l'esecuzione dell'ISR, il processore deve riprendere il programma esattamente come prima che si verificasse l'interruzione.
Per questo vengono memorizzati il ​​contenuto del PC, i registri µP e alcune condizioni di stato. La raccolta di tutte le condizioni dei bit di stato in un microprocessore è chiamata PSW (parola di stato del programma).
  • Durante il ciclo di interruzione, il contenuto del PC e del PSW viene inserito nello stack. L'indirizzo del ramo per il particolare interrupt viene quindi passato al PC e un nuovo PSW viene caricato nel registro di stato.
  • L'ultima istruzione nell'ISR è il ritorno dall'istruzione interrotta. Quando questa istruzione viene eseguita, il vecchio PSW e l'indirizzo di ritorno vengono estratti dallo stack.
Qui viene memorizzato nello stack solo un PC per ottenere l'indirizzo dell'istruzione successiva nel programma principale.
La subroutine deve avere accesso ai dati dalla subroutine chiamante e restituire i risultati a quella subroutine. Pertanto, vengono eseguiti i parametri della subroutine e il collegamento dei dati.
Questo può essere fatto attraverso
  • Il registro AC può essere utilizzato per un singolo parametro di ingresso e un singolo parametro di uscita. Nei computer con più registri del processore, è possibile passare più parametri in questo modo.
  • Un altro modo per passare i dati a una subroutine è attraverso la memoria.