Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First...

24
Corso di Laboratorio di Informatica Ingegneria Clinica – BCLR Unità 5 Gestione della memoria Domenico Daniele Bloisi

Transcript of Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First...

Page 1: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Corso di Laboratorio di InformaticaIngegneria Clinica – BCLR

Unità 5

Gestione della memoria

Domenico Daniele Bloisi

Page 2: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Docente

Ing. Domenico Daniele Bloisi, PhDRicercatore

Dipartimento di Ingegneria Informatica, Automaticae Gestionale “Antonio Ruberti”Via Ariosto 25(adiacente Piazza Dante,

fermate Manzoni, Vittorio Emanuele,

Tram 3 fermata via Labicana)

Email: [email protected]

Home page: http://www.dis.uniroma1.it/~bloisi2013/2014Gestione della memoria

Unità 5Pagina 2

Page 3: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Ricevimento

In aula, subito dopo le lezioni Su appuntamento (tramite invio di una email) presso: Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti, via Ariosto 25 - II piano, stanza A209

Si invitano gli studenti a controllare regolarmente la bacheca degli avvisihttp://www.dis.uniroma1.it/~bloisi/didattica/labinf1314.html#Avvisi

2013/2014Gestione della memoriaUnità 5

Pagina 3

Page 4: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Orari

Lunedì 12.00 – 13.30 Aula 15, via Scarpa 14

Lunedì 14.00 – 17.15Aula 15, Laboratorio Didattico via Tiburtina 205

Martedì 14.00 – 15.30 Aula 16, via Scarpa 14

Mercoledì 12.00 – 13.30 Aula 15, via Scarpa 14

2013/2014Gestione della memoriaUnità 5

Pagina 4

Page 5: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Sommario – Unità 5

• Definizione di funzioni• Passaggio dei parametri• Esecuzione di una funzione• Variabili dichiarate in una funzione: scope• Gestione della memoria• Stack e heap• Pila dei record di attivazione

2013/2014Gestione della memoriaUnità 5

Pagina 5

Page 6: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Gestione della memoria a run-time (1/2)

A tempo di esecuzione, il sistema operativo deve gestire diverse zone di memoria:

• zona testo: contiene il codice eseguibile del programma– determinata a tempo di esecuzione al momento del

caricamento del codice– dimensione fissata per ogni funzione a tempo di

compilazione

• heap: zona di memoria allocata dinamicamente– cresce e decresce dinamicamente durante l’esecuzione– ogni variabile viene allocata e de-allocata indipendentemente

dalle altre

2013/2014Gestione della memoriaUnità 5

Pagina 6

Page 7: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Gestione della memoria a run-time (2/2)

•  zona dati: zona di memoria allocata a tempo di caricamento contenente le variabili globali

• stack o pila dei record di attivazione: zona di memoria per i dati locali alle funzioni (variabili e parametri)

– cresce e descresce dinamicamente durante l’esecuzione– viene gestita con un meccanismo a pila

2013/2014Gestione della memoriaUnità 5

Pagina 7

Page 8: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

IP (Istruction Pointer) o PC (Program Counter)

http://www.itimarconi.ct.it/sezioni/didatticaonline/informatica/lezionidisistemi/terza/modelli_di_memoria.htm

Codice eseguibile del programma

2013/2014Gestione della memoriaUnità 5

Pagina 8

Page 9: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap

stack heap

Stack vs heap

2013/2014Gestione della memoriaUnità 5

Pagina 9

Page 10: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Pila dei record di attivazione

Una pila (o stack) è una struttura dati con accesso LIFO

Last In First Out = l’ultimo entrato è il primo a uscire(Esempio: pila di piatti).

A run-time il sistema operativo gestisce la pila dei record di attivazione (RDA):

• per ogni attivazione di funzione viene creato un nuovo RDA in cima alla pila;

• al termine dell’attivazione della funzione il RDA viene rimosso dalla pila.

2013/2014Gestione della memoriaUnità 5

Pagina 10

Page 11: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Record di attivazione

Un RDA tiene traccia

• delle locazioni di memoria per i parametri formali (se presenti);

• delle locazioni di memoria per le variabili locali (se presenti);

• del valore di ritorno dell’invocazione della funzione (se la funzione ha tipo di ritorno diverso da void);

• della locazione di memoria per l’indirizzo di ritorno, ovvero l’indirizzo della prossima istruzione da eseguire nella funzione chiamante.

PF v1 VL v2 VR v3 IR v4

2013/2014Gestione della memoriaUnità 5

Pagina 11

Page 12: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Esempio di evoluzione della pila dei record di attivazioneint B(int pb) {/* b0 */ printf("In B. Parametro pb = %d\n", pb);/* b1 */ return pb+1;}

int A(int pa) {/* a0 */ printf("In A. Parametro pa = %d\n", pa);/* a1 */ printf("Chiamata di B(%d).\n", pa * 2 );/* a2 */ int va = B(pa * 2);/* a3 */ printf("Di nuovo in A. va = %d\n", va);/* a4 */ return va + pa;}

2013/2014Gestione della memoriaUnità 5

Pagina 12

Page 13: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Esempio di evoluzione della pila dei record di attivazioneint main() {/* m0 */ printf("In main.\n");/* m1 */ int vm = 22;/* m2 */ printf("Chiamata di A(%d).\n", vm);/* m3 */ vm = A(vm);/* m4 */ printf("Di nuovo in main. vm = %d\n", vm);/* m5 */ return 0;}

2013/2014Gestione della memoriaUnità 5

Pagina 13

Page 14: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Output prodotto dal programma

In main.Chiamata di A(22).In A. Parametro pa = 22Chiamata di B(44).In B. Parametro pb = 44Di nuovo in A. va = 45Di nuovo in main. vm = 67

2013/2014Gestione della memoriaUnità 5

Pagina 14

Page 15: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Program counter

Per comprendere cosa avviene durante l’esecuzione del codice, è necessario fare riferimento, oltre che alla pila dei RDA, al program counter (PC), il cui valore è l’indirizzodella prossima istruzione da eseguire.

Si assuma chem0 abbia indirizzo 100a0 abbia indirizzo 200b0 abbia indirizzo 300

2013/2014Gestione della memoriaUnità 5

Pagina 15

Page 16: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Evoluzione della pila dei RDA

Figura 5.1

2013/2014Gestione della memoriaUnità 5

Pagina 16

Page 17: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Prima dell’attivazione di A(vm), la pila dei RDA è come mostrato nella parte 1 della Fig. 5.1:

1. vengono valutati i parametri attuali: in questo caso il parametro attuale è l’espressione vm che ha come valore l’intero 22;

2. viene individuata la funzione da eseguire in base al numero e tipo dei parametri attuali, cercando la definizione di una funzione la cui segnatura sia conforme alla invocazione: nel nostro caso la funzione da eseguire deve avere la segnatura A(int);

3. viene sospesa l’esecuzione della funzione chiamante: nel nostro caso la funzione main;

Evoluzione della pila dei RDA:individuazione e chiamata di A

2013/2014Gestione della memoriaUnità 5

Pagina 17

Page 18: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

4. viene creato il RDA relativo all’attivazione corrente della funzione chiamata: nel nostro caso viene creato il RDA relativo all’attivazione corrente di A; il RDA contiene:

• le locazioni di memoria per i parametri formali: nel nostro caso, il parametro pa di tipo int;• le locazioni di memoria per le variabili locali: nel nostro caso, la variabile va di tipo int;• una locazione di memoria per il valore di ritorno: nel nostro caso indicata con VR;• una locazione di memoria per l’indirizzo di ritorno: nel nostro caso indicata con IR;

5. viene assegnato il valore dei parametri attuali ai parametri formali: nel nostro caso, il parametro formale pa viene inizializzato con il valore 22;

Evoluzione della pila dei RDA:creazione del record di A

2013/2014Gestione della memoriaUnità 5

Pagina 18

Page 19: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Evoluzione della pila dei RDA:modifica valore del PC6. l’indirizzo di ritorno nel RDA viene impostato all’indirizzo della prossima istruzione che deve essere eseguita nella funzione chiamante al termine dell’invocazione: nel nostro caso, l’indirizzo di ritorno nel RDA relativo all’attivazione di A viene impostato al valore 104, che è l’indirizzo dell’istruzione di main corrispondente all’istruzione m4, da eseguire quando l’attivazione di A sarà terminata; a questo punto, la pila dei RDA è come mostrato in 2 nella Fig. 5.1;

7. al program counter viene assegnato l’indirizzo della prima istruzione della funzione invocata: nel nostro caso, al program counter viene assegnato l’indirizzo 200, che è l’indirizzo della prima istruzione di A;

2013/2014Gestione della memoriaUnità 5

Pagina 19

Page 20: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

8. si passa ad eseguire la prossima istruzione indicata dal program counter, che sarà la prima istruzione della funzione invocata: nel nostro caso l’istruzione di indirizzo 200, ovvero la prima istruzione di A.

Dopo questi passi, le istruzioni della funzione chiamata, nel nostro caso di A, vengono eseguite in sequenza. In particolare, avverrà l’attivazione, l’esecuzione e la terminazione di eventuali funzioni a loro volta invocate nella funzione chiamata. Nel nostro caso, avverrà l’attivazione, l’esecuzione e la terminazione della funzione B, con un meccanismo analogo a quello adottato per A; la pila dei RDA passerà attraverso gli stati 3 e 4.

Evoluzione della pila dei RDA:esecuzione di A

2013/2014Gestione della memoriaUnità 5

Pagina 20

Page 21: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Evoluzione della pila dei RDA:terminazione di A

Analizziamo ora in dettaglio cosa avviene al momento della terminazione dell’attivazione di A, cioè quando viene eseguita l’istruzione return va+pa;

Prima dell’esecuzione, la pila dei RDA è come mostrato in 4 nella Fig. 5.1 (in realtà, la zona di memoria predisposta a contenere il valore di ritorno, indicata con VR nella figura, viene inizializzata contestualmente all’esecuzione dell’istruzione return e non prima).

2013/2014Gestione della memoriaUnità 5

Pagina 21

Page 22: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Evoluzione della pila dei RDA:valore di ritorno

1. al program counter viene assegnato il valore memorizzato nella locazione di memoria riservata

all’indirizzo di ritorno nel RDA corrente: nel nostro caso, tale valore è pari a 104, che è proprio l’indirizzo, memorizzato in IR, della prossima istruzione di main che dovrà essere eseguita;

2. nel caso la funzione invocata preveda la restituzione di un valore di ritorno, tale valore viene memorizzato in un’apposita locazione di memoria del RDA corrente: nel nostro caso, il valore 67, risultato della valutazione dell’espressione va+pa viene assegnato alla locazione di memoria indicata con VR, predisposta per contenere il valore di ritorno;

2013/2014Gestione della memoriaUnità 5

Pagina 22

Page 23: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

Evoluzione della pila dei RDA:eliminazione del record

3. viene eliminato dalla pila dei RDA il RDA relativo all’attivazione corrente, e il RDA corrente diviene quello immediatamente precedente nella pila; contestualmente all’eliminazione del RDA dalla pila dei RDA, un eventuale valore di ritorno viene copiato in una locazione di memoria del RDA del chiamante: nel nostro caso, viene eliminato il RDA relativo all’attivazione di A e il RDA corrente diviene quello relativo all’attivazione di main; inoltre, il valore 67, memorizzato nella locazione di memoria VR viene assegnato alla variabile vm nel RDA di main; la pila dei RDA è come mostrato in 5 nella Fig. 5.1;

2013/2014Gestione della memoriaUnità 5

Pagina 23

Page 24: Presentazione di PowerPointbloisi/didattica/ingegneriaClinica... · 2013-11-12 · Last In First Out = l’ultimo entrato è il primo a uscire (Esempio: pila di piatti). A run-time

4. si passa ad eseguire la prossima istruzione indicata dal program counter, cioè quella appena impostata al passo 1: nel nostro caso, si passa ad eseguire l’istruzione di indirizzo 104, che fa riprendere l’esecuzione di main.

Evoluzione della pila dei RDA:prossima istruzione nel PC

2013/2014Gestione della memoriaUnità 5

Pagina 24