Heap allocation e garbage collector di Oberon Algoritmo Quick Fit e garbage collector mark and sweep.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Puntatori e gestione dinamica della RAM
Problema dellordinamento Input: Sequenza di n numeri Output: Permutazione π = tale che: a 1 a 2 …… a n Subroutine in molti problemi E possibile effettuare.
Gestione della memoria centrale
Puntatori in C e C++.
Estendere i linguaggi: i tipi di dato astratti
Unità D2 Archivi e file.
Strutture dati lineari
Universita di Camerino
File System Cos’è un File System File e Directory
Generazione di Codice Intermedio
Algoritmi e Programmazione
Massa Laura Mela Enrica
Gestione della Memoria
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Chiamate a Procedure. Per lesecuzione di una procedura, un programma deve eseguire i seguenti sei passi: mettere i parametri in un posto dove la procedura.
Lez. 71 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Gestione Dinamica.
Realizzazione del file system
Realizzazione del file system
Algoritmi in C++ (1) da completare
Alberi binari di ricerca
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
La valutazione delle espressioni
File.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Allocazione dinamica della memoria
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
eliana minicozzi linguaggi1a.a lezione2
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
Fondamenti di Informatica1 Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni.
Le funzioni a tempo di esecuzione
Dall’algoritmo al programma.
Tavole dinamiche Spesso non si sa a priori quanta memoria serve per memorizzare dei dati in un array, in una tavola hash, in un heap, ecc. Può capitare.
Array a un dimensione : vettori
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
IL MASSIMO DI UN ARRAY ESERCIZIO
Complessità di un algoritmo
Memoria La memoria è un vettore di stringhe di bit (word/parole) In memoria è allocato il Sistema Operativo. In memoria sono allocati i programmi per poter.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1. 2 Variabili statiche e dinamiche Un programma è un processo in esecuzione a cui il sistema operativo assegna una certa zona di memoria. Tale zona può.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
Introduzione a Javascript
1 Gestione della Memoria. 2 Idealmente la memoria dovrebbe essere –grande –veloce –non volatile Gerarchia di memorie –Disco: capiente, lento, non volatile.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allievi Elettrici - AA Le funzioni ricorsive in C
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Gestione della Memoria
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
1 Macchine astratte, linguaggi, interpretazione, compilazione.
1 Gestione dinamica della memoria a heap (nel linguaggio orientato ad oggetti)
1 1. Introduzione alla gestione della memoria 2. Swapping 3. Memoria virtuale 4. Implementazione 5. Algoritmi di sostituzione Gestione della Memoria.
GLI ALGORITMI DI ORDINAMENTO
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

Heap allocation e garbage collector di Oberon Algoritmo Quick Fit e garbage collector mark and sweep

Introduzione[1] Lallocazione dinamica della memoria è una delle maggiori cause di rallentamento nellesecuzione di un programma Serve un algoritmo in grado di allocare memoria il più velocemente possibile

Introduzione[2] Tenendo conto che il 10% del codice è responsabile al 90% del tempo di esecuzione di un programma É stato sviluppato un algoritmo di allocazione denominato Quick Fit in grado di surclassare i precedenti algoritmi in uso. Con questo algoritmo la maggior parte dei casi di allocazione della memoria è gestita rapidamente

Quick Fit Le idee di base dietro a questo algoritmo sono semplici: In un linguaggio di programmazione ci sono generalmente solo pochi tipi puntatore Le allocazioni più frequenti sono di tipi relativamente piccoli, con un numero fisso di quantità di memoria da allocare (es. record con pochi campi)

Strutture dati dellalgoritmo[1] Lo schema basilare per un algoritmo di tipo Quick Fit prevede la divisione della memoria in due parti logiche: Memoria correntemente allocata o allocata in passato (Working Storage) Memoria che non è mai stata allocata (Tail)

Strutture dati dellalgoritmo[2] Più precisamente il working storage è composto da: Un array di Quick Lists, una per ogni blocco di una certa dimensione (indice), compresa tra minSize e maxSize (dimensioni da scegliere per coprire la maggior parte delle richieste di allocazione del programma). Ogni elemento dellarray può essere o vuoto o contenere un puntatore a una lista di blocchi liberi di grandezza pari al suo indice. Una lista (Misc List) che contiene i blocchi liberi di grandezza o inferiore a minSize o superiore a maxSize

Schema dellalgoritmo[1] Quando il programma effettua la richiesta di un blocco di dimensione compresa tra minSize e maxSize e la quick list relativa non è vuota viene tolto il primo blocco libero dalla lista e il suo indirizzo è passato al programma Se la richiesta può essere assolta usando tail senza estendere lo spazio degli indirizzi, al programma viene passato lindirizzo di tail e linizio di tail viene spostato in avanti della grandezza richiesta Altrimenti viene usata una tecnica molto più complicata che non vedremo

Schema dellalgoritmo[2] La deallocazione è ancora più semplice Se la grandezza della memoria da deallocare è coperta da una Quick List, la memoria viene linkata ad essa Altrimenti viene messa nella Misc List

Osservazioni Nella maggior parte dei casi lallocazione consiste in un confronto, nel trovare la quick list corrispondente, vedere se la quick list corrispondente non è vuota e in un delinking. Quando una quick list è vuota viene allocato spazio da tail, solo raramente è necessaria una strategia più complicata e inefficiente Con lalgoritmo Quick Fit abbiamo una allocazione/deallocazione di blocchi di memoria che probabilmente saranno riutilizzati

Garbage collection Il garbage collector di Oberon

Introduzione[1] La deallocazione deve essere fatta dal programmatore prima che le variabili puntatore siano irrangiungibili In caso di mancata deallocazione si creano le cosiddette dangling reference o dangling pointer e cioè resta della memoria nello heap che non è più utilizzabile dallalgoritmo di allocazione

Introduzione[2] È quindi necessaria la presenza di un oggetto in grado di trovare queste aree di memoria e liberarle Questoggetto si chiama garbage collector Deve inoltre occupare ed utilizzare la minor quantità di memoria possibile, poiché deve essere attivato quando essa sta per finire

Garbage collector[1] In Oberon ne è stato implementato uno di tipo mark-and-sweep Lavora in due fasi: Nella prima (mark) vengono marcati tutti gli oggetti che sono raggiungibili dal programma attraverso i puntatori Nella seconda tutti gli oggetti non marcati vengono dichiarati liberi

Garbage collector[2] Nella prima fase il g.c. deve poter riuscire a raggiungere tutti i puntatori che sono utilizzati nel programma È necessario, quindi, che ogni record abbia un puntatore (ad es. di nome tag) ad un record nascosto che conterrà un campo size (la grandezza del record) e un campo ptable (array) composto dagli offset che descrivono la posizione dei puntatori allinterno del record Questa struttura dati viene chiamata type descriptor

Fase di mark Si usa un procedura che prende in input un indirizzo Da questo indirizzo utilizzando il type descriptor si risale a tutti i suoi puntatori (in modo ricorsivo). In realtà per minimizzare luso di memoria viene utilizzato uno pseudo-stack Viene tenuta una variabile come stack pointer che punta alloggetto che contiene il predecessore corrente e il predecessore di ogni record viene memorizzato in un campo puntatore del record stesso Tutti i puntatori raggiunti vengono marcati

Fase di sweep Innanzitutto tutte le Quick List e la Misc List vengono svuotate Lintero heap è attraversato sequenzialmente. Se un blocco di memoria era stato marcato nella fase precedente viene semplicemente smarcato Se un blocco non era stato marcato nella fase precedente allora viene inserito nella corrispondente Quick List (Small Blocks) o nella Misc List (Large Blocks) a seconda delle sue dimensioni. Se ci sono blocchi liberi consecutivi vengono considerati come un blocco unico

Bibliografia Quick Fit: An Efficient Algorithm for Heap Storage Allocation – Charles B. Weinstock, William A. Wulf An Integrated Heap Allocator/Garbage Collector – Beat Heeb, Cuno Pfister