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

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

Partie 7 : Gestion de la mémoire

Gestion de la mémoire

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

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

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

Conventions d écriture et outils de mise au point

Architecture des ordinateurs

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

GESTION DE LA MEMOIRE

Structure fonctionnelle d un SGBD

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

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Systemes d'exploitation des ordinateurs

Chapitre 1 : La gestion dynamique de la mémoire

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

Rappels d architecture

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

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

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

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

Limitations of the Playstation 3 for High Performance Cluster Computing

Le langage C. Séance n 4

SYSTÈME DE GESTION DE FICHIERS

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

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

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

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

Algorithmique, Structures de données et langage C

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

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

Cours A7 : Temps Réel

Les structures de données. Rajae El Ouazzani

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

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

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

Programmation impérative

Compilation (INF 564)

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

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

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

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

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

UE C avancé cours 1: introduction et révisions

Introduction à la Programmation Parallèle: MPI

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

Les attaques par corruption de mémoire Synopsis Mickael Deloison 22/10/2008

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

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

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

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

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

Une bibliothèque de templates pour CUDA

Traduction des Langages : Le Compilateur Micro Java

Introduction à MATLAB R

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

Cours de C. Allocation dynamique. Sébastien Paumier

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

4D v11 SQL Release 5 (11.5) ADDENDUM

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

IV- Comment fonctionne un ordinateur?

TD Architecture des ordinateurs. Jean-Luc Dekeyser

Poker. A rendre pour le 25 avril

DNS ( DOMAIN NAME SYSTEM)

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

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Encryptions, compression et partitionnement des données

Gestion mémoire et Représentation intermédiaire

Machines Virtuelles. et bazard autour. Rémi Forax

Conception de circuits numériques et architecture des ordinateurs

Logiciel de base. Première année ENSIMAG

Débogage de code* Mardi 13 décembre Romaric DAVID Université de Strasbourg - Direction Informatique Pôle HPC. hpc.unistra.

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Programmation Objet Java Correction

GESTION DES FICHIERS C/UNIX

IFT Systèmes d exploitation - TP n 1-20%

IFT3030 Base de données. Chapitre 2 Architecture d une base de données

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

Informatique Générale

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

Introduction. Adresses

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

Système de Gestion de Fichiers

I00 Éléments d architecture

CRÉER UN DVD VIDEO avec DVD FLICK (avec ou sans menu)

PocketNet SNMP/Modbus

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

Cours Informatique 1. Monsieur SADOUNI Salheddine

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

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

Configuration automatique

Transcription:

Gestion de la mémoire Michel Simatic module CSC4508/M2 Avril 2015

Gestion de la mémoire Plan du document 1 Point de vue système............................................................ 3 2 Point de vue processus......................................................... 19 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 2/38

Gestion de la mémoire 1 Point de vue système 1.1 Introduction.................................................................. 4 1.2 Besoins des processus..........................................................5 1.3 Pagination.................................................................... 6 1.4 Segmentation................................................................ 12 1.5 Pagination versus Segmentation.............................................. 15 1.6 Algorithmes pour la gestion des pages......................................... 16 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 3/38

Gestion de la mémoire 1.1 Introduction 1 Point de vue système Un processus a besoin d être présent en mémoire centrale pour s exécuter Mémoire centrale divisée en deux parties : L espace réservé au système d exploitation L espace alloué aux processus La Gestion mémoire concerne l espace processus Capacités mémoire augmentent, mais les besoins aussi Nécessité de plusieurs niveaux Mémoire(s) rapide(s) (cache(s)) Mémoire centrale Mémoire auxiliaire (disque) Principe d inclusion pour limiter les mises à jour entre les différents niveaux TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 4/38

Gestion de la mémoire 1.2 Besoins des processus 1 Point de vue système Allocation Trouver une zone mémoire disponible pour y stocker un programme Libération quand un programme se termine, récupérer les espaces (en faisant des regroupements s il y a eu fragmentation) qu il occupait pour les consacrer à d autres processus. Protection Garantir l intégrité de l espace mémoire associé à chaque processus Dispositif (matériel) de contrôle empêchant tout accès en dehors de l espace attribué Toute détection d une violation mémoire est récupérée par le système (déroutement) Adressage Traduction des adresses logiques en adresses physiques : fonction appelée topographie ou mapping À la traduction/édition des liens Au chargement initial À l exécution TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 5/38

Gestion de la mémoire 1.3 Pagination 1 Point de vue système 1.3.1 Généralités.................................................................. 7 1.3.2 Adresse logique.............................................................. 8 1.3.3 Table des pages............................................................. 9 1.3.4 Accélérateurs (caches d adresses)............................................ 10 1.3.5 Écroulement............................................................... 11 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 6/38

1 Point de vue système 1.3 Pagination 1.3.1 Généralités Objectif : offrir un espace adressable plus grand que la mémoire physique Principe Espace adressable de chaque programme découpé en pages Mémoire physique divisée en cadres de pages À l exécution, un processus possède Peu de pages en mémoire centrale (pages actives) Le reste est Inexistant en mémoire (pages inactives jamais écrites) En mémoire secondaire (pages inactives qui ont déjà été écrites) Le dispositif de pagination Effectue la correspondance d adresse Charge les pages nécessaires (déroutement par défaut de page) (Éventuellement) décharge des pages actives en mémoire secondaire Donc, le programme n est plus présent intégralement en mémoire centrale et il n y a plus de continuité physique TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 7/38

1 Point de vue système 1.3 Pagination 1.3.2 Adresse logique Espace adressable divisé à partir des bits de poids forts de l adresse Adresse logique sur k bits Numéro de Page Déplacement dans la page ( p bits ) ( (k p) bits ) N p 2 p pages et une page contient 2 k p octets Taille d une page À l origine : 512 octets ou 1 Ko Aujourd hui : 2 Ko, 4 Ko (k-p = 12 bits, donc p = 20 bits) et plus Choix = compromis entre divers critères opposés Dernière page à moitié gaspillée Temps de transfert d une page faible par rapport au temps d accès total Mémoire de petite capacité : petites pages d TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 8/38

1 Point de vue système 1.3 Pagination 1.3.3 Table des pages La correspondance entre adresse logique et adresse physique se fait avec une table des pages contenant Numéro de cadre de page Bits d information (présence, accès, référence, écriture, date de chargement... ) Np d Adresse logique 0 1 Np Table des Pages Information Numéro de cadre Nc Mémoire Centrale cadre 0 cadre 1 x Nc d Adresse physique cadre Nc Mot adressé cadre y TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 9/38

1 Point de vue système 1.3 Pagination 1.3.4 Accélérateurs (caches d adresses) Problème : tout accès à une information nécessite deux accès mémoire Solution : utiliser des mémoires associatives (registres d accès rapide) Principe On a un certain nombre de registres à disposition Numéro de page logique N p comparé au contenu de chaque registre Égalité trouvée en sortie numéro N c du cadre correspondant Sinon utilisation de la table des pages Np d Adresse logique R0 R1 Rz Registres d accélérateur Numéro de page Numéro de cadre Np Nc Mémoire Centrale cadre 0 cadre 1 Rt Nc d Adresse physique cadre Nc Mot adressé cadre y TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 10/38

1 Point de vue système 1.3 Pagination 1.3.5 Écroulement Effet secondaire de la pagination : écroulement (thrashing) dû à un taux de défauts de page trop important Deux facteurs principaux : taille mémoire et degré de multiprogrammation (nombre de processus) Probabilité de défaut de page 1 Probabilité de défaut de page 1 0 Taille mémoire 0 Nombre de processus Solutions Augmentation de la capacité mémoire Ordre des modules utilisés Prise en compte lors du développement Régulation de la charge (load levelling) : limitation du nombre de processus Définition d un espace vital (working set) nécessaire Gestion du taux de défauts de page : moduler le nombre de pages allouées TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 11/38

Gestion de la mémoire 1.4 Segmentation 1 Point de vue système 1.4.1 Généralités................................................................. 13 1.4.2 Descripteur de segments.................................................... 14 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 12/38

1 Point de vue système 1.4 Segmentation 1.4.1 Généralités Objectif : refléter en mémoire centrale la structure des programmes (code, données, pile) L utilisateur définit des segments (entités logiques) Programme = ensemble de segments ayant une taille et des attributs propres (lecture seule, écriture, partage) Pour disposer d une segmentation, il faut un dispositif chargé de Effectuer la correspondance entre une adresse logique et l adresse physique Assurer la protection Charger les segments en mémoire Correspondance réalisée par une table des descripteurs de segments contenant Adresse de base d implantation Longueur du segment Informations de contrôle d accès Protection assurée par un double contrôle : si le déplacement est négatif ou supérieur à la longueur du segment, alors il y a violation mémoire et déroutement TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 13/38

1 Point de vue système 1.4 Segmentation 1.4.2 Descripteur de segments Ns d Adresse logique 0 1 Descripteur de Segments Information Longueur Base Mémoire Centrale Ns lg b x b + d Adresse physique segment Ns Mot adressé b b+d b+lg 1 Doublement des accès mémoire Mêmes dispositifs accélérateurs (caches d adresses) que pour la pagination. TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 14/38

Gestion de la mémoire 1 Point de vue système 1.5 Pagination versus Segmentation Mise en oeuvre analogue, mais concepts différents Pagination = division physique vs Segmentation = division logique Pagination transparente à l utilisateur vs Segmentation déterminée par l utilisateur Taille des pages fixes vs Taille des segments variable (avec contrôle de non-dépassement) On utilise donc pagination et segmentation! Adresse logique sur k bits N de Segment Déplacement dans le segment N de Segment N de Page Déplacement dans la page Ns Np d Avantage : mémoire virtuelle (segments chargés en partie) et organisation logique Inconvénient : Surcoût (limité par l utilisation de caches d adresses dans le processeur) TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 15/38

Gestion de la mémoire 1.6 Algorithmes pour la gestion des pages 1 Point de vue système 1.6.1 Chargement................................................................ 17 1.6.2 Remplacement (déchargement)..............................................18 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 16/38

1 Point de vue système 1.6 Algorithmes pour la gestion des pages 1.6.1 Chargement Un programme démarre. On décide des pages à charger : À la demande c est-à-dire en cas de besoin Par anticipation Exemple : un programme travaille en général (principe de la séquentialité des programmes) sur des pages contiguës en y accédant de manière croissante : il accède à une page, puis à la suivante (dans la plage d adresse), puis à la suivante.... De ce fait, quand un programme accède à une page, certains systèmes (Exemple : Sun) anticipent le fait qu il accédera bientôt à la suivante : il la précharge. TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 17/38

1 Point de vue système 1.6 Algorithmes pour la gestion des pages 1.6.2 Remplacement (déchargement) Pour les systèmes paginés lorsqu il n y a plus de page libre FIFO (First In First Out) Remplacer la page la plus ancienne LRU (Least Recently Used) Remplacer la page la moins récemment utilisée LFU (Least Frequently Used) Remplacer la page la moins fréquemment utilisée Algorithme de Belady dit «optimal» (OPT ou MIN) Remplacer la page qui ne sera plus utilisée s il en existe une et sinon celle qui le sera le plus tardivement Random Remplacer une page choisie au hasard Algorithme «seconde chance» Compromis tant au niveau surcoûts qu en termes de transferts Variante de l algorithme LRU couplée au principe FIFO Un bit U associé à chaque page et mis à un lors de chaque accès L algorithme parcourt la liste des pages dans l ordre FIFO et met à 0 tout bit U qui vaut 1 ou retire la première page dont le bit U est à 0 C est l algorithme utilisé par Linux TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 18/38

Gestion de la mémoire 2 Point de vue processus 2.1 Espace d adressage d un processus............................................ 20 2.2 Observation et contrôle de l utilisation de la mémoire.......................... 21 2.3 Allocation/Désallocation dynamique de mémoire............................... 26 2.4 Déverminage des accès mémoire.............................................. 35 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 19/38

Gestion de la mémoire 2.1 Espace d adressage d un processus 2 Point de vue processus env stack Environnement Pile Variables automatiques 3 Go Tas bss data text Variables globales non initialisées Variables statiques Variables globales initialisées Code exécutable _end _data _etext 0 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 20/38

Gestion de la mémoire 2 Point de vue processus 2.2 Observation et contrôle de l utilisation de la mémoire 2.2.1 Observation de l utilisation des pages........................................ 22 2.2.2 Observation du type d accès à la mémoire................................... 23 2.2.3 Être attentif à l alignement des structures....................................24 2.2.4 Contrôle des défauts de page................................................26 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 21/38

2 Point de vue processus 2.2 Observation et contrôle de l utilisation de la mémoire 2.2.1 Observation de l utilisation des pages ps -u et top donnent des indications int getrusage (int who, struct rusage *usage) permet de connaître ru_minflt : nombre de défauts de page mineurs, c est-à-dire pages inactives jamais écrites finalement chargées en mémoire ru_majflt : nombre de défauts de page majeurs, c est-à-dire pages inactives déjà écrites et déchargées (swappées) sur disque /usr/bin/time nomexécutable affiche toutes ces informations pour le processus nomexécutable lancé en mode commande TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 22/38

2 Point de vue processus 2.2 Observation et contrôle de l utilisation de la mémoire 2.2.2 Observation du type d accès à la mémoire L outil valgrind (logiciel libre, http://valgrind.org) permet d observer tous les types d accès à la mémoire effectués par un programme valgrind --tool=cachegrind nomprogramme TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 23/38

2 Point de vue processus 2.2 Observation et contrôle de l utilisation de la mémoire 2.2.3 Être attentif à l alignement des structures Par défaut, le compilateur aligne sur des frontières de 4 octets (2 octets pour les short). Le compilateur peut donc générer des octets inutilisés au sein d une structure. Pour récupérer cet espace perdu Le mieux est de réordonnancer les feuilles des structures On peut aussi compacter toutes les structures d un source gcc -fpack-struct Ou bien compacter juste une structure donnée typedef struct {... } attribute ((packed)) unestructure; Cet alignement peut être insuffisant (besoin d aligner sur 16 octets, par exemple). Pour forcer l alignement : TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 24/38

2 Point de vue processus 2.2 Observation et contrôle de l utilisation de la mémoire typvariable nomvariable attribute ((aligned (nombre))); Utilisation de posix_memaligned pour les variables de type pointeur TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 25/38

2 Point de vue processus 2.2 Observation et contrôle de l utilisation de la mémoire 2.2.4 Contrôle des défauts de page Lutte contre les défauts de page mineurs Il suffit d écrire un octet dans la page Lutte contre les défauts de page majeurs int mlock(const void *addr, size_t len) permet de verrouiller en mémoire centrale len octets (à partir de addr) de la mémoire virtuelle du processus int munlock(const void *addr, size_t len) déverrouille int mlockall(int flags) permet de tout verrouiller en mémoire centrale. flags vaut une combinaison de MCL_CURRENT : Verrouiller toutes les pages correspondant actuellement à l espace d adressage du processus MCL_FUTURE : Verrouiller toutes les pages qui seront dans l espace d adressage int munlockall(void) déverrouille tout TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 26/38

La quantité de mémoire physique verrouillable par un processus peut être changée en appelant setrlimit. Un exemple d utilisation est disponible dans le fichier exemple_setrlimit.c: #include <sys/time.h> #include <sys/resource.h> #include <stdio.h> #include <stdlib.h> int main() { struct rlimit limits; if(getrlimit(rlimit_memlock, &limits)) abort(); printf("number of lockable memory pages:\n"); printf("\tcurrent: %ld\n", limits.rlim_cur); printf("\tmaximum: %ld\n", limits.rlim_max); limits.rlim_cur = limits.rlim_cur / 2; printf("setting limits to %ld\n", limits.rlim_cur); if(setrlimit(rlimit_memlock, &limits)) abort(); if(getrlimit(rlimit_memlock, &limits)) abort();

Gestion de la mémoire } return 0; 2 Point de vue processus

Gestion de la mémoire 2 Point de vue processus 2.3 Allocation/Désallocation dynamique de mémoire 2.3.1 Allocation/Désallocation mémoire standard.................................. 28 2.3.2 Digression : algorithmes pour malloc....................................... 30 2.3.3 Digression : algorithmes pour free.......................................... 31 2.3.4 Désallocation automatique avec alloca..................................... 32 2.3.5 Mécanisme d allocation/désallocation dédié.................................. 33 2.3.6 Allocation/Désallocation mémoire au niveau système......................... 34 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 27/38

2 Point de vue processus 2.3 Allocation/Désallocation dynamique de mémoire 2.3.1 Allocation/Désallocation mémoire standard void *malloc (size_t size) renvoie un pointeur sur une zone de size octets void *realloc (void *ptr, size_t size) change la taille d une zone mémoire réservée précédemment par malloc(3) void *calloc (size_t nmemb, sizeoi_t size) Même rôle que malloc, mais avec initialisation de la mémoire à 0 int posix_memalign(void **memptr, size_t alignment, size_t size) Même rôle que malloc, l adresse de la zone mémoire renvoyée étant un multiple de alignment _aligned_malloc est la fonction correspondante sur compilateur Microsoft ou Intel void free (void *ptr) Libération de zone TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 28/38

2 Point de vue processus 2.3 Allocation/Désallocation dynamique de mémoire void _aligned_free (void *ptr) Libération de zone mémoire allouée par _aligned_malloc int mallopt (int parametre, int valeur) Contrôle de paramètres de fonctionnement des fonctions précédentes TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 29/38

2 Point de vue processus 2.3 Allocation/Désallocation dynamique de mémoire 2.3.2 Digression : algorithmes pour malloc Dans la suite, on appelle «Trou», une zone libre de taille x i (supérieure à un minimum) et d adresse a i Meilleur choix (best fit) : trous dans l ordre croissant des tailles (x 1 < x 2 < < x n ) et choix du plus petit trou de taille suffisante Plus mauvais choix (worst fit) : trous dans l ordre décroissant des tailles (x 1 > x 2 > > x n ) et allocation de tout ou partie du premier trou Premier trouvé (first fit) : trous dans l ordre croissant des adresses (a 1 < a 2 < < a n ) et choix du premier trou de taille suffisante Frères siamois (Buddy system) basé sur l allocation de zones ayant une taille multiple d une puissance de 2 Principe : si demande de taille T, recherche de la puissance i telle que 2 i 1 < T 2 i, puis allocation d un trou de taille 2 i Algorithme récursif : si liste 2 i vide, recherche d un trou de taille 2 i+1 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 30/38

2 Point de vue processus 2.3 Allocation/Désallocation dynamique de mémoire 2.3.3 Digression : algorithmes pour free Fragmentation : demande refusée car plus de zone de taille suffisante mais somme des tailles des zones libres supérieure à la taille demandée Solution : retassement ou compactage : regrouper les zones libres pour en créer une la plus grande possible Objectif : reconstruire la liste des zones libres en cherchant à reconstruire le plus grand trou possible Plusieurs cas à envisager Zone libérée entre 2 zones occupées Zone libérée entre une zone occupée et une zone libre Zone libérée entre 2 zones libres Un algorithme performant au niveau de l allocation peut s avérer être plus complexe pour la libération Algorithme des frères siamois : la libération d une zone (un buddy) est récursive TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 31/38

2 Point de vue processus 2.3 Allocation/Désallocation dynamique de mémoire 2.3.4 Désallocation automatique avec alloca void *alloca (size_t size) alloue size octets dans l espace de pile de l appelant Donc, quand on retourne de la fonction qui a appelé alloca, l espace alloué est automatiquement libéré Problème : On risque de déborder de la pile... sans aucun avertissement du système TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 32/38

2 Point de vue processus 2.3 Allocation/Désallocation dynamique de mémoire 2.3.5 Mécanisme d allocation/désallocation dédié Principe Au démarrage du programme, on construit une liste chaînée de blocs de N octets Quand on a besoin d allouer un bloc de N octets, on récupère le premier élément de cette liste Quand on veut désallouer un bloc de N octets, on remet ce bloc en tête de liste Avantage : Vitesse d allocation/désallocation Inconvénient : Les blocs alloués/désalloués ont tous la même taille TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 33/38

2 Point de vue processus 2.3 Allocation/Désallocation dynamique de mémoire 2.3.6 Allocation/Désallocation mémoire au niveau système void *sbrk(ptrdiff_t incrément) incrémente l espace de données du programme de incrément octets void * mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) Permet de mapper un fichier en mémoire. En plus des options qui seront étudiées dans le chapitre «Entrées/sorties», flags peut prendre la valeur MAP_ANON (ou MAP_ANONYMOUS) pour indiquer qu on ne souhaite pas réellement travailler sur un fichier, mais sur une zone mémoire vierge emplie de zéros TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 34/38

Gestion de la mémoire 2.4 Déverminage des accès mémoire 2 Point de vue processus 2.4.1 Détecter statiquement les accès erronés à des zones allouées dynamiquement.. 36 2.4.2 Détecter dynamiquement les accès erronés à des zones allouées dynamiquement37 2.4.3 Visualiser quand une zone mémoire est accédée/modifée......................38 TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 35/38

2 Point de vue processus 2.4 Déverminage des accès mémoire 2.4.1 Détecter statiquement les accès erronés à des zones allouées dynamiquement Objectif : quand un programme accède à une zone allouée dynamiquement, vérifier, au moment de la compilation, que Il n accède pas en dehors de la zone (ou que la zone n est pas libérée) Il ne lit pas un octet jamais initialisé... Outils insure++ (société Parasoft) : propose un outil d analyse des sources splint (logiciel libre, http://www.splint.org/) : outre des contrôles «paranoïaques» sur le source, vérifie certains problèmes d accès mémoire Limite = Les vérifications ne peuvent dépasser le cadre d un source TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 36/38

2 Point de vue processus 2.4 Déverminage des accès mémoire 2.4.2 Détecter dynamiquement les accès erronés à des zones allouées dynamiquement Objectif : quand un programme accède à une zone allouée dynamiquement, vérifier, à l exécution, que Il n accède pas en dehors de la zone (ou que la zone n est pas libérée)... Outils insure++ (société Paradox) : au moment de la compilation, cet outil ajoute aux sources (.c) des instructions de contrôle au niveau des différentes instructions d affectation Rational Purify (société IBM) : au moment du link, cet outil ajoute aux objets (.o) des instructions de contrôle au niveau des différentes instructions (assembleur) d affectation valgrind (logiciel libre, http://valgrind.org) : l exécutable est lu par un simulateur de processeur x86 qui se charge de détecter toutes les anomalies d accès Limite = On n est jamais sûr d être passé par toutes les branches TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 37/38

2 Point de vue processus 2.4 Déverminage des accès mémoire 2.4.3 Visualiser quand une zone mémoire est accédée/modifée Watchpoint sous gdb gdb offre la possibilité de mettre en place des watchpoint sur des zones mémoire, en lecture ou en lecture/écriture. Si une telle zone mémoire est accédée, gdb stoppe le programme. Contrôle de l accès à la mémoire int mprotect(const void *addr, size_t *len, int prot) contrôle les autorisations d accès (lecture et/ou écriture) à une portion de la mémoire. Si un accès interdit se produit, le programme reçoit SIGSEGV Utilisation : toute situation où une donnée est modifiée et le contexte ne permet pas d utiliser des outils de type valgrind ou gdb TELECOM SudParis Michel Simatic Avril 2015 module CSC4508/M2 38/38

Gestion de la mémoire Bibliographie du chapitre