Gestion dynamique de la mémoire

Documents pareils
Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université

L exclusion mutuelle distribuée

Gestion hybride de la mémoire dynamique dans les systèmes Java temps-réel

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Licence Sciences et Technologies Examen janvier 2010

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Introduction au langage C

Introduction aux Machines Virtuelles avec VMKit

Conventions d écriture et outils de mise au point

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Structure fonctionnelle d un SGBD

Représentation d un entier en base b

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Génie Logiciel avec Ada. 4 février 2013

Présentation du PL/SQL

Le langage C. Séance n 4

TP3 : Manipulation et implantation de systèmes de fichiers 1

Cours d initiation à la programmation en C++ Johann Cuenin

Java - la plateforme

Machines Virtuelles. et bazard autour. Rémi Forax

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Les arbres binaires de recherche

TP 1. Prise en main du langage Python

as Architecture des Systèmes d Information

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

TD3: tableaux avancées, première classe et chaînes

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Organigramme / Algorigramme Dossier élève 1 SI

1 Recherche en table par balayage

Architecture des ordinateurs

Bases de programmation. Cours 5. Structurer les données

ASR1 TD7 : Un microprocesseur RISC 16 bits

Introduction aux SGBDR

4 Exemples de problèmes MapReduce incrémentaux

Par combien de zéros se termine N!?

Partie 7 : Gestion de la mémoire

Plan du cours. Historique du langage Nouveautés de Java 7

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Métriques de performance pour les algorithmes et programmes parallèles

Programmation C++ (débutant)/instructions for, while et do...while

Les structures de données. Rajae El Ouazzani

Plus courts chemins, programmation dynamique

Création d objet imbriqué sous PowerShell.

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Base de connaissances

TP11 - Administration/Tuning

Java Licence Professionnelle CISII,

MegaStore Manager ... Simulation de gestion d un hypermarché. Manuel du Participant

Intelligence Artificielle Planification

Algorithmique et Programmation, IMA

Règlement sur l archivage au Tribunal administratif fédéral

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Systemes d'exploitation des ordinateurs

V- Manipulations de nombres en binaire

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université


SYSTÈME DE GESTION DE FICHIERS

Rappels Entrées -Sorties

Avira System Speedup. Guide

Initiation à la programmation en Python

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

LES TYPES DE DONNÉES DU LANGAGE PASCAL

SGM. Master S.T.S. mention informatique, première année. Isabelle Puaut. Septembre Université de Rennes I - IRISA

Ordonnancement temps réel

Activité 4. Tour de cartes Détection et correction des erreurs. Résumé. Liens pédagogiques. Compétences. Âge. Matériels

NOTIONS DE RESEAUX INFORMATIQUES

Introduction à MATLAB R

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Installation Client (licence réseau) de IBM SPSS Modeler 14.2

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Conditions : stage indemnisé, aide au logement possible, transport CEA en Ile-de-France gratuit.

Corrigé des exercices sur les références

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Théorie et codage de l information

Console IAP Manuel d utilisation

Introduction à l étude des Corps Finis

Programmation avec des objets : Cours 7. Menu du jour

Fiche technique rue de Londres Paris Tél. : Mail : contact@omnikles.com

Programmation système en C/C++

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.

Ne laissez pas le stockage cloud pénaliser votre retour sur investissement

Sécurité d IPv6. Sécurité d IPv6. Stéphane Bortzmeyer AFNIC bortzmeyer@nic.fr. Stéphane Bortzmeyer AFNIC bortzmeyer@nic.fr

26 Centre de Sécurité et de

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Initiation à l algorithmique

PROJET 1 : BASE DE DONNÉES REPARTIES

Transcription:

Gestion dynamique de la mémoire Martin Odersky 6 février 2006 version 1.1 Gestion dynamique de la mémoire Martin Odersky 1 de 19

Plan du cours 1 Mémoire dynamique 2 3 Gestion dynamique de la mémoire Martin Odersky 2 de 19

Mémoire dynamique La plupart des langages allouent sur le tas les données qui : Exemple ne sont pas copiées lorsqu on les réassigne ou passe en paramètre, vivent plus longtemps que la fonction qui les a créées. En Zwei, une liste peut vivre plus longtemps que la méthode qui l a créée : on la place donc sur le tas. Le système d exécution (runtime system) : alloue des données sur le tas, régénère la mémoire des données qui ne sont plus utilisées. C est un ensemble de méthodes (parfois parallèles) qui sont intégrées à chaque programme exécuté. Gestion dynamique de la mémoire Martin Odersky 3 de 19

Allocation et dé-allocation d objets L idée de base est la suivante : Le système garde une liste de blocs mémoire inutilisés (free list). Les données sont alloués dans un bloc suffisamment grand que l on trouve et supprime dans la liste : par ordre d adresse, FIFO, LIFO ou encore aléatoirement, de taille suffisante, minimale, standard minimale, etc. Si aucun bloc n est trouvé, on annule le programme ou on augmente la taille du tas. Si l entier du bloc n est pas utilisé, on retourne le sous-bloc restant dans la liste. La mémoire de données dé-alloué retourne dans la liste. On rattache les blocs contigus pour en créer de plus gros. Gestion dynamique de la mémoire Martin Odersky 4 de 19

Problèmes d allocation et de dé-allocation Chercher dans la liste est coûteux (en terme de temps). Gérer l état de la liste (entrer et sortir les blocs) est coûteux. La mémoire se fragmente, c est-à-dire que la taille d un bloc de données que l on peut allouer devient inférieure à la taille de la mémoire réellement disponible. On parle de fragmentation : interne lorsque le gaspillage est dû à l utilisation de blocs plus volumineux que les données qu ils contiennent. externe lorsque le gaspillage est dû à une organisation spatiale déficiente des blocs occupés ne laissant plus que des petits blocs libres entre eux. Gestion dynamique de la mémoire Martin Odersky 5 de 19

On mesure la fragmentation comme : mémoire requise sur le tas taille des données allouées Le meilleur moyen d optimiser ce chiffre dépend beaucoup de la répartition des tailles des objets : En 1968, D. Knuth, se basant sur un modèle synthétique des besoins d allocation, avance l idée que prendre le meilleur bloc n est pas favorable. Des mesures récentes sur de vraies applications montrent que : prendre le meilleur bloc est clairement supérieur. prendre le meilleur bloc en ordre d adresse ou FIFO fragmente le moins. c est aussi la technique de recherche dans la liste la plus lente. Un tas fragmenté peut être compacté en déplaçant des blocs, ce qui est coûteux. Gestion dynamique de la mémoire Martin Odersky 6 de 19

Défauts de la dé-allocation manuelle L allocation de mémoire traditionnelle (manuelle) est difficile : Si un objet est dé-alloué trop tôt, les références pointeront vers des données aléatoires (dangling pointers). Si un objet est dé-alloué trop tard ou pas du tout, le tas devient trop volumineux (space leaks). Environ la moitié du temps passé à déverminer un programme C++ est imputable à des erreurs de gestion de la mémoire. Purify ou CenterLine aident à détecter ces problèmes. La dé-allocation manuelle restreint les librairies : Il n est pas possible d allouer des valeurs générales sur le tas car il faut toujours garder un pointeur pour la dé-allocation. Comparez les chaînes de caractères en C/C++ et en Scala. La dé-allocation manuelle n est pas sûre. Gestion dynamique de la mémoire Martin Odersky 7 de 19

Le glanage de cellules ou GC (garbage collection) permet de régénérer automatiquement l espace mémoire inutilisé. Un espace est considéré inutilisé s il n est pas atteignable. Un objet est atteignable si un chemin y mène. Un chemin est une séquence de références débutant par une référence globale ou une référence sur la pile et suivie ou non par des sélections de champ ou d élément. Il existe trois familles principales de GC : 1 Par comptage de références 2 Par marquage balayage 3 Par copie Gestion dynamique de la mémoire Martin Odersky 8 de 19

Le comptage de références (reference counting) fonctionne de la manière suivante. Chaque bloc sur le tas contient un champ refcount qui indique le nombre de références vers cet objet. A la création du bloc, refcount vaut zéro. Pour chaque affectation x = y, on exécute : if (x!= null) x.refcount = x.refcount - 1; if (y!= null) y.refcount = y.refcount + 1; Chaque fois qu un pointeur non nul est dé-alloué de la pile, on réduit aussi son refcount. Lorsque refcount vaut zéro pour un bloc, on dé-alloue ce bloc et régénère la mémoire utilisée. Pour toutes les références d un bloc dé-alloué, refcount est réduit ; ceci peut amener à des dé-allocations supplémentaires. Gestion dynamique de la mémoire Martin Odersky 9 de 19

Le : est facile à implanter; peut être utilisé sans support externe ou grâce à des classes spéciales («smart pointers» de C++); régénère immédiatement la mémoire ; Ce qui implique une meilleure localité des données du tas. Mais aussi : est cher dans le cas des opérations simples sur les pointeurs. requiert des données additionnelles dans chaque bloc. Les références cycliques ne sont pas dé-allouées (ce qui est le plus grave). Gestion dynamique de la mémoire Martin Odersky 10 de 19

Le marquage balayage (mark & sweep) se fait en deux phases : 1 Le marquage : en partant des variables globales et de la pile (les racines), on suit tous les chemins et on marque tous les objets comme visités (en posant un bit dans le descripteur). 2 Le balayage : on traverse linéairement la mémoire et on régénère tous les objets qui n ont pas été marqués. Problème : Lors de la visite des chemins, on doit se souvenir où aller ensuite (par récursion ou en maintenant une pile). Si un chemin est long, ces données peuvent être conséquentes. Solution : On garde l adresse de retour directement dans les objets visités, par exemple en utilisant la rotation de pointeur. Gestion dynamique de la mémoire Martin Odersky 11 de 19

Le : peut dé-allouer les références cycliques ; est relativement simple à implanter; consomme peu d espace additionnel. Mais aussi : La fragmentation devient vite problématique. L allocation depuis une liste peut être coûteuse. Gestion dynamique de la mémoire Martin Odersky 12 de 19

La copie fonctionne de la manière suivante. Le tas est séparé en deux espaces. Les objets sont alloués linéairement dans un espace. Quand un espace est plein, on copie tous les objets atteignables dans l autre espace. Gestion dynamique de la mémoire Martin Odersky 13 de 19

Algorithme : scan = free = Start of To-Space for R in Roots: R = copy(r) while scan < free: for f in fields(object at scan): scan.f = copy(scan.f) scan = scan + size(scan) copy(p) = if P.forward!= null: return P.forward else copy size(p) bytes from P to free P.forward = free free = free + size(p) return P.forward Gestion dynamique de la mémoire Martin Odersky 14 de 19

Le : peut dé-allouer les références cycliques ; est très simple à implanter; permet des allocations extrêmement rapides : Il suffit d accroître le pointeur de tas et de tester la limite. On peut même le faire en-ligne. La compactage est automatique. Mais aussi : Requiert deux fois plus de mémoire car deux espaces sont requis. La localité des données est catastrophique si l espace est plus grand que l antémémoire. Gestion dynamique de la mémoire Martin Odersky 15 de 19

Glanage par génération Problème : Glaner l entier du tas est long. On observe que la plupart des objets meurent jeunes. C est-à-dire que plus un objet vit longtemps, plus il est probable qu il survivra au prochain glanage. Glaner les objets jeunes est donc le plus profitable. Solution : Garder les objets jeunes dans un petit espace dédié qui sera glané plus souvent : Le glanage est plus rapide et il libère proportionnellement plus de place. Gestion dynamique de la mémoire Martin Odersky 16 de 19

Pour implanter le GC par génération, on remplace les deux espaces du glanage par copie par n espaces, où n est le nombre de générations. 1 On collecte la génération la plus jeune de l espace 0 vers l espace 1. 2 Si cela réussit, le GC est terminé : nous avons obtenu de l espace. 3 Sinon, si l espace 1 se remplit lors de la collecte, on copie ses données dans l espace 2. 4 Etc. Attention : Pour éviter de devoir chercher les références dans l entier du tas, on stocke les références de génération plus ancienne vers génération plus jeune. Gestion dynamique de la mémoire Martin Odersky 17 de 19

Glaneurs de cellules : aujourd hui Pour les ordinateurs personnels ou les serveurs, les glaneurs de cellules les plus performants utilisent la copie multi-générationnelle. La taille de la génération la plus jeune est suffisamment réduite pour tenir dans l antémémoire. Les générations les plus anciennes (et les plus grandes) sont souvent subdivisées afin d en améliorer la localité et réduire les temps de pause (algorithme évolutif) Pour les systèmes embarqués qui ont des contraintes de mémoire plus fortes, on utilise en général un glaneur par marquage balayage. Gestion dynamique de la mémoire Martin Odersky 18 de 19

Glaneurs de cellules : demain Les techniques de glanage de cellules sont un domaine de recherche encore actif aujourd hui. On étudie les glaneurs : Concurrents ou comment procéder au glanage simultanément à l exécution d un programme qui alloue et modifie de la mémoire dans le tas? C est tout particulièrement important avec les processeurs multi-coeurs modernes. Temps-réel ou comment réduire et prédire les temps d arrêt causés par le glanage pour le rendre compatible avec des systèmes temps-réel? Distribués ou comment passer des références entre systèmes avec des performances acceptables? Gestion dynamique de la mémoire Martin Odersky 19 de 19