Gestion de la mémoire

Documents pareils
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

Partie 7 : Gestion de la mémoire

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

LA mémoire principale est le lieu où se trouvent les programmes et les

Architecture des ordinateurs

Structure fonctionnelle d un SGBD

Systemes d'exploitation des ordinateurs

Conventions d écriture et outils de mise au point

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

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

Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes

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

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

GESTION DE LA MEMOIRE

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

1. Systèmes d entrée/sortie 2. Systèmes de fichiers 3. Structure de mémoire de masse (disques)

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

Système de Gestion de Fichiers

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)

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

Introduction aux SGBDR

On distingue deux grandes catégories de mémoires : mémoire centrale (appelée également mémoire interne)

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

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

Croisière au cœur d un OS Étape 4 : Mise en place de la pagination

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Gestion de la mémoire

Licence Sciences et Technologies Examen janvier 2010

SYS MEM. Gestion de la mémoire. Table des matières. IUT - Département Informatique. ASR2-Système. 1.1 Motivation

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

Concept de machine virtuelle

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

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

<Insert Picture Here> Solaris pour la base de donnés Oracle

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

Chapitre 4 : Les mémoires

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

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

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

IN SYSTEM. Préconisations techniques pour Sage 100 Windows, MAC/OS, et pour Sage 100 pour SQL Server V16. Objectif :

Encryptions, compression et partitionnement des données

Initiation à la sécurité

SRS DAY: Problématique liée à la virtualisation

LIVRE BLANC Pratiques recommandées pour l utilisation de Diskeeper sur les réseaux SAN (Storage Area Networks)

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Mise en oeuvre TSM 6.1

Cours Informatique 1. Monsieur SADOUNI Salheddine

Informatique Générale

La mémoire. Un ordinateur. L'octet. Le bit

Plan global. Programmation système II. Socket du domaine UNIX. Plan. Socket UNIX, Terminaux, Async IO, Mémoire, ELF.

GESTION DES FICHIERS C/UNIX

ESXi: Occupation RAM avec VM_Windows et VM_Linux. R. Babel, A. Ouadahi April 10, 2011

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

Exécutif temps réel Pierre-Yves Duval (cppm)

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Algorithmique et Programmation, IMA

SYSTÈME DE GESTION DE FICHIERS

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

IV- Comment fonctionne un ordinateur?

Introduction à l architecture des ordinateurs. Adrien Lebre Décembre 2007

Algorithmique I. Algorithmique I p.1/??

LES SYSTÈMES DE FICHIERS

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

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

Gestion répartie de données - 1

I. Introduction aux fonctions : les fonctions standards

ASR1 TD7 : Un microprocesseur RISC 16 bits

Threads. Threads. USTL routier 1

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

I00 Éléments d architecture

PG208, Projet n 3 : Serveur HTTP évolué

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Unix/Linux I. 1 ere année DUT. Université marne la vallée

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

Compilation (INF 564)

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

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

VMWare Infrastructure 3

NIMEGUE V3. Fiche technique 3.07 : Sauvegarde / Restauration manuelle

Chapitre 1 : La gestion dynamique de la mémoire

Le système de gestion des fichiers, les entrées/sorties.

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

VMware ESX/ESXi. 1. Les composants d ESX. VMware ESX4 est le cœur de l infrastructure vsphere 4.

Programmation système de commandes en C

Rappels d architecture

la virtualisation pour quoi faire?

KoinKoin. Système d exploitation à architecture basée micro-noyau. Antoine Castaing Nicolas Clermont Damien Laniel

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Technologie de déduplication de Barracuda Backup. Livre blanc

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

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

Java Licence Professionnelle CISII,

Temps Réel. Jérôme Pouiller Septembre 2011

TD Architecture des ordinateurs. Jean-Luc Dekeyser

Gestion mémoire et Représentation intermédiaire

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique

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

Transcription:

Gestion de la mémoire Marc Pouzet ENS Cours L3 Systèmes et Réseaux 27 avril 2017

Aspects matériels de la mémoire

Types de mémoires 1 Type Accès Vitesse Persistance Domaine d utilisation Registre lecture-écriture ***** non temporaire uniquement SRAM lecture-écriture **** non buffer DRAM lecture-écriture *** non mémoire centrale ROM lecture ** oui mémoire de démarrage (BIOS) SWAP lecture-écriture * oui mémoire virtuelle 3 1. Les images et exemples du cours sont extraits du livre Systèmes d exploitation, Andrew Tanenbaum, Pearson

Gestion élémentaire de la mémoire Un système d exploitation et un processus Le système en bas de la mémoire (e.g., premiers OS mainframe) ; ou le système en mémoire morte (ROM) en haut de la mémoire (e.g., systèmes embarqués) ; ou gestion des périph. en ROM (e.g., MS-DOS ; la partie de l OS en ROM s appelle le BIOS) 4

Mémoire et multiprogrammation

Mémoire et multiprogrammation Situation : Nombre arbitraire de processus Plusieurs processus simultanément en mémoire Une seule mémoire pour tout le monde Usage dynamique de la mémoire Attentes : Sécurité : seul le processus propriétaire d une zone mémoire peut en lire le contenu Intégrité : un processus ne peut modifier (volontairement ou non) la mémoire d un autre processus Disponibilité : le système doit satisfaire un maximum de demandes de mémoire. 6

Mémoire et multiprogrammation : Solutions Échanges superposés L image mémoire du processus devenant actif est recopiée depuis le disque Partitions fixes de la mémoire la mémoire est découpée en zones de tailles fixes Problèmes Fragmentation interne : certains processus peuvent ne pas utiliser toutes la mémoire qui leur est allouée Fragmentation externe : ils se peut qu il n y ait pas de segments contigus de mémoire pouvant accueillir un processus alors que la somme de l espace dans les zones libres serait suffisant 7

MFT (Multiprogramming with a Fixed number of Tasks) Principe : Diviser la mémoire en n partitions de tailles inégales. Lorsqu une tâche arrive, la placer dans la file des entrées de la plus petite des partitions assez larges (a) ; Gérer une file d attente unique (b) Utilisé sur l OS/360 d IBM (60 s). N est plus utilisé aujourd hui. 8

Réallocation et protection : translation d adresses Les programmes doivent être relogeables et ne pas écrire/lire dans une zone qui ne leur appartient pas. Supposons du code chargé dans la partition 1 à l adresse 100K. A l adresse 0, appel de procedure CALL 100 à une adresse absolue 100. Lecture dans la zone de l OS! L adresse absolue 100 doit être remplacée par 100k+100 ou 200k+100 (partition 2). Que faire? Modifier réellement les instructions lors du chargement du code en mémoire. Coûteux et ne résoud pas le problème de la protection. Mieux : utiliser un registre base (début de partition) et limit (longueur de la partition). base est ajouté aux adresses avant l envoi sur le bus mémoire. Ainsi, CALL 100 se transforme en 100K+100. Coûteux en temps. Implémenté sur le CDC 6600, premier super-ordinateur (1964).

Mémoire et multiprogrammation : Solutions Partitions variables et va-et-vient (swap) Les partition sont allouées selon les besoins des processus La taille des partitions peut changer dynamiquement Gestion de la mémoire par bitmap d occupation par liste chaînée Limites : Un processus doit résider en totalité en mémoire Problème de réallocation de ressources 10

Swap avec des partitions variables Le process A est en mémoire ; puis B et C sont crées ou chargés depuis le disque. Puis A est transféré sur le disque (d). D arrive ; B s en va. Le nombre, la localisation et la taille des partitions varie dynamiquement. Solution simple lorsque la taille des processus est fixe. 11

Mémoire et multiprogrammation : Solutions La solution précédente ne permet pas de traiter le cas de processus dont la taille dépasse la capacité de la mémoire physique (code+données+piles). Mémoire virtuelle et pagination Chaque processus dispose d un espace d adressage virtuel. L espace d adressage virtuel est décomposé en pages logiques Les pages qui contiennent des données sont associées à de la mémoire réelle Un mécanisme matériel traduit les adresses virtuelles en adresses physiques 12

Mémoire virtuelle et pagination Avantages : Les programmes n ont plus besoin d être relogeables Les pages n ont pas l obligation d être contiguës (réduit la fragmentation) L espace total d adressage peut dépasser la taille de la mémoire physique Exemple : Architecture 32 bits, pages de 2 12 octets (4 Ko) Espace d adressage = 2 32 octets = 4 Go 1 048 576 (2 20 ) pages 13

Mémoire virtuelle et pagination Une table des pages associe un cadre de page (page frame), résidant en mémoire physique, à une page virtuelle (virtual page). 14

Mémoire virtuelle et pagination : gestion Matérielle La traduction entre adresse virtuelle et adresse réelle est effectuée à chaque accès mémoire Les adresses sont composées d un numéro de page et d un décalage dans la page La mémoire réelle en cadres de la même taille que les pages logiques L unité de gestion mémoire ou MMU (Memory Management Unit) traduit les adresses virtuelles en adresses réelles La MMU doit : savoir quelles pages virtuelles sont chargées en mémoire et où elles se trouvent pouvoir communiquer avec le système d exploitation pour prévenir s il veut accéder à une page qui n est pas en mémoire (défaut de page) Le système doit pouvoir traiter les défaut de pages 15

MMU (Memory Management Unit) 16

Fonctionnement interne d une MMU (16 pages de 4Ko) Calcule d une adresse réelle à partir d une adresse virtuelle ou lève une interruption. Adresses sur 16 bits : no. de page (4b poids fort) + pos. (12b). Un bit de présence/absence conserve la trace des pages se trouvant effectivement en mémoire. 17

Mémoire virtuelle et pagination : Remarque Problème de la taille de la table de translation des adresses La table des pages est conservée en mémoire. Impact considérable sur les performances. Sans pagination, une instruction mov R0, R1 fait un seul accès mémoire. Avec, il faut accéder à la table des pages. S il faut faire 2 références de table de page pour une référence mémoire, les performances sont réduites de 2/3! En pratique, les programmes font un grand nombre de références à un petit nombre de pages. E.g., boucles sur des tableaux. Une petite fraction des entrées de la table est réellement lue. Table à plusieurs niveaux Utilisation de cache de pagination pour accélérer la pagination : TLB (Translations Lookaside Buffers).

Table de pages multi-niveaux Entrée dans la table des pages Bit de présence (levé d un défaut de page si 0) Bit de protection (0 pour lecture/écriture) ; 1 pour lecture seule. dirty bit : garde la trace de l utilisation de la page. Après une écriture, bit à 1 (dirty) ; sinon, 0 (clean). Inutile d écrire la page sur le disque. 19

Table de pages multi-niveaux Accès dans une table de pages à deux niveaux 20

Table des pages inversées SUne entrée par page virtuelle. Avec des adresses 32bits, 4Mo par pages, 1 million d entrées (4Mo). Mais 2 52 entrées avec une machine 64bits! Solution : une entrée par cadre de page dans la mémoire réelle. On utilise un TLB pour retrouver l adresse physique correspondant à une adresse virtuelle. 21

Défaut de page Le mécanisme de mémoire virtuelle permet d adresser plus de pages qu il n y a de cadres. Un certain nombre de pages sont donc déplacées sur le disque. Même si le nombre de cadres est suffisant les systèmes tendent à basculer certains pages sur le disque pour augmenter la taille des caches de disque. Lors d un défaut de page, ou lorsqu une nouvelle page est allouée et qu il n y a plus de cadres disponibles une page est choisie pour être envoyée sur le disque. Plusieurs algorithmes de remplacement de pages. 22

Algorithme optimal Lorsqu une page sur le disque a besoin d être échangée avec une page en mémoire, alors : regarder toutes les pages en mémoire trier sur le critère : va être utilisée au temps T avec T croissant choisir celle en fin de liste échanger cette page avec celle sur le disque 23

Algorithme optimal Problème : Il suppose une connaissance de toute l exécution, c est à dire toutes les références mémoires qui seront effectuées. Algorithme irréalisable Par contre l algorithme peut être utiliser comme référence pour évaluer un algorithme de remplacement : On fait tourner une simulation du processus pour tracer chaque opération mémoire On applique l algorithme optimal sur la trace obtenue On peut maintenant comparer les défauts de pages avec l algorithme à évaluer. 24

Choix aléatoire Choix aléatoire de la page à remplacer Inconvénient : peut supprimer des pages utiles Avantage : n a pas d effets pervers si le choix est suffisamment aléatoire Pas si mauvais en pratique 25

NRU : Not Recently Used On utilise deux bits d information pour chaque page : R : la page a été lue M : la page a été modifiée Au lancement du processus toutes les pages ont R et M à 0. Régulièrement R est repassé à 0 pour toutes les pages. Lors d un défaut de page le système classe les pages dans quatre ensembles : 1. Ni utilisée ni modifiée 2. pas utilisée, mais modifiée 3. utilisée, mais pas modifiée 4. utilisée et modifiée NRU remplace une page au hasard dans le premier ensemble non vide. Il est facile à implanter, et donne des performances acceptables. 26

FIFO : First In First Out Simple chaînage des pages selon leur âge Algorithme : Lorsqu une page arrive, elle vient remplacer la plus vieille et deviens la plus jeune Inconvénients : ne prend pas en compte l utilité des pages Anomalie de Belady : on peut dans certains cas augmenter les échanges nécessaires si on augmente la taille de la mémoire. Exemple : accès aux pages 0 1 2 3 0 1 4 0 1 2 3 4

Second Chance Page Replacement Amélioration du FIFO : utilisation du bit R Régulièrement, les bits R de toutes les pages sont mis à 0. Lors du remplacement de page : On sélectionne la page en queue de la liste (la plus vieille) Si R vaut zéro, la page est vieille ET non utilisée récemment Si R vaut un, la page est vieille MAIS TOUJOURS utilisée : elle est remise en tête de la liste (elle devient jeune), et la recherche continue 28

Clock Page Replacement Bien que l algorithme précédent soit efficace, il passe son temps à déplacer des éléments dans la file On peut l implanter de manière beaucoup plus maligne avec une liste circulaire, et un pointeur sur la position actuelle dans la liste Seul ce pointeur se déplace. Il s appelle algorithme d horloge car les pages peuvent représenter les heures d une horloge et le pointeur une aiguille 29

Clock Page Replacement 30

Least Recently Used LRU : remplace la page la moins récemment utilisée Nécessite un tri dynamique des pages par ordre d accès à chaque référence mémoire C est possible, en utilisant les bits de protection, mais extrêmement coûteux Certaines machines fournissent des compteurs matériels qui permettent de les implanter, mais là aussi, c est assez coûteux. On cherche donc à approximer le même résultat qu un LRU, sans faire d action spécifique à chaque accès mémoire. Remarque : Situation dégénérée lors de l accès circulaire à N+1 pages dans une mémoire de N cadres 31

Not Frequently Used L idée de NFU est d essayer de simuler NRU : 1. régulièrement, le système parcours toutes les pages et incrémente un compteur pour toutes les pages dont le bit R vaut 1 2. et met le bit R à zéro 3. Ce compteur est une approximation de l intérêt que porte le processeur à une page (LRU) Problème du NFU : il n oublie rien, et si une page a été souvent utilisée dans l histoire, elle peut conserver longtemps un compteur supérieur à une page fréquemment utilisée maintenant. 32

Aging Aging est un algorithme qui se base sur NFU Avant d ajouter la valeur du bit R au compteur, on divise le comptuer par 2 (on le décale d un bit sur la droite) et le bit R est ajouté au bit de poids fort du compteur, pas au bit de poids faible Une page qui n a pas été référencée depuis 4 périodes a ses 4 premiers bits à zéro, alors qu une page qui a été référencée il y a 3 périodes a son 3ième bit de poids fort à 1. En prenant la page avec le compteur le plus faible, on supprime la page la moins utilisée (avec l approximation du temps) 33

Aging vs LRU Aging est moins précis que LRU à cause de l échantillonnage du temps. Si deux pages n ont pas été référencées depuis 2 périodes, mais l ont été il y a trois périodes, Aging ne fait pas la différence, alors que LRU choisit celle qui a été référencée la première il y a trois périodes Aging fonctionne en mémoire bornée, et cette mémoire représente la longueur de son histoire. Si deux pages ont un compteur à 0 sur 8 bits, c est qu elles n ont pas été utilisées depuis 8 périodes de temps. Le fait que l une ait été utilisée il y a 9 périodes, et l autre il y a 1024 périodes ne se voit pas dans Aging, mais se voit dans LRU 34

Working Set Page Replacement L idée : un processus utilise un petit nombre de pages à un instant donné C est ce qu on appelle l ensemble de travail d un processus. Lorsqu un processus est ordonnancé il est souvent valable de charger simultanément toutes les pages de son ensemble de travail. L algorithme de remplacement de pages essaye de construire ces ensembles, et considère comme candidat à l éjection une page qui ne fait pas partie d un ensemble de travail. On considère que si une page n est pas utilisée pendant τ périodes de temps, c est qu elle ne fait plus partie de l ensemble de travail. On utilise le temps virtuel courant (current virtual time), c-a-d, le temps CPU qu un processus a utilisé depuis son démarrage. 35

Working Set Page Replacement : algorithme Chaque entrée de la table des pages maintient une date logique entière (numéro de période de dernière utilisation) A chaque période de temps, on parcourt toute la table Si R = 1, on note le numéro de la période dans le champs de l entrée R est mis à 0 lorsqu un défaut de page arrive, on parcourt la table des pages Si R = 0, la page est candidate à l éjection. Si sa date de dernière référence est plus grande que τ, elle ne fait pas partie de l ensemble et est éjectée. Sinon, on conserve sa date de dernière utilisation et on continue le parcours Si à la fin de parcours on n a pas trouvé de page en dehors de l ensemble, on utilise la plus vieille Coûteux en pratique : examiner toute la table de page à chaque défaut de page jusqu à ce qu une page adéquate soit localisée. 36

WSClock Page Replacement Structure de données : liste circulaire de cadres + pointeur (clock) Chaque entrée contient la date de dernière utilisation, le bit R et le bit M. A chaque défaut de page, on examine l entrée pointée en premier Si le bit R = 1, cela signifie que la page a été utilisée pendant le top courant. On copie la page sur le disque, le bit R est mis à 0 et le pointeur avance (Fig. (a) et (b)) L algorithme continue sur la nouvelle page. Si le bit R = 0 et la date est supérieure à τ, la page est inutilisée (n est pas dans l ensemble de travail) et on une copie propre existe sur le disque. Le cadre de page est libéré et la nouvelle page y prend place (Fig. (c) et (d). De par sa simplicité et son efficacité, cet algorithme est souvent celui qui est implanté 37

WSClock Page Replacement 38

Comparaison Optimal Aléatoire NRU FIFO Second Chance Clock LRU NFU Aging Working set WS clock non implantable Trop simple Très simple Peu facilement supprimer des pages utiles Grand amélioration de FIFO Implantation efficace de second chance Excellent mais difficile à implanter Approximation simpliste de LRU bonne approximation de LRU implantation coûteuse meilleur approximation de LRU, implantation efficace 39

Memory mapping (mmap)

Memory mapping (mmap) Structure d un exécutable

Memory mapping (mmap) - (creator.c et partner.c) /* shm_open: open a shared memory object. */ /* As if it was a file. */ fd = shm_open("myregion", O_CREAT O_RDWR, S_IRUSR S_IWUSR);... /* mmap: allocate memory, or map files or */ /* devices into memory */ rptr = mmap(null, sizeof(struct region), PROT_READ PROT_WRITE, MAP_SHARED, fd, 0);

Memory mapping

Mémoire virtuelle et segments

Mémoire virtuelle et segments Chaque processus est exécuté comme s il avait toute la mémoire Un processus peut accéder uniquement à sa mémoire La mémoire virtuelle est décomposée en segments Facilite le partage et la protection Typiquement, il y a les segments suivants : Code (ou texte) Données statiques Tas (heap) Pile Pile (stack) espace libre Tas Données code 45

Mémoire virtuelle Le segment de code Chargement en mémoire de l exécutable (Linux : format ELF) Le segment de données Variables globales Variables locales static #include <stdio.h> int i; int j=42; void count() { static int cpt = 0; printf("%d\n",++cpt); } 46

Mémoire virtuelle La pile Variables locales, paramètres de fonctions Allouées et desallouées automatiquement (pas de free) int *illegal_reference() { int i; return (&i); /* illegal */ } Allocation en pile : void *alloca(size_t size); void stack_alloc(int n) { int *array; array = alloca(n * sizeof(int)); return; } 47

Mémoire virtuelle Le tas Gestion dynamique de la mémoire malloc, calloc, free, etc. Exemple : #include <stdlib.h> void heap_alloc(int n) { int *array1, *array2; array1 = (int *) malloc(n * sizeof(int)); array2 = (int *) calloc(n * sizeof(int));... free(array1); free(array2); return; } 48

Gestion du tas

Gestion du tas Changement de la taille du tas Déplacement absolu : int brk(void *end_data_segment); Déplacement relatif void *sbrk(intptr_t increment); Ces deux fonctions ne sont pas pour l interface programmeur, elles sont utilisées seulement pour le développement du noyau. 50

Gestion du tas : malloc La fonction malloc de la bibliothèque standard de C fournit une interface simple pour allouer des blocs de mémoire. void *malloc(size_t size); On attend les propriétés suivantes de malloc : La distance entre l adresse retournée et le break est supérieure à la taille demandée ; Aucun autres appels à malloc n allouera une zone de mémoire déjà allouée ; malloc cherche à minimiser la différence entre la quantité totale de mémoire allouée et la quantité réellement utilisée ; Le coup en temps de malloc doit être le plus petit possible. 51

Gestion du tas : malloc malloc structure le tas en blocs. Chaque bloc commence par un en-tête contenant les informations nécessaires au bon fonctionnement de malloc le reste correspond à la mémoire fournit par l interface. 52

malloc simple L en-tête est utilisé pour réaliser un chaînage des blocs Il contient trois informations : la taille du bloc (celle demandée) un indicateur pour savoir si le bloc est utilisé l adresse du prochain bloc 53

malloc simple malloc (dans sa version initiale) est basé sur un algorithme dit de first fit. Voici l idée générale du fonctionnement de malloc : Au premier appel : L adresse du break est sauvée dans base break est décalée de la taille demandée plus la taille de l en-tête dont les champs sont renseignés La valeur de retour est (base + taille de l en-tête) En dehors du premier appel : l opération change en fonction de la recherche du premier bloc libre de taille suffisante : En cas d échec : l opération est similaire au premier appel. Sinon : le bloc trouvé est divisé pour correspondre à la taille demandée. Si l espace restant est suffisant, un nouveau bloc est créé. 54

free et fusion L opération de libération de la mémoire est relativement simple : Trouver le bloc Passer l indicateur d occupation sur libre Cette méthode est très rapide, mais entraîne une importante fragmentation. Une solution consiste à fusionner le bloc libéré avec ses voisins s ils sont libres. 55

free et fusion : double chaînage Pour réaliser la fusion simplement, il faut utiliser un double chaînage : l en-tête contient un champ avec l adresse du bloc précédent. La structure représentant l en-tête devient : struct block { size_t size ; struct block *next ; struct block *prev ; int used ; } 56

Amélioration de malloc Quelques problèmes de l algorithme de malloc présenté : beaucoup de fragmentation temps de recherche d un bloc libre Pistes pour résoudre ces problèmes : Usage d un algorithme de best fit. On recherche le meilleur bloc libre (celui dont la taille est la plus proche). Indexation séparée des blocs libres et utilisées. Listes triés de taille de blocs : Le début du tas contient un tableau de pointeur. Chaque pointeur correspond au début d une liste de bloc de même taille. Le tableau est trié en fonction de la taille des blocs. Séparation des blocs et des en-têtes (minimise les défauts de pages). 57