Chapitre 4 GESTION DE LA MÉMOIRE 4.1 Gestion élémentaire de la mémoire 4.2 Le va-et vient (swaping) 4.3 La mémoire virtuelle 4.4 Algorithmes de remplacement de pages 4.8 La segmentation 1 GESTION DE LA MÉMOIRE Idéalement, on voudrait que la mémoire soit Hiérarchie de la mémoire grande rapide non volatile bon marché Petite quantité de mémoire rapide et volatile mais chère (cache) Quelques mégaoctets de mémoire volatile de vitesse et prix moyen (mémoire principale) Quelques gigaoctets de mémoire plus lente, non volatile et bon marché (disque) Cette hiérarchie est gérée par le gestionnaire de la mémoire 2 GESTION ÉLÉMENTAIRE DE LA MÉMOIRE MONOPROGRAMMATION SANS VA-ET-VIENT NI PAGINATION Un seul procesus en mémoire à la fois Les adresses utilisées dans les programmes correspondent à des adresses réelles en mémoire. Trois façons simples d'organiser la mémoir: Dans b et c, le haut de la mémoire corespond à la mémoire morte (ROM) 3 MULTIPROGRAMMATION AVEC PARTITIONS Partitions de taille fixe files d'attente différentes pour chaque partition Inconvénient: les grandes partitions peuvent être inutilisées Une seule file d'attente On choisi une tâche pouvant être placée dans la prochaine partition libre 4 MODÉLISATION DE LA MULTIPROGRAMMATION La multiprogrammation permet d’augmenter l’utilisation du CPU p = fraction du temps passé à attendre la fin d’une E/S Taux d'utilisation du CPU ( 1-pn ) en fonction du nombre de processus en mémoire. 5 ANALYSE D’UN SYSTÈME DE TRAITEMENT PAR LOT a) b) Temps d'arrivé et travail pour 4 tâches Taux d'utilisation du CPU avec 80% d'entrée/sortie 6 ANALYSE D’UN SYSTÈME DE TRAITEMENT PAR LOT c) Succession des événements alors que les tâches arrivent et se terminent. Durant les 10 première minutes la tâche 1 est seule et utilise 20% du temps CPU (2 minutes) Durant les 5 minutes suivantes il y a 2 tâches, chacune utilisant 18% du temps CPU (0,9 minute ) Durant les 5 minutes suivantes il y a 3 tâches, chacune utilisant 16% du temps CPU (0,8 minute) Durant les 2 minutes suivantes il y a 4 tâches, chacune utilisant 15% du temps CPU (0,3 minute) 7 RÉALLOCATION ET PROTECTION On ne peut pas prévoir où en mémoire un programme sera chargé 2 solutions: 1. 2. Les adresses ne peuvent pas être absolues Un programme ne doit pas adresser l'espace d'un autre Au moment de mettre un programme en mémoire on modifie toutes les adresses On utilise deux registres spéciaux Registres de base et de limite Chaque adresse est additionnée au registre de base pour déterminer l'adresse physique Il y a erreur si l'adresse est plus grande que la valeur du regisre de limite. 8 LE VA-ET-VIENT (1) Il n’est pas rare d’avoir entre 40 et 60 processus de lancés au démarrage d’une machine. Une application typique consomme entre 50 et 200 Mo de mémoire. Souvent plus (ex. IE explorer, Safari ou Firefox) On est donc rapidement à court de mémoire. La méthode du va-et-vient (swapping) consiste à déplacer un processus de la mémoire vers le disque afin de libérer de l’espace pour y introduire un autre processus (nouvellement créé ou ayant préalablement été déplacer vers le disque). 9 LE VA-ET VIENT (2) L'allocation de la mémoire change au gré des processus qui viennent en mémoire et ceux qui quittent la mémoire Les zones grises indiquent la mémoire non utilisée 10 LE VA-ET-VIENT (3) a) b) Allocation d'espace pour l'accroissement du segment de données Allocation d'espace pour l'accroissement de la pile et du segment de données (espace alloué dynamiquement) Quand il y a trop de trous il est nécessaire de compacter la mémoire 11 GÉRER LA MÉMOIRE (1) 1. Utilisation d’une table de bits: La mémoire est divisée en unités d’allocation dont la taille peut varier de quelques mots à plusieurs kilo-octets Une table de bits est utilisée pour indiquer si une unité d’allocation est libre ou non. La taille de la table dépend de: 1. 2. La taille de la mémoire La taille des unités d’allocation Avantage: simplicité Inconvénient: La recherche d’un espace de k unités libres est une opération lente. 12 GÉRER LA MÉMOIRE (2) 2. Utilisation de listes chaînées: Liste chaînée des segments de mémoire alloués et libres Un segment (noeud de la liste) est soit un processus, soit un trou entre deux processus Chaque noeud contient l’état du segment (P: Processus, T:Trou), l’adresse du début du segment et sa longueur. La liste peut être triée par adresses Chaque entrée de la table des processus contient un pointeur vers le noeud correspondant (si le processus est en mémoire). 13 GÉRER LA MÉMOIRE (3) a) Une partie de la mémoire avec 5 processus, 3 trous b) c) Les petites marques verticales indiquent les unités d'allocation Les zones grises sont libres Le tableau de bits correspondant Mêmes informations sous la forme d'une liste chaînée 14 GÉRER LA MÉMOIRE AVEC UNE LISTE CHAÎNÉE Lorsqu’un processus X se termine, on regarde son voisinage dans la liste des segments. Il y a quatre situations possibles: Il y a avantage a utiliser une liste de segments doublement chaînée afin de faciliter la recherche du noeud précédent. 15 ALGORITHMES D’ALLOCATION DE LA MÉMOIRE 1. Première zone libre (first fit) 2. On trouve le premier trou suffisamment grand pour contenir le processus. Le trou est ensuite divisé en deux parties: une pour le processus et l’autre pour la mémoire inutilisée. Zone libre suivante (next fit) Identique à l’algorithme précédent sant que la recherche commence au dernier espace libre trouvé. Les performance sont légèrement meilleures 16 ALGORITHMES D’ALLOCATION DE LA MÉMOIRE 3. Meilleur ajustement (best fit) 4. Parcourt toute la liste et recherche le plus petit trou pouvant contenir le processus. Évite de partitionner inutilement les gros trous Cet algorithme crée des trous minuscules inutilisables par la suite Plus lent que les algorithmes précédents Plus grand résidu (worst fit) On prend le plus grand trou disponible Le trou restant est assez grand pour être réutilisé Des simulations démontrent que cette solution n’est pas meilleure que la précédente. 17 ALGORITHMES D’ALLOCATION DE LA MÉMOIRE Un peut utiliser deux listes distinctes (zones libres et occupées par un processus) Accélère les algorithmes précédents Ralentissement quand la mémoire est libérée Si la liste des trous est triée par taille alors best-fit et first-fit sont essentiellement équivalents. Un segment libéré est enlevé de la liste des processus et inséré dans la liste des trous On peut utiliser les zones libres elle même pour la liste des zones libres. 18 ALGORITHMES D’ALLOCATION DE LA MÉMOIRE 5. Placement rapide (quick fit) On gère des listes séparées pour certaines des tailles les plus communes Par exemple, on peut avoir des listes de 4K0, 8K0, 12Ko, etc. Très rapide. Rend plus complexe le processus de libération de la mémoire: On doit chercher les trous adjacents pour une vérifier si une fusion est possible. Tous ces algorithmes souffrent du problème de la fragmentation de la mémoire. 19 MÉMOIRE VIRTUELLE (1) Solution au problème des programmes trop gros pour entrer en mémoire. Chaque programme possède son propre espace d’adressage découpé en petite entités appelées pages. Cet espace d’adressage représente une mémoire virtuelle qui peut être plus grande que la mémoire physique. Chaque page est une suite d’adresses contiguëes de la mémoire virtuelle. La taille des page est fixe (typiquement entre 512 octets à 64Ko) Une adresse virtuelle est une adresse de la mémoire virtuelle. 20 MÉMOIRE VIRTUELLE (2) Il n’est pas nécessaire d’avoir toutes les pages en mémoire physique pour exécuter le programme. Chaque page est indivisible: Elle est entièrement en mémoire physique ou elle n’y est pas du tout. Les pages qui ne sont pas en mémoire sont placées sur le disque. Une table indique quelles sont les pages en mémoire ainsi que l’adresse physique de celles-ci. Le tout est géré de façon transparente par l’ unité de gestion de la mémoire (MMU) 21 LA PAGINATION (1) Localisation et fonction du MMU 22 LA PAGINATION (2) La relation entre les adresses virtuelles et physiques est indiquée dans la table des pages Dans l’exemple, un ordinateur peut produire des adresses sur 16bits (64 Ko) mais il n’y a que 32 Ko de mémoire physique. La mémoire virtuelle est divisée en pages de 4K La mémoire physique est divisée en cadre de page (page frame) 23 LA PAGINATION (3) Par exemple, L’adresse virtuelle 0 est transformée en adresse physique 8192=2*4096 L’adresse virtuelle 8192=2*4096 est transformée en adresse physique 24576=6*4096 L’adresse virtuelle 20500=5*4096+20 est transformée en adresse physique 12308=2*4096+20 24 LA PAGINATION (4) Sur les systèmes Unix on peut obtenir la taille des pages à l’aide de la commande: pagesize Sur sunensdev la taille des page est de 8Ko Sur Mac OS X la taille des pages est de 4Ko 25 TABLE DES PAGES (1) Fonctionnement interne du MMU avec 16 pages de 4Ko 26 TABLE DES PAGES (2) Deux problèmes: 1. La table des pages peut être très grande 2. Trouver l'adresse réelle à partir de l'adresse virtuelle doit se faire très rapidement Deux cas extrèmes (et non applicables): La table est entièrement implémentée par le matériel à l'aide d'un tableau de registres. Un seul registre pointant sur le début de la table qui est entièrement chargée en mémoire. 27 TABLE DES PAGES (3) Entrée typique d'une table des pages Présent/Absent: si 0 cela provoque un défaut de page Protection: lecture, écriture, exécution Modifié (dirty bit) : Si aucune modification, il n’est pas nécessaire de sauverager sur le disque. Lors d’une écriture, automatiquement mis à 1 Référencié: Permet de décider si la page peut être remplacer par une autre Cache inhibée: Utile pour les attentes d’E/S (on veut accéder aux données du périphérique plutôt qu’à la cache 28 SUITE LA SEMAINE PROCHAINE 29 TABLE DES PAGES MULTINIVEAUX Adresse 32 bits avec 2 champs de table des pages Table des pages à deux niveaux 30 TLBS – TRANSLATION LOOKASIDE BUFFERS (MÉMOIRE ASSOCIATIVE) Valide Page virtuelle Modifié Protection Cadre de page indices code données données code code pile code Une TLB pour accélérer la pagination 31 TABLES DES PAGES INVERSÉES 252-1 216-1 216-1 Comparaison entre une table des pages traditionnelle et une table des pages inversée. De plus en plus utilisé (surtout avec le développement des machines 64 bits) Utilisé sur les machines 64 bits telles que PowerPC et UltraSparc 32 ALGORITHMES DE REMPLACEMENT DE PAGES Une faute de page force le SE à choisir: Les pages modifiées doivent d'abord être sauvegardées quelle page doit être enlevée faire de la place pour la nouvelle page sinon on peut simplement les écraser Il est préférable de ne pas choisir une page souvent utilisée sinon il faudra la recharger bientôt 33 L'ALGORITHME OPTIMAL Remplacer la page qui sera utilisée après toutes les autres Optimal mais irréalisable On exécute deux fois un programme La seconde fois on a l'information nécessaire pour implémenter l'algorithme de remplacement de page optimal Permet de comparer les performances d'algorithmes réalisable avec l'algorithme optimal. 34 ALGORITHME DE REMPLACEMENT DE LA PAGE NON RÉCEMMENT UTILISÉE (NRU) Chaque page possède deux bits: R et M 4 classes de pages 1. 2. 3. 4. ces bits sont mis à 1 lorsque la page est référencée ou modifiée (le bit R est remis à 0 périodiquement). non référencée, non modifiée non référencée, modifiée référencée, non modifiée référencée, modifiée NRU enlève une page au hazard en partant du plus petit numéro de classe 35 ALGORITHME PREMIER ARRIVÉ, PREMIER SORTI On maintient un liste des pages dans l'ordre de leur chargement en mémoire La page au début de la liste (la plus ancienne) est remplacée Désavantage les vieille pages peuvent aussi être celles qui sont le plus utilisées. 36 ALGORITHME DE LA SECONDE CHANCE Opération seconde chance: pages triées selon l'ordre d'arrivé Si le bit R de la page la plus ancienne est 1 alors on la met à la fin de la liste (comme une nouvelle page) et on met son bit R à 0. 37 ALGORITHME DE L'HORLOGE Comme l'algorithme précédent mais l'utilisation d'une liste circulaire évite de déplacer les pages. 38 ALGORITHME DE LA PAGE LA MOINS RÉCEMMENT UTILISÉE (LRU) On suppose que les pages qui ont été utilisées récemment le seront à nouveau prochainement Tenir à jour une liste chaînée de pages on enlève les pages qui n'on pas été utilisées depuis longtemps page la plus récemment utilisée en premier mettre à jour cette liste à chaque référence mémoire: Couteux!! Alternative: On utilise un compteur C incrémenté après chaque instruction on copie C dans la page des tables pour l'entrée de la page référencées choisir la page avec la plus petite valeur de compteur Aide matériel nécessaire 39 ALGORITHME DE LA PAGE LA MOINS RÉCEMMENT UTILISÉE (LRU) Autre solution matérielle: Pour une machine à n cadres de page Matrice nn Quand une page k est référencée mettre à 1 tous les bits de la rangée k mettre à 0 tous les bits de la colonnne k 40 EXEMPLE Référence des pages: 0,1,2,3,2,1,0,3,2,3 41 ALGORITHME DU VIEILLISSEMENT Un compteur logiciel par page (initialisé à 0) À chaque interruption d'horloge, on examine toutes les entrées de la table des pages On décale à droite le compteur et on ajoute à gauche le bit R 42 ALGORITHME DU VIEILLISSEMENT Différence avec LRU: Si deux pages sont référencées entre deux interruptions alors on ne peut pas dire laquel a été référencée en dernier Considérez par exemple les pages 3 et 5 de l’exemple précédent. Les compteurs ont un nombre limité de bits On ne peut pas distinguer deux pages dont tous les bits sont à 0 43 L'ALGORITHME DE L' ENSEMBLE DE TRAVAIL • Pagination à la demande (demand paging): Les processus sont lancés sans qu’aucune page ne soit en mémoire. Cela résulte en un grand nombre de fautes de pages en début d’exécution. • Le chargement des pages avant l’exécution est appelé: préchargement • Le modèle de l ‘ensemble de travail est conçu pour réduire le nombre de défauts de pages • Temps virtuel courant: temps CPU utilisé depuis son démarrage • L’ensemble de travail est constitué des pages référencés au cours des t dernière secondes de temps virtuel. T doit être assez grand pour couvrir de nombreux tops d’horloge. • Au démarrage d’un processus, un ensemble de travail quelconque peut être sélectionné • Par exemple, la page contenant la fonction main d’un programme C devrait faire partie de l’ensemble de travail initial. 44 L'ALGORITHME DE L' ENSEMBLE DE TRAVAIL • Périodiquement toutes les pages ont leur bit R mis à 0 • À chaque faute de page, la table des pages est parcourue pour déterminer quelles pages demeurent dans l’ensemble de travail • Pour chacune des entrées: • Si le bit R vaut 1: • La page fait partie de l’ensemble de travail • Le temps virtuel courant (TVC) est copié dans un champs spécial indiquant le temps de la dernière utilisation (TDU) • Si R vaut 0: • On calcule Age=TVC-TDU • Si Age > t alors la page est enlevée de l’ensemble de travail • Sinon la page demeure dans l’ensemble de travail • La page la plus âgée qui ne fait pas partie de l’ensemble de travail est enlevé • Si toutes les pages font partie de l’ensemble de travail alors on enlève la page la plus âgée dont le bit R vaut 0 • Si une telle page n’existe pas, on enlève une page quelconque (de préférence une qui n’a pas été modifiée). 45 L'ALGORITHME DE L' ENSEMBLE DE TRAVAIL 46 L'ALGORITHME WSCLOCK (WORKING SET CLOCK) • Utilise l’algorithme de l’horloge et les informations de l’ensemble de travail • Liste circulaire initialement vide • L’exemple suivant indique se qui se passe lorsque le bit R vaut 1 47 L'ALGORITHME WSCLOCK Si le bit R vaut 0 alors Si Age > t et que le clean bit M vaut 0 alors on peut remplacer la page Si Age > t et M = 1 alors L’écriture de la page sur le disque est ordonnancée En attendant on poursuit la recherche d’une page à remplacer 48 RÉSUMÉ DES ALGORITHMES DE REMPLACEMENT DE PAGES Algorithme Commentaires Optimal Utilisé comme banc d'essai NRU Très grossier FIFO Peut écarter des pages importantes Seconde chance Grande amélioration de FIFO Horloge Réaliste LRU Excellent mais difficile à implanter NFU Approximation grossière de LRU Vieillissement Approximation efficace de LRU Ensemble de travail Coûteux WSClock Bonne efficacité 49 SUITE LA SEMAINE PROCHAINE 50 ANOMALIE DE BELADY Algorithme FIFO avec 3 cadres de pages Algorithme FIFO avec 4 cadres de pages La lettre P indique les fautes de pages L'algorithme LRU n'a pas fce problème 51 SEGMENTATION (1) Comment libérer le programmeur de la gestion de l’accroissement et de la diminution des tables? Un solution consiste à doter la machine de plusieurs espaces d’adresses indépendants appelés segments. Une adresse est constituée de deux parties: <segment, déplacement> Mémoire logique: Mémoire virtuelle segmentée Mémoire linéaire: mémoire virtuelle paginée 52 SEGMENTATION (0) Dans un espace d'adressage à une dimension, une table des pages qui croît peut en chevaucher une autre. 53 SEGMENTATION (3) Une mémoire segmentée permet à chaque table de croître ou de diminuer indépendamment des autres. Exemple: compilateur 54 SEGMENTATION (4) Considérations Le programmeur doit-il connaître la techique utilisée? Pagination Segmentation Non Oui 1 Plusieurs L'espace total d'adressage peut-il dépasser la taille de la mémoire physique? Oui Oui Les procédures et les données peuvent-elles être séparées et protégées séparément? Non Oui Peut-on traiter facilement des tables dont les tailles varient? Non Oui Le partage de procédures entre utilisateurs est-il simplifié? Non Oui Combien y a-t-il d'espaces d'adressage linéaires? Comparaison entre la segmentation et la pagination 55 SEGMENTATION (5) Pagination: • Sert à obtenir un grand espace d'adressage linéaire sans avoir à acheter de la mémoire physique. Segmentation: • Permet la séparation des programmes et des données dans des espaces d'adressage logiquement indépendants. • Facilite le partage et la protection. 56 IMPLÉMENTATION DE LA SEGMENTATION PURE (a)--(d) Dévelopement de la fragmentation externe (phénomène du damier) (e) Compactage 57 SEGMENTATION AVEC PAGINATION: MULTICS (1) Une table des segments contient 218 entrées. Chaque entrée contient un descripteur de segment qui pointe sur une table des pages 216 mots de 36 bits par table des pages Adresse physique sur 24 bits 58 SEGMENTATION AVEC PAGINATION: MULTICS (2) Un descripteur de segment L'adresse est complétée par 6 zéros car les adresse physiques de 24 bits sont alignées sur des pages de 64 octets. L’adresse des segments sur le disque se trouvent dans une autre table. 59 SEGMENTATION AVEC PAGINATION: MULTICS (3) • Chaque segment est un espace d’adressage virtuel ordinaire • Les segments peuvent être paginés ou non paginés • Les espaces paginés utilisent des pages de 1024 ou de 64 octets Une adresse virtuelle MULTICS sur 34 bits: 60 SEGMENTATION AVEC PAGINATION: MULTICS (4) Conversion d'une adresse virtuelle MULTICS en une adresse réelle 61 SEGMENTATION AVEC PAGINATION: MULTICS (5) Les adresses des 16 pages les plus récemment référencées sont gardées dans une mémoire associative Version simplifiée de la TLB de MULTICS 62 SEGMENTATION AVEC PAGINATION LE PENTIUM D'INTEL (1) Utilise 2 tables (en mémoire): LDT (Local Descriptor Table) GDT (Global Descriptor Table) Pour accéder à un segment, un programme doit charger un sélecteur de ce segment (16 bits) dans un registre spécial 6 registres de segments: CS: contient un sélecteur du segment de code DS: contient un sélecteur du segment de données Les autres sont moins importants Au moment où un un sélecteur est chargé dans un registre de segment, le descripteur correspondant est est extrait de la LDT ou de la GDT 2*213 segments 230 mots de 32 bits par segment 63 LE PENTIUM D'INTEL (2) Un descripteur du segment de code d'un Pentium (Les segments de données diffèrent légèrement) 64 octets par descripteur Les 3 bits les moins significatifs du sélecteur sont mis à 0 On ajoute l’adresse de la LDT (ou de la GDT) pour avoir un pointeur sur le descripteur de segment corespondant. Un bit dans un registre système indique si la pagination est désactivée 64 LE PENTIUM D'INTEL (3) Conversion d'une paire (selecteur, déplacement) en une adresse linéaire. Si la pagination est désactivée alors l'adresse linéaire correspond à une adresse physique (segmentation pure) On peut annuler la segmentation: On utilise toujours le même sélecteur On met le champs Base à 0 (pagination pure) La valeur maximum est mise dans le champs limite. 65 LE PENTIUM D'INTEL (4) Mappage d'une adresse linéaire en une adresse physique Table des pages à 2 niveaux 66 LE PENTIUM D'INTEL (5) Le mécanisme de protection du Pentium Les deux bits de protection se trouvent dans le PSW (Program Status Word) On ne peut pas faire appel à une procédure d’un niveau inférieur On doit fournir un sélecteur appelé call gate qui donne l’adresse de la procédure à appeler Seul les points d’entrée officiels peuvent être utilisés 67 QUELQUES APPELS SYSTÈME SOUS UNIX brk, sbrk: permet de modifier dynamiquement la quantité d’espace mémoire utilisée getrlimit: retourne la taille maximale que peut avoir le segment de données mmap : établi un mappage entre un espace mémoire et un fichier ou une mémoire partagée. munmap : libère l’espace mémoire alloué par mmap mlock : Pour verrouiller des pages en mémoire munlock : Pour déverrouller des pages 68 QUELQUES APPELS SYSTÈME SOUS WINDOWS VirtualAlloc: Similaire à malloc (la mémoire est allouée en pages) VirtualFree: Similaire à free VirtualLock : Similaire à mlock. VirtualUnock : Similaire à munlock. MapViewOfFile : Similaire à mmap UnmapViewOfFile : Similaire à munmap 69