Gestion de la mémoire



Documents pareils
Partie 7 : Gestion de la mémoire

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

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

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

Structure fonctionnelle d un SGBD

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

Architecture des ordinateurs

Systemes d'exploitation des ordinateurs

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

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

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

Conventions d écriture et outils de mise au point

GESTION DE LA MEMOIRE

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

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

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

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

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

Gestion de la mémoire

IV- Comment fonctionne un ordinateur?

Concept de machine virtuelle

Introduction aux SGBDR

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Système de Gestion de Fichiers

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

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

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

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

Initiation à la sécurité

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

Chapitre 1 : La gestion dynamique de la mémoire

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

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

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

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

REALISATION d'un. ORDONNANCEUR à ECHEANCES

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

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

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

Encryptions, compression et partitionnement des données

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

Licence Sciences et Technologies Examen janvier 2010

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

DAns un système multi-utilisateurs à temps partagé, plusieurs processus

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

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

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

LES SYSTÈMES DE FICHIERS

Cours de Systèmes d Exploitation

Cours A7 : Temps Réel

Cours de C. Allocation dynamique. Sébastien Paumier

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

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

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

TD Architecture des ordinateurs. Jean-Luc Dekeyser

Compilation (INF 564)

VMWare Infrastructure 3

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Réalisation d un OS 32 bits pour PC(x86)

CH.3 SYSTÈMES D'EXPLOITATION

Chapitre 4 : Les mémoires

Introduction à MATLAB R

Cours de Système : Gestion de Fichiers

Introduction à la Programmation Parallèle: MPI

4D v11 SQL Release 5 (11.5) ADDENDUM

Cours Programmation Système

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

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

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

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

I00 Éléments d architecture

Algorithmique, Structures de données et langage C

EX4C Systèmes d exploitation. Séance 14 Structure des stockages de masse

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

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

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

Technologie de déduplication de Barracuda Backup. Livre blanc

ASR1 TD7 : Un microprocesseur RISC 16 bits

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

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

SYSTÈME DE GESTION DE FICHIERS

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

Gestion répartie de données - 1

Leçon 1 : Les principaux composants d un ordinateur

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

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

LA VIRTUALISATION. Etude de la virtualisation, ses concepts et ses apports dans les infrastructures informatiques. 18/01/2010.

Gestion mémoire et Représentation intermédiaire

Cours Informatique 1. Monsieur SADOUNI Salheddine

Rappels d architecture

TAI049 Utiliser la virtualisation en assistance et en dépannage informatique TABLE DES MATIERES

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

La technologie Java Card TM

Transcription:

Gestion de la mémoire Marc Pouzet ENS Cours L3 Systèmes et Réseaux 25 mai 2015

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, 2-ième édition, Andrew Tanenbaum, Pearson, 2003

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 est pas de segment continue 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

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 41

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); } 42

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; } 43

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; } 44

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. 46

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. 47

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. 48

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 49

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éé. 50

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. 51

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 ; } 52

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). 53