Concetti Chiave
- Un sottoprogramma viene eseguito tramite un'istruzione di chiamata che interrompe temporaneamente il programma principale.
- La CPU riprende l'esecuzione del programma principale dopo aver completato il sottoprogramma, continuando dall'istruzione successiva a quella di chiamata.
- L'allocazione dinamica gestisce la memoria, caricando il sottoprogramma al momento della chiamata e liberandola al termine.
- La pila dei record di attivazione, o stack, consente alla CPU di ricordare da quale istruzione riprendere l'esecuzione.
- La pila funziona secondo il principio LIFO, dove l'ultimo dato inserito è il primo a essere estratto.
Eseguire un sottoprogramma
Per eseguire un sottoprogramma è necessario utilizzare un’apposita istruzione di chiamata al sottoprogramma, prevista da tutti i linguaggi di programmazione.
Quando la CPU incontra un’istruzione di chiamata, interrompe temporaneamente l’elaborazione del programma chiamante e comincia a eseguire il sottoprogramma chiamato. Una volta terminata l’esecuzione del sottoprogramma, la CPU riprende l’esecuzione del programma, ripartendo dall'istruzione successiva a quella di chiamata.
Bisogna ricordare che il sottoprogramma viene caricato in memoria al momento della chiamata e, terminata l’esecuzione, viene rilasciato, liberando la memoria occupata.
Per potersi ricordare da quale istruzione si deve riprendere l’esecuzione in seguito a un sottoprogramma, la CPU utilizza un’apposita struttura che si chiama pila dei record di attivazione. La pila, definita anche stack, è una tipo particolare di struttura all'interno di cui i dati possono essere inseriti o estratti solo mediante un’estremità che viene chiamata testa della pila.
Questa caratteristica permette l’estrazione dei dati nell'ordine inverso in cui sono stati inseriti: l’ultimo dato inserito sarà il primo a uscire. Per questo motivo, la pila è conosciuta anche come struttura LIFO.
Quando la CPU esegue un’istruzione di chiamata, utilizza i dati contenuti nel record di attivazione relativo, mentre quando esegue un’istruzione FINE, utilizza la pila delle attivazioni per estrarre l’indirizzo dell’istruzione da cui riprendere l’esecuzione del sottoprogramma chiamante.