Gestione della memoria

Documenti analoghi
Ges$one della memoria

Programmazione Orientata agli Oggetti in Linguaggio Java

Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

Oggetti Lezione 3. aspetti generali e definizione di classi I

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Allocazione dinamica della memoria - riepilogo

Tipi di Dato Ricorsivi

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

strutturare dati e codice

Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, Dipartimento di Informatica Università degli Studi di Bari

Informatica Teorica. Macchine a registri

Naming nei Sistemi Distribuiti

Naming nei Sistemi Distribuiti

3. Terza esercitazione autoguidata: progetto gestione voli

INFORMATICA 1 L. Mezzalira

La gestione della memoria

Ingegneria del Software

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

FONDAMENTI di INFORMATICA L. Mezzalira

Organizzazione della lezione. 15. Java Remote Method Invocation (3) Lo schema del Factory Design Pattern - 1. Factory design pattern

Ricorsione. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona.

Riferimenti ed Oggetti

Gestione delle eccezioni in Java

Java Virtual Machine

Java Native Interface Appunti

Gestione della Memoria

Il.NET Framework. By Dario Maggiari. L architettura del.net Framework è riassunta, nel complesso, nella figura seguente:

SISTEMI OPERATIVI. Nucleo di un SO. Il Nucleo. Il nucleo di un SO Gestione delle interruzioni Sincronizzazione tra processi Dispatcher. 06.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

dall argomento argomento della malloc()

Java: Compilatore e Interprete

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Sistemi Operativi Il Sistema Operativo Windows (parte 3)

Il memory manager. Gestione della memoria centrale

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

AA Nomi, binding

Corso di Informatica

Sistemi Operativi. 12 LEZIONE REALIZZAZIONE DEL FILE SYSTEM CORSO DI LAUREA TRIENNALE IN INFORMATICA. Sistemi Operativi 2007/08

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Esonero del corso di Programmazione a Oggetti

Processi, Threads e Agenti

PARTE III MACCHINE A REGISTRI

Algoritmi di Ricerca. Esempi di programmi Java

I puntatori e l allocazione dinamica di memoria

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

VARIABILI LOCALI E GLOBALI (ESTERNE)

Cosa è importante: pom.xml Goal Plug-in Repository

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

RUN TIME ENVIRONMENT

Programmazione ad Oggetti. Java Parte I

La Gestione delle risorse Renato Agati

Gestione della memoria. Paginazione Segmentazione Segmentazione con paginazione

interoperabilità fra dispositivi forniti da diversi produttori; superare i problemi legati alla limitazione del numero di risorse.

Tesina per l esame di Sistemi Operativi a cura di Giuseppe Montano. Prof. Aldo Franco Dragoni

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Le command line di Java

Il microprocessore 8086

Informatica Medica C++ Informatica Medica I semestre Docenti: Fabio Solari e Manuela Chessa. Sviluppo di un applicazione eseguibile

costruttori e distruttori

Informatica 3. Informatica 3. LEZIONE 12: Liste. Lezione 12 - Modulo 1. Posizione corrente. Introduzione

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano

Sistemi Operativi. 5 Gestione della memoria

3. La sintassi di Java

Interfaccia del file system

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Esercizi della lezione 5 di Java

Introduzione alle macchine a stati (non definitivo)

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public:

Programmazione ad oggetti

Architettura di un sistema operativo

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Studio empirico delle relazioni tra Garbage Collector, consumi e utilizzo della memoria

Memory Management. Local Storage. Global Storage. Delete esplicite

Laboratorio di Basi di Dati

GESTIONE DEI PROCESSI

Gestione di files Motivazioni

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Corso di Grafica Computazionale

MIPS Instruction Set 2

Le variabili. Olga Scotti

Uso degli oggetti. Un programma Java. è un insieme di oggetti, ognuno istanza di una classe, che si inviano messaggi

1 Automi Cellulari (Rev )

Appunti dei corsi di Programmazione di Rete Sistemi di elaborazione: Reti II

GENERAZIONE PROCESSO FIGLIO (padre attende terminazione del figlio)

1. Spiegare le differenze fra le seguenti modalità di binding degli indirizzi:

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Il simulatore SPIM SPIM

Interfaccia del file system. Fabio Buttussi HCI Lab Dipart. di Matematica ed Informatica Università degli Studi di Udine

Java. Traditional portability (ideal)

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A.

Transcript:

Garbage collection Gestione della memoria Static area dimensione fissa, contenuti determinati e allocati a compilazione Run-time stack dimensione variabile (record attivazione) gestione sottoprogrammi Heap dimensione fissa/variabile supporto alla allocazione di oggetti e strutture dati dinamiche malloc in C, new in Java 2

Allocazione statica Entità che ha un indirizzo assoluto che è mantenuto per tutta l esecuzione del programma Solitamente sono allocati staticamente o variabili globali o variabili locali sottoprogrammi (senza ricorsione) o costanti determinabili a tempo di compilazione o tabelle usate dal supporto a run-time (per type checking, garbage collection, ecc.) Spesso usate in zone protette di memoria 3 Allocazione dinamica: pila Per ogni istanza di un sottoprogramma a run-time abbiamo un record di attivazione contenente le informazioni relative a tale istanza Analogamente, ogni blocco ha un suo record di attivazione (più semplice) Anche in un linguaggio senza ricorsione può essere utile usare la pila per risparmiare memoria... 4 2

Allocazione dinamica con heap Heap: regione di memoria i cui blocchi di memoria possono essere allocati e deallocati in momenti arbitrari Necessario quando il linguaggio permette o allocazione esplicita di memoria a run-time o oggetti di dimensioni variabili o oggetti con vita non LIFO La gestione dello heap non è banale o gestione efficiente dello spazio: frammentazione o velocità di accesso 5 Garbage Heap (Java) public class Strings { public static void test () { StringBuffer sb = new StringBuffer ("hello"); } Stack Heap static public void main (String args[]) { while (true) test (); } } 6 3

Gestione memoria heap Esempio (da OCAML) let rec append x y = if x = [] then y else hd x :: append (tl x) y let rec rev ls = if ls = [] then [] else append (rev (tl ls)) [hd ls] Assumiamo che length(ls) = 0, cosa succede quando rev(ls) è invocata? 7 Heap: blocchi di dimensione fissa Heap suddiviso in blocchi di dimensione fissa (abbastanza limitata). Inizialmente: tutti i blocchi collegati nella lista libera 8 4

Heap: blocchi di dimensione fissa Allocazione di uno o più blocchi contigui Deallocazione: restituzione alla lista libera 9 Gestione della lista libera Inizialmente un solo blocco, della dimensione dello heap Ad ogni richiesta di allocazione cerca blocco di dimensione opportuna o first fit: primo blocco grande abbastanza o best fit: quello di dimensione più piccola, grande abbastanza Se il blocco scelto è molto più grande di quello che serve viene diviso in due e la parte inutilizzata è aggiunta alla LL Quando un blocco è de-allocato, viene restituito alla LL (se un blocco adiacente è libero i due blocchi sono ``fusi in un unico blocco) 0 5

Heap: blocchi di dimensione variabile Inizialmente unico blocco nello heap Allocazione: determinazione di un blocco libero della dimensione opportuna Deallocazione: restituzione alla lista libera Problemi: o le operazioni devono essere efficienti o evitare lo spreco di memoria üframmentazione interna üframmentazione esterna Frammentazione Frammentazione interna o lo spazio richiesto è X o viene allocato un blocco di dimensione Y > X o lo spazio Y-X è sprecato Frammentazione esterna o ci sarebbe lo spazio necessario ma è inusabile perché suddiviso in pezzi troppo piccoli 2 6

Gestione heap First fit o Best fit? Solita situazione conflittuale First fit: più veloce, occupazione memoria peggiore Best fit: più lento, occupazione memoria migliore Con unica LL costo allocazione lineare nel numero di blocchi liberi Per migliorare liste libere multiple: la ripartizione dei blocchi fra le varie liste può essere statica dinamica 3 Problema: identificazione dei blocchi da de-allocare Nella LL vanno reinseriti i blocchi da de-allocare Come vengono individuati? linguaggi con de-allocazione esplicita (tipo free): se p punta a struttura dati, free p de-alloca la memoria che contiene la struttura linguaggi senza de-allocazione esplicita: una porzione di memoria è recuperabile se non è più raggiungibile in nessun modo Il primo meccanismo è più semplice, ma lascia la responsabilità al programmatore, e può causare errori (dangling pointer) Il secondo meccanismo richiede un opportuno modello della memoria per definire raggiungibilità 4 7

Modello a grafo della memoria È necessario determinare il set, cioè l insieme dei dati sicuramente attivi Java set = variabili statiche + variabile allocate sul run-time stack Per ogni struttura dati allocata (nello stack e nello heap) occorre sapere dove ci possono essere puntatori a elementi dello heap (informazione presente nei type descriptor) Reachable active data: la chiusura transitiva del grafo a partire dalle radici, cioè tutti i dati raggiungibili anche indirettamente dal set seguendo i puntatori 5 Celle, liveness, blocchi e garbage Cella = blocco di memoria sullo heap Una cella viene detta live se il suo indirizzo è memorizzato in una radice o in una altra cella live o quindi: una cella è live se e solo se appartiene ai Reachable active data Una cella è garbage se non è live Garbage collection (GC): attività di gestione della memoria dinamica consistente nell individuare le celle garbage (o il garbage ) e renderle riutilizzabili, per es. inserendole nella Lista Libera 6 8

Garbage e dangling reference class node { int value; node next; } node p, q; p = new node(); q = new node(); q = p; free p; garbage Dangling reference 7 GC: perché è interessante? Applicazioni moderne sembrano non avere limiti allo spazio di memoria 6GB laptop, 32GB desktop, 52GB server spazio di indirizzi a 64-bit Ma l uso scorretto fa emergere problemi come memory leak, dangling reference, null pointer dereferencing, heap fragmentation problemi di interazione con caching e paginazione La gestione della memoria esplicita viola il principio dell astrazione dei linguaggi di programmazione 8 9

GC e astrazioni linguistiche GC non è una astrazione linguistica GC è una componente della macchina virtuale o VM di Lisp, Scheme, Prolog, Smalltalk o VM di C and C++ non lo avevano ma librerie di garbage collection sono state introdotte per C/C++ Sviluppi recenti del GC o linguaggi OO: Java, C# o linguaggi Funzionali: Haskell, F# 9 Il garbage collector perfetto Nessun impatto visibile sull esecuzione dei programmi Opera su ogni tipo di programma e su ogni tipo di struttura dati dinamica (esempio: strutture cicliche) Individua il garbage (e solamente il garbage) in modo efficiente e veloce Nessun overhead sulla gestione della memoria complessiva (caching e paginazione) Gestione heap efficiente (nessun problema di frammentazione) 20 0

Quali sono le tecniche di GC? Reference counting Contatori di riferimento gestione diretta delle celle live la gestione è associata alla fase di allocazione della memoria dinamica non ha bisogno di determinare la memoria garbage Tracing: identifica le celle che sono diventate garbage mark-sweep copy collection Tecnica up-to-date: generational GC 2 Reference counting Aggiungere un contatore di riferimenti alla celle (numero di cammini di accesso attivi verso la cella) Overhead di gestione spazio per i contatori di riferimento operazioni che modificano i puntatori richiedono incremento o decremento del valore del contatore. gestione real-time Unix (file system) usa la tecnica dei reference count per la gestione dei file Java per la Remote Method Invocation (RMI) C++ smart pointer 22

Reference counting Integer i = new Integer(0); o RC (i) =. j = k; (j, k riferiscono a oggetti) o RC(j) --. o RC(k) ++. 23 Reference counting: esempio Heap space set 2 2 24 2

Reference counting: caratteristiche Incrementale o la gestione della memoria è amalgamata direttamente con le operazioni delle primitive linguistiche Facile da implementare Coesiste con la gestione della memoria esplicita da programma (esempio malloc e free) Riuso delle celle libere immediato o if (RC == 0) then <restituire la cella alla lista libera> 25 Reference counting: limitazioni Overhead spazio tempo o spazio per il contatore o la modifica di un puntatore richiede diverse operazioni Mancata esecuzione di una operazione sul valore di RC può generare garbage Non permette di gestire strutture dati con cicli interni 26 3

Reference counting: cicli Heap space set 2 memory leak 27 mark-sweep Ogni cella prevede spazio per un bit di marcatura Garbage può essere generato dal programma (non sono previsti interventi preventivi) L attivazione del GC causa la sospensione del programma in esecuzione Marking si parte dal set e si marcano le celle live Sweep tutte le celle non marcate sono garbage e sono restituite alla lista libera. reset del bit di marcatura sulle celle live 28 4

mark-sweep () Heap space set 29 mark-sweep (2) Heap space set 30 5

mark-sweep (3) Heap space set 3 mark-sweep (4) Heap space set garbage celle marcate 32 6

mark-sweep: valutazione Opera correttamente sulle strutture circolari (+) Nessun overhead di spazio (+) Sospensione dell esecuzione (-) Non interviene sulla frammentazione dello heap (-) 33 Copying collection L Algoritmo di Cheney è un algoritmo di garbage collection che opera suddividendo la memoria heap in due parti from-space e to-space Solamente una delle due parti dello heap è attiva (permette pertanto di allocare nuove celle) Quando viene attivato il garbage collector, le celle live vengono copiate nella seconda porzione dello heap (quella non attiva) alla fine della operazione di copia i ruoli tra le due parti delle heap vengono scambiati (la parte non attiva diventa attiva e viceversa) Le celle nella parte non attiva vengono restituite alla lista libera in un unico blocco evitando problemi di frammentazione 34 7

Esempio from-space A pointer forwarding address B C D to-space A B C D 35 Scambio dei ruoli to-space pointer forwarding address from-space A B C D 36 8

Copying collector: valutazione È efficace nella allocazione di porzioni di spazio di dimensioni differenti e evita problemi di frammentazione Caratteristica negativa: duplicazione dello heap o dati sperimentali dicono che funziona molto bene su architetture hardware a 64-bit 37 Generational Garbage Collection Osservazione di base o most cells that die, die young (ad esempio a causa delle regole di scope dei blocchi) Si divide lo heap in un insieme di generazioni Il garbage collector opera sulle generazioni più giovani 38 9

Esempio () set A C D Young B E F Old G 39 Esempio (2) set C D Young E A F Old G B 40 20

Copying + generazioni set... From-space To-space Youngest Middle generation(s) Oldest From-space To-space 4 GC nella pratica Sun/Oracle Hotspot JVM GC con tre generazioni (0,, 2) Gen. copy collection Gen. 2 mark-sweep con meccanismi per evitare la frammentazione Microsoft.NET GC con tre generazioni (0,, 2) Gen. 2 mark-sweep (non sempre compatta i blocchi sullo heap) 42 2