Version actuelle. Gestion de la mémoire. Le tas. Le tas

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

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

Les arbres binaires de recherche

Traduction des Langages : Le Compilateur Micro Java

Les structures de données. Rajae El Ouazzani

Compilation (INF 564)

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

Conventions d écriture et outils de mise au point

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

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

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

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

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

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

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

Cours de Programmation 2

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Gestion mémoire et Représentation intermédiaire

MIS 102 Initiation à l Informatique

NIMEGUE V3. Fiche technique 3.07 : Sauvegarde / Restauration manuelle

Encryptions, compression et partitionnement des données

Classes et Objets en Ocaml.

Système de Gestion de Fichiers

Cours 1 : La compilation

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

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

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Programmation avec des objets : Cours 7. Menu du jour

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

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

Utiliser Glary Utilities

Algorithmique et Programmation, IMA

L exclusion mutuelle distribuée

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

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

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

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

Logiciel de base. Première année ENSIMAG

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Introduction à la programmation concurrente

Cours 1 : Qu est-ce que la programmation?

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

ARBRES BINAIRES DE RECHERCHE

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Machines virtuelles Cours 1 : Introduction

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Algorithmique et programmation : les bases (VBA) Corrigé

Évaluation et implémentation des langages

Java Licence Professionnelle CISII,

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

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

PC Check & Tuning 2010 Optimisez et accélérez rapidement et simplement les performances de votre PC!

Objets et Programmation. origine des langages orientés-objet

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

Initiation à l algorithmique

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)

Algorithmique I. Algorithmique I p.1/??

TP Bases de données réparties

Licence Sciences et Technologies Examen janvier 2010

PHP. Performances. Audit et optimisation LAMP. Julien Pauli. Cyril Pierre de Geyer. Guillaume Plessis. Préface d Armel Fauveau

GUIDE PRATIQUE déplacements professionnels temporaires en France et à l étranger

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

Introduction à MATLAB R

Algorithmique, Structures de données et langage C

Chapitre 2. Classes et objets

Rappels Entrées -Sorties

Cours d Algorithmique et de Langage C v 3.0

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

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

Données Réparties. Thibault BERNARD.

Programmation C. Apprendre à développer des programmes simples dans le langage C

OS Réseaux et Programmation Système - C5

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

STAGE IREM 0- Premiers pas en Python

Avira System Speedup. Guide

Rappels d architecture

PROJET ALGORITHMIQUE ET PROGRAMMATION II

REALISATION d'un. ORDONNANCEUR à ECHEANCES

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Architecture des ordinateurs

Cours d algorithmique pour la classe de 2nde

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

SYSTÈME DE GESTION DE FICHIERS

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

Structure fonctionnelle d un SGBD

I. Introduction aux fonctions : les fonctions standards

Tux Paint. 1. Informations générales sur le logiciel. Auteur : Bill Kendrick et l équipe de développement de New Breed Software

gestion des processus La gestion des processus

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

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

Machines Virtuelles. et bazard autour. Rémi Forax

Introduction au langage C

Programmation impérative

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Analyse de sécurité de logiciels système par typage statique

SQL Server Database Engine : Part1. Modes de récupération / Sauvegardes / Checkpoint

Transcription:

Version actuelle Gestion de la mémoire Dans notre version du compilateur, pas de pointeurs, pas de malloc/free, les variables globales sont allouées de façon statiques, les variables locales, même les tableaux, sont allouées dans la pile. Au total, 2 zones de mémoire (plus la zone du code lui-même) : adresses statiques et pile. Le tas Le tas Dernière zone de mémoire, dédiée à l allocation dynamique. pile tas data code section dynamique section fixe En C, un malloc renvoie une adresse dans le tas. En assembleur, on y accède soit en connaissant l adresse de la fin de la section de données, et en maintenant à la main soit par des appels systèmes : syscall avec $v0 = 9, $a0 = quantité de mémoire à allouer, l adresse du bloc va dans $v0. Pas d instruction pour désallouer en MIPS...

Allocation de mémoire free() typedef struct a { int val; struct a *filsg; struct a *filsd; } *arbre; arbre cree_arbre (int val, arbre filsg, arbre filsd){ arbre resultat = (arbre) malloc (sizeof(struct a)); /*... */ } 5 L instruction free() en C permet de libérer de la mémoire qui va pouvoir être réutilisée par le compilateur. Ce fonctionnement permet un usage efficace de la mémoire quand il est bien utilisé, mais donne beaucoup de responsabilité au programmeur : penser à tout libérer ; ne pas libérer un objet encore vivant ; ne pas libérer deux fois un même pointeur. Les problèmes qui viennent d une mauvaise utilisation provoquent des erreurs difficiles à détecter : fuites de mémoire, erreurs d écriture ne provoquant pas de crash, etc. Désallocation implicite Ramassage de miettes La plupart des langages de programmation actuels utilisent donc l allocation en interne. Il faut donc des algorithmes permettant d allouer de la mémoire, mais surtout de désallouer automatiquement les objets dont on n a plus besoin. On appelle cette dernière étape le ramassage de miettes (garbage collector). On construit un graphe d accessibilité du tas : les sommets sont les objets, les arêtes représentent les pointeurs, les objets auxquels le compilateur a directement accès sont appelés racines du graphe. Tout objet inaccessible depuis une racine ne sert à rien, et peut donc être désalloué.

Ramassage de miettes Première phase : marquage struct aliste { arbre tete; struct aliste* queue; } l; /*... */ l = l->queue; 5 l 3 NULL L algorithme récursif visiter (x) : si x n est pas marqué, marquer x, pour tout champ de x, visiter (x). Pour tout objet x du programme, Visiter(x). Deuxième phase : parcours du tas Marquage dans les appels fonctionnels Une fois le marquage réalisé, on balaye le tas horizontalement pour retirer les objets inutiles. Pour chaque élément x du tas si x est marqué démarquer x sinon ajouter x à la liste d objets disponibles. La pile contient la mémoire locale (trame) de potentiellement plusieurs fonctions superposées. Chaque segment contient des variables, pointeurs, etc, qui sont vivantes et que l on doit considérer. Chaque segment a une taille différente, des objets différents, selon la taille et le nombre de paramètres, les registres sauvegardés, etc... Comment déterminer explorer la pile et déterminer ce que contient chaque segment, sans ajouter d information supplémentaire?

Marquage dans les appels fonctionnels Solution : une table pour chaque call dans le programme contenant la taille de la trame associée, la liste des emplacements contenant des pointeurs dans cette trame. Marquage dans les appels fonctionnels inserer(aliste l, int v){ if (!l l->tete > v) nouvelle_cellule(v, l); else l->queue = inserer(l->queue, v); } l... v $ra Marquage et utilisation de la pile Algorithme de Deutsch-Schorr-Waite Version itérative de l algorithme de marquage. Autre problème : la version de Visiter qui explore les structures est récursive, donc a besoin d une pile, donc de mémoire (qu on cherche à économiser). c b d... En fait non, si on retourne temporairement les pointeurs. C est l algorithme de Deutsch-Schorr-Waite. a...... Visiter (x) : si x n est pas marqué : p := NULL marquer (x) pour tout champ non marqué i de x : tmp := x.i x.i := p p := x x := tmp continuer si aucun champ non marqué et p non NULL, soit j le dernier champ marqué de p tmp := p.j p.j := x x := p p := tmp sinon fini.

Fragmentation Compactage 1 2 Encore un problème : il arrive qu on libère beaucoup de petits objets disséminés, libérant de la mémoire fragmentée (qu on appelle trous). Il peut alors être impossible d allouer un gros bloc. Première tactique : toujours allouer le trou le plus juste pour le bloc demandé. Deuxième tactique : le compactage. 1 2 Trois balayages du tas : 1 calcul des nouvelles positions, 2 mise à jour des pointeurs existants, 3 déplacement des blocs, de gauche à droite. Limites des ramasse-miettes Les algorithmes de gestion de mémoire prennent de la place en mémoire en indexant les blocs... alors qu ils sont censés l économiser, sont lents de façon générale, bloquent le programme ponctuellement pendant un certain temps. Encore plus compliqué : utilisation de cache de vitesses différentes... Conclusion

La compilation...... est un torrent qui semble difficile à traverser, mais on en vient à bout en sautant de rocher en rocher. code 3 adresses analyse lexicale analyse syntaxique arbre abstrait table des symboles La compilation... Chaque étape amène une nouvelle représentation intermédiaire du programme, pose de nouveaux problèmes : certains impossible à résoudre de façon optimale, parfois plusieurs solutions possibles, aucune n étant la meilleure (LL ou LR? Quel algo de ramasse-miettes?) Chaque langage a ses spécificités, à traiter en particulier est plus ou moins proche du langage cible (C assembleur est plus facile que OCaml assembleur) langage machine