24
Programmazione II Lezione 7 Daniele Sgandurra [email protected] 9/11/2010 1/24 Programmazione II Lezione 7 9/11/2010

Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra [email protected] 9/11/2010 1/24 Programmazione

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Programmazione IILezione 7

Daniele Sgandurra

[email protected]

9/11/2010

1/24 Programmazione II Lezione 7 9/11/2010

Page 2: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Sommario

1 Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

2/24 Programmazione II Lezione 7 9/11/2010

Page 3: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della Memoria

Parte I

Gestione della Memoria

3/24 Programmazione II Lezione 7 9/11/2010

Page 4: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Obiettivi

Capire la gestione della memoria nella macchina astratta.

Tecniche di gestione della memoria:

gestione statica;gestione dinamica.

Implementazione dell’ambiente e delle regole dello scope.

4/24 Programmazione II Lezione 7 9/11/2010

Page 5: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Gestione della Memoria

Funzionalita dell’interprete associato a una macchina astratta.

Allocazione della memoria per i programmi e i dati:

disposizione in memoria;per quanto tempo;strutture dati ausiliarie.

Macchina astratta di basso livello:

gestione statica: dati e programmi in memoria prima dell’esecuzionee fino alla fine.

Macchina astratta di alto livello:

gestione dinamica: allocazione e deallocazione decisa durantel’esecuzione:

ricorsione: il compilatore non puo stabilire un numero massimodi sottoprogrammi attivi; uso di una pila (politica LIFO).allocazione dinamica esplicita: uso dell’heap.

5/24 Programmazione II Lezione 7 9/11/2010

Page 6: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Gestione Statica della Memoria

Gestione a cura del compilatore.

Tutti gli oggetti in una zona fissata:

variabili globali;istruzioni del codice oggetto;costanti;tabelle interne prodotte dal compilatore:

gestione nomi;controllo sui tipi;garbage collection.

Inoltre, se il linguaggio non prevede ricorsione:

zona di memoria fissata per ogni sottoprogramma:

variabili locali;parametri;indirizzo di ritorno;informazioni di bookkepping (valore registri, debugging, etc).

6/24 Programmazione II Lezione 7 9/11/2010

Page 7: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Linguaggio con Allocazione Statica della Memoria

7/24 Programmazione II Lezione 7 9/11/2010

Page 8: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Gestione Dinamica della Memoria

Per i linguaggi con strutturazione a blocchi dei programmi:

in-line;corpi di sottoprogrammi.

Apertura e chiusura:

politica LIFO: uso di una pila.

Esempio:

1 A :{ i n t a = 1 ;2 i n t b = 0 ;34 B :{ i n t c = 3 ;5 i n t b = 3 ;6 }7 b = a+1;8 }

8/24 Programmazione II Lezione 7 9/11/2010

Page 9: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Esempio (1)

9/24 Programmazione II Lezione 7 9/11/2010

Page 10: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Esempio (2)

10/24 Programmazione II Lezione 7 9/11/2010

Page 11: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Esempio (3)

11/24 Programmazione II Lezione 7 9/11/2010

Page 12: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Record di Attivazione

Record di attivazione (RdA) o frame:

spazio di memoria allocato su pila:

blocchi in-line,corpi di sottoprogramma,associati a ogni attivazione (dinamicamente) e non alladichiarazione (staticamente):

valori salvati nel RdA sempre diversi per ogni chiamata.

Pila di run-time (o di sistema).

Anche per linguaggi senza ricorsione:

conviene per ottimizzare l’occupazione della memoria rispetto a unapolitica interamente di tipo statico.

12/24 Programmazione II Lezione 7 9/11/2010

Page 13: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Record di Attivazione per Blocchi In-Line

Risultati intermedi:

calcoli complessi semplificati dal compilatore.

Variabili locali:

dichiarate nel blocco;dimensioni note a compile-time:

eccezione: dimensione array dinamici gestite tramite (partefissa, parte variabile).

Puntatore catena dinamica:

detto anche link dinamico o di controllo;punta al precedente RdA sulla pila.

necessario date le dimensioni potenzialmente diverse dei RdA.

13/24 Programmazione II Lezione 7 9/11/2010

Page 14: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Record di Attivazione per Blocchi In-Line

14/24 Programmazione II Lezione 7 9/11/2010

Page 15: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Esempio: Spazio per Risultati Intermedi

i n t a = 3 ;b = ( a + x ) / ( x + y ) ;

15/24 Programmazione II Lezione 7 9/11/2010

Page 16: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Record di Attivazione per Procedure

Risultati intermedi, variabili locali, puntatore di catena dinamica.

Puntatore di catena statica:

necessario per le regole di scope statico.

Indirizzo di ritorno:

prima istruzione da eseguire dopo l’uscita.

Indirizzo del risultato:

nel RdA del blocco chiamante;solo nel caso di funzioni.

Parametri:

valore dei parametri effettivi usati dal sottoprogramma.

16/24 Programmazione II Lezione 7 9/11/2010

Page 17: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Record di Attivazione per Procedure

Osservazioni:

la disposizione effettiva dipende dalle implementazioni;

si usano offset per individuare i vari campi:

di norma, non compaiono identificatori di variabili (locali e non);il compilatore calcola gli offset.

possibili ottimizzazioni:

es.: salvataggio di informazioni nei registri anziche nel RdA.

17/24 Programmazione II Lezione 7 9/11/2010

Page 18: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Record di Attivazione per Procedure

18/24 Programmazione II Lezione 7 9/11/2010

Page 19: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Pila dei Recordi di Attivazione

19/24 Programmazione II Lezione 7 9/11/2010

Page 20: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Gestione della Pila

Puntatore di RdA (o frame pointer): si riferisce all’ambiente corrente.

Stack pointer: posizione dell’inizio della memoria libera (puo essereomesso).

Inserimento di un RdA:

entrata in un blocco;chiamata di sottoprogramma.

Eliminazione di un RdA:

uscita dal blocco;uscita da sottoprogramma.

20/24 Programmazione II Lezione 7 9/11/2010

Page 21: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Gestione della Pila

Fatta sia dal chiamante che dal chiamato: frammenti di codice aggiunto dalcompilatore.

Nel chiamante (o blocco esterno):

sequenza di chiamata:

eseguita, in parte, prima della chiamata (entrata);eseguita, in parte, dopo il ritorno dalla chiamata (uscita).

Nel chiamato (o blocco interno):

prologo:

eseguito subito dopo la chiamata (entrata);

epilogo:

eseguito subito prima del ritorno dalla chiamata (uscita).

Preferibilmente, delegare al chiamato: codice aggiunto una sola volta.

21/24 Programmazione II Lezione 7 9/11/2010

Page 22: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Gestione della Pila: Azioni

Chiamata di procedura (sequenza di chiamata + prologo):

modifica del PC;allocazione spazio su pila;modifica puntatore RdA;passaggio parametri;salvataggio registri;esecuzione codice inizializzazione.

Ritorno dalla procedura (ritorno controllo di chiamata + epilogo):

ripristino del PC;restituzione dei valori (funzioni);ripristino registri (+ modifica puntatore RdA);esecuzione codice finalizzazione;deallocazione spazio su pila.

22/24 Programmazione II Lezione 7 9/11/2010

Page 23: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Gestione Dinamica Mediante Heap

Continua...

23/24 Programmazione II Lezione 7 9/11/2010

Page 24: Programmazione II - Lezione 7groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-07.pdf · Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione

Gestione della MemoriaGestione StaticaGestione Dinamica Mediante PilaGestione Dinamica Mediante Heap

Riferimenti

[1] Linguaggi di programmazione: principi e paradigmi (Cap. 5).

Maurizio Gabbrielli, Simone Martini.

24/24 Programmazione II Lezione 7 9/11/2010