Gestion de la mémoire



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

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

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

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

Classes et Objets en Ocaml.

Chapitre 2. Classes et objets

Machines Virtuelles. et bazard autour. Rémi Forax

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

Arbres binaires de recherche

Structure fonctionnelle d un SGBD

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Les structures de données. Rajae El Ouazzani

Conventions d écriture et outils de mise au point

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Les arbres binaires de recherche

Cours 1 : La compilation

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

as Architecture des Systèmes d Information

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Algorithmique, Structures de données et langage C

Université Paris-Dauphine DUMI2E 1ère année, Applications

Représentation d un entier en base b

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Introduction aux SGBDR

Transmission d informations sur le réseau électrique

Licence Sciences et Technologies Examen janvier 2010

Évaluation et implémentation des langages

Cours 1: Java et les objets

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Théorème du point fixe - Théorème de l inversion locale

CAC: Un algorithme d arc-consistance. configurable, générique et adaptatif.

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

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

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

1 Recherche en table par balayage

Généralités sur le Langage Java et éléments syntaxiques.

Gestion mémoire et Représentation intermédiaire

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

Cours de Programmation 2

Compression de Données - Algorithme de Huffman Document de Conception

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

Les algorithmes de base du graphisme

Mémoire de stage de Master 2

VIII- Circuits séquentiels. Mémoires

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Algorithmique et Programmation, IMA

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

Principes des langages de programmation INF 321. Eric Goubault

Un ordonnanceur stupide

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

INF601 : Algorithme et Structure de données

GPA770 Microélectronique appliquée Exercices série A

Initiation à l algorithmique

MIS 102 Initiation à l Informatique

Informatique Générale

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Comment faire pour créer ses propres pages html?

Recherche dans un tableau

Introduction aux Machines Virtuelles avec VMKit

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

ARBRES BINAIRES DE RECHERCHE

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Résolution de systèmes linéaires par des méthodes directes

Bases de données documentaires et distribuées Cours NFE04

Initiation. àl algorithmique et à la programmation. en C

SYSTÈME DE GESTION DE FICHIERS

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

FONCTION COMPTAGE BINAIRE ET DIVISION DE FRÉQUENCE

Probabilités sur un univers fini

Java - la plateforme

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Cours de Master Recherche

IV- Comment fonctionne un ordinateur?

Quatrième partie IV. Test. Test 15 février / 71

IFT785 Approches Orientées Objets. FINAL Été Remise : Jeudi 19 août 2002 à 9h00 am

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Cours d Analyse. Fonctions de plusieurs variables

UE Programmation Impérative Licence 2ème Année

Systemes d'exploitation des ordinateurs

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

Continuité et dérivabilité d une fonction

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Présentation du langage et premières fonctions

Programmer en JAVA. par Tama

Système de Gestion de Fichiers

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Programmation parallèle et distribuée

QUESTION 1 {2 points}

Key-words : Garbage collector, functional language, distributed system.

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

Qualité du logiciel: Méthodes de test

Programmation MacOSX / ios

Cours d algorithmique pour la classe de 2nde

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Transcription:

Gestion de la mémoire ENSIIE : Programmation avancée 1/20

Langages et mémoire Différence principale entre langages de haut niveau : OCaml, Java, C# langages de bas niveau : C, C++ : Gestion de la mémoire ENSIIE : Programmation avancée 2/20

Gestion manuelle de la mémoire Le programmeur doit explicitement allouer et libérer des zones mémoire (malloc, free). Avantages : contrôle fin de la mémoire possibilité de libérer une zone dès qu elle n est plus utile possibilités d optimisation Inconvénients : Source de nombreuses erreurs (segfault!) accès à une zone non allouée ou déjà libérée ; libération d une zone déjà libérée non-libération de zones non utilisées (fuite mémoire) ENSIIE : Programmation avancée 3/20

Gestion automatique de la mémoire L espace mémoire est automatiquement alloué par les constructeurs Il est libéré via l utilisation d un Garbage Collector (ramasse-miette, glanneur de cellules) cherche quels objets ne peuvent plus être utilisés par le programme ; libère l espace mémoire correspondant. Première apparition : LISP (McCarthy, 1959) ENSIIE : Programmation avancée 4/20

Garbage Collector Avantages : le programmeur peut se concentrer sur l algorithmique code plus sûr (pas de segfault) pas (ou peu) de fuite de mémoire Inconvénients : Surcoût en temps et en mémoire Peut bloquer/ralentir le programme Moins de contrôle du moment où la donnée est libérée Le GC peut être amené à changer l emplacement des données en mémoire Deux grandes familles : comptage de références GC traversants ENSIIE : Programmation avancée 5/20

Comptage de références Principe : on associe à chaque zone mémoire un compteur qui indique le nombre de références qui pointent sur elle Incrémente/décrémente ce compteur / changement référence Quand ce compteur atteint 0, la zone n est plus accessible par personne, on peut la libérer 1 1 1 2 1 ENSIIE : Programmation avancée 6/20

Comptage de références Principe : on associe à chaque zone mémoire un compteur qui indique le nombre de références qui pointent sur elle Incrémente/décrémente ce compteur / changement référence Quand ce compteur atteint 0, la zone n est plus accessible par personne, on peut la libérer 1 1 1 1 2 ENSIIE : Programmation avancée 6/20

Comptage de références Principe : on associe à chaque zone mémoire un compteur qui indique le nombre de références qui pointent sur elle Incrémente/décrémente ce compteur / changement référence Quand ce compteur atteint 0, la zone n est plus accessible par personne, on peut la libérer 1 2 1 0 2 ENSIIE : Programmation avancée 6/20

Comptage de références Principe : on associe à chaque zone mémoire un compteur qui indique le nombre de références qui pointent sur elle Incrémente/décrémente ce compteur / changement référence Quand ce compteur atteint 0, la zone n est plus accessible par personne, on peut la libérer 1 2 1 2 ENSIIE : Programmation avancée 6/20

Comptage de références (suite) Avantages : simple conceptuellement libération rapide Inconvénients : surcoût en mémoire (taille du compteur) surcoût en temps (gestion des références) données cycliques jamais libérées 1 1 1 ENSIIE : Programmation avancée 7/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

GC traversant Principe : on parcours l ensemble des données accessibles à partir des racines (variables du programme) Les données accessibles sont conservées, les autres libérées ENSIIE : Programmation avancée 8/20

Marquer et nettoyer On ajoute un bit aux zones mémoire pour indiquer leur accessibilité (blanc/noir) On parcours ensuite la mémoire pour supprimer les zones restées blanches Inconvénients : Surcoût en mémoire Balayage de la mémoire pour la libération ENSIIE : Programmation avancée 9/20

GC copiant On sépare la mémoire en deux, on n en utilise que la moitié On recopie les zones accessibles dans l autre moitié On libère toute la première moitié, et on inverse les rôles Avantages : Libération de la mémoire instantanée Après recopie, la mémoire est compacte : une zone mémoire est proche des zones vers lesquelles elle pointe (cache) Inconvénients : Seule la moitié de la mémoire est disponible Les données changent de place dans la mémoire ENSIIE : Programmation avancée 10/20

En pratique Combinaison de plusieurs techniques à différents niveaux Utilisation de zones mémoires différentes suivant la génération des données, avec des techniques et des fréquences différentes En OCaml : tas mineur / tas majeur GC mineur : copie des accessibles du tas mineur vers le tas majeur GC majeur : marquer et nettoyer incrémental sur le tas majeur ENSIIE : Programmation avancée 11/20

Partage maximal Partage maximal ENSIIE : Programmation avancée 12/20

Partage maximal Minimisation de la mémoire En C, gestion fine de la mémoire : version destructive/non destructive des algorithmes changements sur place/recopie En OCaml, uniquement version non destructive Comment minimiser l espace mémoire? ENSIIE : Programmation avancée 13/20

Partage maximal Partage maximal Arbre binaires stricts : a d b c c 2 Sans partage : 0 1 1 2 1 2 a d b c Avec partage maximal : 0 1 2 ENSIIE : Programmation avancée 14/20

Partage maximal Égalité en OCaml = : égalité structurelle on parcours la structure pour vérifier que les sous-structures sont égales == : égalité physique on compare l adresse en mémoire Égalité structurelle coûteuse (parcours) a == b implique a = b mais la réciproque est fausse en général vraie avec partage maximal ENSIIE : Programmation avancée 15/20

Partage maximal Hash consing Implémentation du partage maximal : On stocke les valeurs déjà existantes dans une table de hachage Quand on cherche à en créer une nouvelle (utilisation d un constructeur), on vérifie d abord si une valeur structurellement égale n est pas déjà présente dans la table si oui, on retourne cette valeur sinon, on insère la nouvelle valeur dans la table, associée à elle-même ENSIIE : Programmation avancée 16/20

Partage maximal Sur les arbres binaires stricts On crée une table de hachage avec clefs : arbres binaires stricts valeurs : arbres binaires stricts Quand on veut créer un nouvel arbre, on vérifie qu il n est pas déjà présent à l aide d une fonction hashcons : let table = creer 251 let hashcons x = try chercher table x with Not_found -> inserer table x x; x ENSIIE : Programmation avancée 17/20

Partage maximal Constructeurs type ( a, b) abs = Feuille of a Noeud of ( a, b) abs * b * ( a, b) abs Pour être certains d avoir un partage maximal, on introduit des constructeurs intelligents : let feuille i = hashcons (Feuille i) let noeud (fg, n, fd) = hashcons (Noeud(fg,n,fd)) (on peut utiliser les types privés pour être certains de n utiliser que ces constructeurs) ENSIIE : Programmation avancée 18/20

Partage maximal Raffinement de l égalité Si on suppose qu on a le partage maximal, on peut utiliser l égalité physique pour les sous-noeuds quand on cherche dans la table de hachage : let egal x y = match x,y with Feuille i, Feuille j -> i == j Noeud(gx,nx,dx), Noeud(gy,ny,dy) -> gx == gy && nx == ny && dx == dy let rec rechercher_assoc l k = match l with [] -> raise Not_found (k,v)::q -> if egal k k then v else rechercher_assoc q k let rechercher d k = let h = hash k in rechercher_assoc d.(h) ENSIIE : Programmation avancée 19/20

Partage maximal Hash consing et GC Puisque les valeurs sont stockées dans la table de hachage, elles sont toujours accessibles Même si rien d autre ne pointe dessus On utilise des pointeurs faibles dans la table de hachage : ceux-ci ne sont pas pris en compte par le GC ENSIIE : Programmation avancée 20/20