La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Chapitre 9 (6 heures – 2 cours)

Présentations similaires


Présentation au sujet: "Chapitre 9 (6 heures – 2 cours)"— Transcription de la présentation:

1 Chapitre 9 (6 heures – 2 cours)
Gestion de la mémoire Chapitre 9 (6 heures – 2 cours) w3.uqo.ca/luigi Chap. 9

2 Pagination, segmentation
Dans ce chapitre nous verrons que, pour optimiser l’utilisation de la mémoire, les programmes sont éparpillés en mémoire selon des méthodes différentes: Pagination, segmentation Chap. 9

3 Gestion de mémoire: objectifs
Optimisation de l’utilisation de la mémoire principale RAM Les plus grand nombre possible de processus actifs doit y être gardé, de façon à optimiser le fonctionnement du système en multiprogrammation garder le système le plus occupé possible, surtout l’UCT s’adapter aux besoins de mémoire de l ’usager, qui varient dans le temps allocation dynamique Chap. 9

4 Gestion de la mémoire: concepts dans ce chapitre
Adresse physique et adresse logique mémoire physique et mémoire logique Remplacement Allocation contiguë partitions fixes variables Pagination Segmentation Segmentation et pagination combinées Groupes de paires (buddy systems) Chap. 9

5 Application de ces concepts
Pas tous les concepts que nous discuterons sont effectivement utilisés tels quels aujourd’hui dans la gestion de mémoire centrale RAM Cependant presque tous se retrouvent en combinaison dans la gestion des différentes mémoires d’un ordi, centrales ou auxiliaires, p.ex. disques Chap. 9

6 Adresses physiques et logiques, Régistres de rélocation
Chap. 9

7 Mémoire/Adresses physiques et logiques
Mémoire physique: la mémoire principale RAM de la machine Adresses physiques: les adresses de cette mémoire Mémoire logique: l’espace d`adressage d’un programme Adresses logiques: les adresses dans cet espace Il faut séparer ces concepts car normalement, les programmes sont chargés de fois en fois dans positions différentes de mémoire Donc adresse physique ≠ adresse logique Chap. 9

8 Donc LOAD(n)=>LOAD(n+b) n Adresses logiques
b n: adresse logique n+b: adresse physique Donc LOAD(n)=>LOAD(n+b) n Adresses logiques LOAD(n) Un programme chargé à la position de mémoire b doit ajouter b à tous ses adresses internes (logiques) pour obtenir l’adresse réelle=physique Chap. 9

9 Donc LOAD(n)=>LOAD(n+c) n+c
Programme Données b c n : adresse logique n+c : adresse physique Donc LOAD(n)=>LOAD(n+c) n+c LOAD(n) Un programme qui fait référence à un segment de données chargé à la position c Chap. 9

10 Un programme, chargé à l’adresse b, qui travaille pour deux processus:
Données pour X Programme Données pour Y b d c LOAD(n) n+c n+d Un programme, chargé à l’adresse b, qui travaille pour deux processus: X qui a les données dans un segment chargé à la position de mémoire c, et Y qui a les données dans un segment de données chargé à la position de mémoire d On doit ajouter c ou d à ses adresses logiques selon qu’il travaille pour X ou Y Donc LOAD(n)=>LOAD(n+c) si l’UCT travaille pour X Ou LOAD(n)=>LOAD(n+d) si l’UCT travaille pour Y Concept fondamental pour comprendre le partage de code et les machines virtuelles (Ex.: un programme de traitement de texte utilisé pour éditer deux documents) Chap. 9

11 Les adresses physiques n’ont pas besoin d’être contigus
10 000 JUMP 328 Autres données JUMP 10328 Mémoire logique Mém. physique Chap. 9

12 Principe Les programmes et données peuvent être placés n’importe où en mémoire, à condition qu’il y ait un mécanisme pour: Calculer les adresses physiques en ajoutant l’adresse de base à l’adresse logique Si nous voulons que le placement puisse être facilement changé, les adresses de base doivent se trouver dans des registres d’UCT et l’ajout doit être fait au moment où l’instruction est interprétée par l’UCT Chap. 9

13 Traduction adresses logiques adr. physiques
346 Instruction (program) Data Segment MMU: unité de gestion de mémoire unité de traduction adresses (memory management unit) Chap. 9

14 Differents types d’adresses
Noms symboliques donnés par le programmeur Adresses logiques établis par le compilateur Adresses physiques dans la mémoire de l’ordi établis au moment où le programme est mis en mémoire physique L’MMU en tient compte et fait la traduction au moment de l’exécution Chap. 9

15 Adresses logiques Une adresse logique est une adresse dans un programme (à une instruction ou variable) par rapport au programme lui-même seulement indépendante de la position du programme en mémoire physique Chap. 9

16 Édition de liens et chargement
Chap. 9

17 Liaison et chargement v. fig. plus complète dans manuel
Autres Mods (librairie) Liaison et chargement v. fig. plus complète dans manuel Modules Objet Progr. Source Compilateur Éditeur de liens Modules Liés Progr. exécutable Chargeur NB: on fait l`hypothèse que tous les modules soient connus au début Souvent, ce n’est pas le cas  chargement dynamique Chap. 9

18 Deux concepts de base Chargement = Loading. Le programme, ou une de ses parties, est chargé en mémoire physique, prêt à exécuter. Statique (avant l’exécution) Dynamique (pendant l’exécution) Édition de liens = Liaison (enchaînement) des différentes parties d’un programme pour en faire une entité exécutable. les références entre modules différents doivent être traduites statique (avant l`exécution) dynamique (sur demande pendant exécution) N.B. parties du programme = classes = modules = segments = sousprogrammes = objets, etc. Chap. 9

19 Liaison (Binding) d’adresses logiques et physiques (instructions et données)
La liaison des adresses logiques aux adresses physiques peut être effectuée en moments différents: Compilation: quand l’adresse physique est connue au moment de la compilation (rare) p.ex. parties du SE qui sont fixes en RAM Chargement: quand l’adresse physique où le progr est chargé est connue, les adresses logiques peuvent être traduites Allocation statique Rare aujourd’hui car elle ne permet pas le déplacement du programme pendant exécution Exécution: normalement, les adresses physiques ne sont connues qu’au moment de l ’exécution allocation dynamique Chap. 9

20 Édition de liens (linkage editing)
Chap. 9

21 Édition de liens: adressage entre modules
JUMP(D, 100) B Progr. Princ. LOAD(C,250) Données Espace d’adressage logique C D Données LOAD(B,50) Sous- progr. Les adresses sont en deux parties : (No de module, Décalage dans le module) doivent être traduites pour permettre adressage par l ’UCT Chap. 9

22 Adressage entre modules (édition de liens)
Comment une instruction dans un module d’un programme peut trouver une adresse dans un autre module qui pourra être chargée dans une zone de mémoire à chaque fois différente Chap. 9

23 Par rapport à Java Le compilateur Java crée un module différent pour chaque classe (D’autres langages de programmation pourraient utiliser des critères différents) Les classes ont besoin de faire référence les unes aux autres Chap. 9

24 Analogie pour édition de liens
Deux compagnies A et B collaborent, donc parfois un employé x de A doit téléphoner à un employé y de B La première fois que ceci se vérifie, l’employé x de A va regarder dans le répertoire de B pour trouver le numéro de téléphone de y Après l’avoir trouvé, x garde le no de y dans sa liste de contacts et ne doit plus regarder dans le répertoire de B Chap. 9

25 Chaque module aura: Un tableau d’adresses internes, qui font référence au module lui-même Un tableau d’adresses externes, qui font référence à d’autres modules Ces tableaux sont créés par le compilateur Adr. internes Adr. externes Module Chap. 9

26 Exemple: un programme avec deux modules
Programme principal B int x Sous-programme A int y x = sqrt(y) Quelles sont les adresses internes et externes de A? Chap. 9

27 Exemple: un programme avec deux modules
Programme principal B int x Sous-programme A int y x = sqrt(y) Adr.internes: A, y Adr externes: x, sqrt Module A Chap. 9

28 Édition de liens: une méthode possible qui supporte la liaison dynamique Nous verrons plus tard comment la segmentation appuie ce processus Adresses internes de A Adresses internes de B Nom Adresse Nom x Adresse Adresses externes de A Adresses externes de B Nom x Défini dans Module B Nom Défini dans Module Module A corps Module B corps Référence à x dans B x dans B Addressage final Chaque module contient deux tableaux un qui définit les noms internes qui peuvent être utilisés à l’extérieur un qui dit dans quels modules ses noms externes sont définis Chap. 9

29 Adressage indirecte peut être utilisé dans cette méthode (v
Adressage indirecte peut être utilisé dans cette méthode (v. aussi chaînes d’adresses en C ou C++) champ adressé 1 1 1 1: adresse indirecte: le champ contient une adresse 0: ce mot est le champ qui contient la donnée visée code op adresse instruction Chap. 9

30 Cette méthode supporte l’allocation dynamique
Si le module B n’a pas encore été chargé, la référence à B dans le tableau des noms externes de A contiendra l ’information nécessaire pour trouver et charger B Ceci s’appelle un STUB. Après chargement de B, cette référence sera traduite dans une adresse de mémoire physique. Si B reste toujours au même endroit, nous pouvons mettre dans A directement l’adresse finale (flèche pointillée), sinon nous pouvons continuer de rejoindre B par adressage indirecte Chap. 9

31 Chargement Chap. 9

32 Aspects du chargement Trouver de la mémoire libre pour un module de chargement: contiguë ou non Traduire les adresses du programme et effectuer les liaisons par rapport aux adresses où le module est chargé Chap. 9

33 Chargement et liaison dynamique
Un processus exécutant peut avoir besoin de différents modules du programme en différents moments Le chargement statique peut donc être inefficace Il est mieux de charger les modules sur demande = dynamique dll, dynamically linked libraries Dans un programme qui peut avoir besoin de charger des modules dynamiquement, au début ces derniers sont représentés par des stubs qui indiquent comment arriver au modules (p.ex. où il se trouve: disque, www, autre...) À sa 1ère exéc. le stub cause le chargement du module en mémoire et sa liaison avec le reste du programme liaison dynamique Les invocations successives du module pourraient ne pas passer à travers ça, on saura l’adresse physique Chap. 9

34 Traduction d’adresses logique  physique
Dans certains systèmes très simples, un programme est toujours chargé dans la même zone de mémoire La multiprogrammation et l’allocation dynamique engendrent le besoin de charger un programme dans positions différentes Dans les systèmes simples, ceci peut être fait par le chargeur (loader) qui change les adresses avant de lancer l’exécution Plus normalement, ceci est fait par le MMU au fur et à mesure que le progr. est exécuté Ceci ne cause pas d’hausse de temps d ’exécution, car le MMU agit en parallèle avec autres fonctions d ’UCT P.ex. l’MMU peut préparer l ’adresse d ’une instruction en même temps que l ’UCT exécute l’instruction précédente Chap. 9

35 Techniques traditionnelles d’allocation mémoire
Recouvrement, overlay, permutation Allocation contiguë Partitions fixes Partitions dynamiques Systèmes de compagnons (buddy systems) Fragmentation interne, externe

36 Recouvrement, overlay, permutation
Chap. 9

37 ‘Phases’ ou ‘passes’ d’un processus
Plusieurs processus peuvent être divisés en phases ou passes qui n’ont pas besoin d’être simultanément en mémoire P.ex. un processus qui prend des données générées par des usagers à partir de téléphones mobiles pourrait consister en deux phases: Normalisation des données Extraction de statistiques La 2ème phase commence après la fin de la 1ère Quand la 1ère phase finit, la mémoire qu’elle utilisait peut être donnée à la 2ème phase Chap. 9

38 Recouvrement ou overlay
Dans quelques systèmes surtout dans le passé), la permutation de modules (swapping) d’un même programme pouvait être gérée par l ’usager Deux parties d’un programme qui utilisent la même zone de mémoire Chap. 9

39 Permutation de programmes (swapping)
Un programme, ou une partie de programme, peut être temporairement enlevé de mémoire pour permettre l’exécution d’autres programmes (chap. 4) il est mis dans mémoire secondaire, normal. disque Chap. 9

40 Permutation de programmes (swapping)
Processus ou portion de proc. permuté sur disque pour « sauver la mémoire » quand ils ne sont pas actifs Chap. 9

41 Allocation contiguë Chap. 9

42 Allocation contiguë de mémoire
Nous avons plusieurs programmes à exécuter Nous pouvons les charger en mémoire les uns après les autres le lieu où un programme est lu n’est connu qu’au moment du chargement Besoins de matériel: registres translation et registres bornes L’allocation contiguë est peu utilisée aujourd’hui pour la mémoire centrale, mais les concepts que nous verrons sont encore utilisés pour l’allocation de fichiers sur disques Chap. 9

43 Affectation contiguë de mémoire
SE progr. 1 progr. 2 zone disponible progr. 3 Nous avons ici 3 partitions pour autant de programmes - chacun est chargé dans une seule zone de mémoire Chap. 9

44 Registres bornes (ou limites) et translation dans MMU
adresse limite de la partition où le progr. en éxec. se trouve adresse de base de la partition où le progr. en éxec. se trouve Chap. 9 Erreur de segmentation

45 Deuxième manières de voir la même chose
travail 2 Chap. 9 Erreur de segmentation

46 Fragmentation: mémoire non utilisée
Un problème majeur dans l`affectation contiguë: Il y a assez d ’espace pour exécuter un programme, mais il est fragmenté de façon non contiguë La fragmentation peut être: externe: l`espace inutilisé est entre partitions interne: l ’espace inutilisé est dans les partitions Chap. 9

47 Partitions fixes Mémoire principale subdivisée en régions distinctes: partitions Les partitions sont soit de même taille ou de tailles inégales N’importe quel progr. peut être affecté à une partition qui soit suffisamment grande (Stallings) Chap. 9

48 Algorithme de placement pour partitions fixes
(Stallings) Partitions de tailles inégales: utilisation de plusieurs files assigner chaque processus à la partition de la plus petite taille pouvant le contenir 1 file par taille de partition tente de minimiser la fragmentation interne Problème: certaines files seront vides s’il n’y a pas de processus de cette taille (fr. externe) 8M 12M Chap. 9

49 Algorithme de placement pour partitions fixes
Partitions de tailles inégales: utilisation d’une seule file On choisit la plus petite partition libre pouvant contenir le prochain processus le nombre de programmes en mémoire augmente au profit de la fragmentation interne On pourrait allouer trop de mémoire à un programme 8M 12M (Stallings) Chap. 9

50 Critique des partitions fixes
Simple, mais... Inefficacité de l’utilisation de la mémoire: tout programme, si petit soit-il, doit occuper une partition entière. Il y a fragmentation interne. Les partitions à tailles inégales atténuent ce problème sans le résoudre complètement ... Chap. 9

51 Partitions dynamiques
Partitions en nombre et tailles variables Chaque processus est alloué exactement la taille de mémoire requise Probablement des trous inutilisables se formeront dans la mémoire: c’est la fragmentation externe Chap. 9

52 Partitions dynamiques: exemple (Stallings)
(d) Il y a un trou de 64K après avoir chargé 3 processus Le prochain processus pourrait demander plus Si tous les proc sont bloqués (p.ex. attente d’un événement), P2 peut être suspendu ou permuté et P4=128K peut être chargé. Swapped out Chap. 9

53 Partitions dynamiques: exemple (Stallings)
(e-f) Progr. 2 est suspendu, Progr. 4 est chargé. Un trou de =96K est créé (fragmentation externe) (g-h) P1 se termine ou il est suspendu, P2 est repris à sa place: produisant un autre trou de =96K... Nous avons 3 trous petits et probabl. inutiles =256K de fragmentation externe COMPACTAGE pour en faire un seul trou de 256K Chap. 9

54 Compactage Une solution pour la fragmentation externe
Les programmes sont déplacés en mémoire de façon à combiner en un seul plusieurs petits trous disponibles Effectuée quand un programme qui demande d’être exécuté ne trouve pas une partition assez grande, mais sa taille est plus petite que la fragmentation externe existante Désavantages: temps de transfert programmes besoin de rétablir tous les liens entre adresses de différents programmes Chap. 9

55 Suspension (Rappel: v. chap 4)
Lorsque tous les programmes en mémoire sont bloqués, le SE peut en suspendre un (swap/suspend) On transfère au disque un des processus bloqués (en le mettant ainsi en état suspended) et on le remplace par un processus prêt à être exécuté ce dernier processus exécute une transition d’état Nouveau ou Suspendu à état Ready Chap. 9

56 UNIX SVR4 Implémente ces concepts (pas sujet d’examen)
Created Nouveau Zombie Terminé User running Exécute en mode usager Kernel running Exécute en mode superviseur Ready in memory Prêt en mém centrale Asleep in memory En attente en mém centrale Ready swapped Prêt en mém secondaire Asleep swapped En attente, mém secondaire Preempted Par un proc + prioritaire Ch.4 Chap. 9 56

57 Méthode des groupes de paires
Évite le compactage Chap. 9

58 Méthode de «groupe de paires» (buddy systems): (Unix, Linux)
Appelons ‘trou’ un bloc de mémoire vide, libre Débutons avec un seul trou égal à toute la mémoire disponible Sur une requête pour un trou de taille S: Trouver le plus petit trou assez grand pour S Si la moitié de ce trou n’est pas suffisant pour S, alors allouer le trou entier à S Sinon, diviser ce trou en deux compagnons (buddies), égaux Si nécessaire, continuer à diviser jusqu’à ce qu’on aura généré un trou ni trop grand, ni trop petit pour S Deux compagnons sont fusionnés lorsqu’ils deviennent tous deux non alloués Chap. 9

59 Exemple d’un “Groupe de paires” (Stallings)
B C D E Chap. 9

60 Système de groupes de paires (Buddy system)
Le SE maintient plusieurs listes de trous la i-liste est la liste des trous de taille 2i lorsqu’une paire de compagnons se trouvent dans une i-liste, ils sont combinés et deviennent un seul trou de la (i+1)-liste Sur une requête pour une allocation d’un bloc de taille k tel que 2i-1 < k <= 2i: on examine d’abord la i-liste si elle est vide, on tente de trouver un trou dans la (i+1)-liste, si trouvé, il sera divisé en 2 Chap. 9

61 Comment trouver le compagnon (pourquoi faut-il le trouver)
Étant donné L’adresse binaire d’un bloc La longueur du bloc Comment trouver son compagnon Pour longueur du bloc = 2n Si le bit n de l’adresse est 0, changer à 1 (compagnon est à droite) Si le bit n de l’adresse est 1, changer à 0 (compagnon est à gauche) Exemples: Adr: – long. 22 = comp: Adr: – long. 24 = comp: Compter les bits à partir de la droite et de 0 Chap. 9

62 Avantage principal Pas besoin de compactage
Pas besoin de déplacer les programmes en mémoire Chap. 9

63 Groupes de paires: fragmentation interne
En moyenne, la fragmentation interne est de 25% de partition par processus pour chaque proc nous aurons une demie partition pleine plus une autre demie partition utilisée en moyenne à moitié Autrement dit, si la dimension moyenne des processus est X et s’il y a n processus en mémoire X/3 sera gaspillé en moyenne pour chaque processus Ou n(X/3) pour l’ensemble des processus Chap. 9

64 Groupe de paires: fragmentation externe
Il y aura aussi fragmentation externe égale à tous les trous qu’on ne réussit pas à remplir Chap. 9

65 Fragmentation interne pour l’exemple Exercice: travailler cet exemple
B C D E A=28 sur 128 gaspillé = 22% B=16 sur 256 gaspillé = 6% C=0 gaspillé D=0 gaspillé E= 53 sur 128 gaspillé = 41% A=22%, B=6%, C=0%, D=0%, E=41% Total=69% - Moyenne= 69/5=14% (exemple pas réaliste car nous avons 2 procs qui rentrent exactement, donc en pratique la moyenne sera plus proche de 25%) Chap. 9

66 Exercice Comprendre ce système en termes d’arbres binaires
V. ci-dessous la situation au moment où on alloue la mémoire pour A 1 M 512K 256K A=128K 128K Chap. 9

67 Allocation non-contiguë
Chap. 9

68 Faits de base La fragmentation (gaspillage) de mémoire est proportionnel à la dimension des unités d’allocation de mémoire Supposons que l’unité d’alloc mémoire soit la mémoire entière (la mémoire entière est donnée à un processus) La fragmentation (interne) sera en moyenne 50% de la mémoire Supposons que l’unité d’alloc mémoire soit 1 seul octet La fragmentation sera 0 Cependant, les structures de données et les temps d’exécution nécessaires pour retrouver les informations s’alourdissent avec des petites unités (L’hypothèse est qu’il y ait toujours des processus qui demandent de la mémoire, de différentes tailles entre 0 et la grandeur de la mémoire) Chap. 9

69 Allocation non contiguë
Afin de réduire la fragmentation, presque tous les ordis d’aujourd’hui utilisent l’allocation non contiguë diviser un programme en morceaux et permettre l`allocation séparée de chaque morceau les morceaux sont beaucoup plus petits que le programme entier et donc permettent une utilisation plus efficace de la mémoire les petits trous peuvent être utilisés plus facilement Il y a deux techniques de base pour faire ceci: la pagination et la segmentation la segmentation utilise des parties de programme qui ont une valeur logique (des modules) la pagination utilise des parties de programme arbitraires (morcellement du programmes en pages de longueur fixe). elles peuvent être combinées Je trouve que la segmentation est plus naturelle, donc je commence par celle-ci (manuel suit l’ordre opposé) Chap. 9

70 La segmentation Chap. 9

71 Les segments sont des parties logiques du progr.
JUMP(D, 100) B Progr. Princ. LOAD(C,250) Données C D Données Sous- progr. LOAD(B,50) 4 segments: A, B, C, D Chap. 9

72 Les segments comme unités d’alloc mémoire
3 A=0 B=1 C=2 1 D=3 2 Mémoire logique segmentée mémoire physique Étant donné que les segments sont plus petits que les programmes entiers, cette technique implique moins de fragmentation (qui est externe dans ce cas) Chap. 9

73 Tableau de descripteurs
Mécanisme pour la segmentation Un tableau contient l’adresse de début de tous les segments dans un processus Chaque adresse dans un segment est ajoutée à l’adresse de début du segment par la MMU 3 1 2 mémoire physique base du tableau Adr de 1 Adr de 2 Adr de 3 Adr de 0 segment courant Tableau de descripteurs de segments Chap. 9

74 <No de segm, décalage>
Détails L’adresse logique est une paire: <No de segm, décalage> où décalage est l’adresse dans le segment Le tableau des segments contient: descripteurs de segments adresse de base longueur du segment Infos de protection, on verra… Dans le PCB du processus il y aura un pointeur à l’adresse en mémoire du tableau des segments Il y aura aussi là dedans le nombre de segments dans le processus Au moment de la commutation de contexte, ces infos seront chargées dans les registres appropriés d’UCT Chap. 9

75 Où se trouve le Segment Table Pointer? Qu’arrive si d > longueur?
Traduction d`adresses dans la segmentation (figure de Stallings: légère diff. par rapport à la terminologie de Silberschatz) Où se trouve le Segment Table Pointer? Qu’arrive si d > longueur? Chap. 9

76 Le mécanisme en détail (implanté dans le matériel)
STP Dans MMU ou UCT Adresse finale utilisée pour l’exécution de l’instruction Chap. 9 Fig. du manuel de Stallings

77 Traduction en décimal Dans le programme=(1, 752) 752+8224 8224 STP
= 8976 Dans MMU ou UCT Adresse finale utilisée pour l’exécution de l’instruction Chap. 9 Fig. du manuel de Stallings

78 Partage de segments: plusieurs processus se servent d’un segment
Ex 1: Programme Word utilisé pour éditer différents documents Ex 2: DLL utilisé par plus usagers Chap. 9

79 Programme et processus ou thread
Cet exemple montre clairement la distinction entre programme et processus ou thread Nous avons un seul programme, l’éditeur, mais deux threads En mémoire il y a une seule copie du programme Mais chaque thread a son propre tableau de segments Quand l’UCT exécute P1, elle pointe au tableau de segments de P1, quand elle exécute P2, elle pointe au tab de seg de P2 Chap. 9

80 Mécanisme pour 2 processus qui exécutent un seul programme sur données différentes
Données proc 1 Programme + Instruction R2 Données proc 2 + La même instruction, si elle est exécutée par le proc 1, son adresse est modifiée par l’adresse R1 par le proc 2, son adresse est modif par l’adresse R2 R1 et R2 seront normalement dans des registres d’UCT Ceci fonctionne même si l’instruction est exécutée par plus. UCT au même instant, si les registres se trouvent dans des UCT différentes Chap. 9

81 Segmentation et protection
Chaque descripteur de segment peut contenir des infos de protection: longueur du segment permissions de l`usager sur le segment: lecture, écriture, exécution Si au moment du calcul de l’adresse on trouve que l’usager n’a pas droit d’accèsinterruption Ces infos peuvent donc varier d’usager à usager, par rapport au même segment! limite base read, write, execute? Chap. 9

82 Privilèges des usagers dans tableaux de segments
P1 peut seulement exécuter l’éditeur, P2 peut l’exécuter ou le lire X X,R Chap. 9

83 Point de réflexion Si un processus est interrompu par violation de bornes de mémoire ou d’autorisation (pex cherche à lire un segment qu’il ne peut qu’écrire), quel sera l’état résultant? Chap. 9

84 Évaluation de la segmentation simple
Avantages: l’unité d’allocation de mémoire est plus petite que le programme entier une entité logique connue par le programmeur Les segments peuvent changer de place en mémoire Implémente l’édition des liens La protection et le partage de segments sont aisés (en principe) Désavantage: le problème des partitions dynamiques: La fragmentation externe n’est pas éliminée Car les segments sont de longueurs variables trous en mémoire, compression? Une autre solution est d`essayer à simplifier le mécanisme en utilisant unités d`allocation mémoire de tailles égales  PAGINATION Chap. 9

85 Segmentation contre pagination
Le pb avec la segmentation est que l’unité d’allocation de mémoire (le segment) est de longueur variable La pagination utilise des unités d’allocation de mémoire fixe, éliminant donc ce pb Chap. 9

86 Exercice: édition de liens
Voir comment la segmentation résout le problème de rejoindre des adresses dans autres modules Comment il résout le pb de l’édition des liens Chap. 9

87 La pagination Chap. 9

88 Pagination simple La mémoire est partitionnée en petits morceaux de même taille: les pages physiques ou cadres ou frames Chaque processus est aussi partitionné en petits morceaux de même taille appelés pages (logiques) Les pages logiques d’un processus peuvent donc être affectées aux cadres disponibles n’importe où en mémoire principale Conséquences: un processus peut être éparpillé n’importe où dans la mémoire physique. la fragmentation externe est éliminée Mais nous pouvons encore avoir des pages non utilisées Chap. 9

89 Exemple de chargement de processus
Puis, supposons que le processus B se termine ou est suspendu (Stallings) Chap. 9

90 Exemple de chargement de processus (Stallings)
Nous pouvons maintenant mettre en mémoire un progr. D, qui demande 5 cadres bien qu`il n’y ait pas 5 cadres contigus disponibles Seule la dernière page d’un progr peut souffrir de fragmentation interne moy. 1/2 cadre par proc Chap. 9

91 Trois processus et leurs tableaux de pages
Où sont les pages? Chap. 9

92 Tableaux de pages (Stallings)
Le SE doit maintenir un tableau de pages pour chaque processus Chaque descripteur de pages contient le numéro de cadre où la page correspondante est physiquement localisée Une table de pages est indexée par le numéro de la page afin d’obtenir le numéro du cadre Une liste de cadres disponibles est également maintenue (free frame list) Chap. 9

93 Tableaux de pages Les entrées dans le tableau de pages sont aussi appelées descripteurs de pages Chap. 9

94 Traduction d’adresses
La traduction d’adresses se fait comme dans le cas de la segmentation On ajoute l’adresse de base au décalage Cependant ceci est simplifié car les longueurs des pages sont de longueur d’une puissance de 2 Dans ce cas, l’adresse de base d’une page aura toujours autant de 0 à droite qu’il y a de bits dans la dimension de la page Les adresses de base des pages ont des bits 0 impliqués à droite et le décalage est la valeur de ces bits L’addition est une simple concaténation +1010 = (Ici, taille de pages=24=16) Chap. 9

95 Traduction d’adresses
Ex: si 16 bits sont utilisés pour les adresses et que la taille d’une page = 1K: on a besoins de 10 bits pour le décalage, laissant ainsi 6 bits pour le numéro de page L’adresse logique (p,d) est traduite à l’adresse physique (f,d) en utilisant p comme index sur la table des pages et en le remplaçant par l’adresse f trouvée d, le décalage, reste tel quel p d f d Chap. 9 (Stallings)

96 Mécanisme: matériel Chap. 9

97 Traduction d’adresse (logique-physique) pour la pagination
Stallings PTBR PTBR: Page Table Base Register dans UCT Chap. 9

98 Exercice Quoi détermine La taille des pages
Le nombre de pages que nous pouvons avoir dans un ordi donné Est-ce qu’en principe un même programme peut être exécuté sur deux ordinateurs avec pages de tailles différentes? Est-ce que le compilateur est obligé à connaître la taille des pages de l’ordinateur? p d Chap. 9

99 Exercice A) Considérez un système de 4 cadres ou pages physiques, chacune de 4 octets. Les adresses sont de 4 bits, deux pour le numéro de page, et 2 pour le décalage. Le tableau de pages du processus couramment en exécution est: Numéro de page cadre 00 11 01 10 . Considérez l'adresse logique Quelle sera l'adresse physique correspondante? B) Considérez maintenant un système de segmentation, pas de pagination. Le tableau des segments du processus en exécution est comme suit: Segment number Base 110 100 000 Considérez l'adresse logique (no de seg, décalage)= (01, 01) , quelle est l'adresse physique? Chap. 9

100 Translation Lookaside Buffer ou cache d’adresses
Chap. 9

101 Problèmes d’efficacité
La traduction d`adresses, y compris la recherche des adresses des pages et de segments, est exécutée par des mécanismes de matériel Cependant, si la table des pages est en mémoire principale, chaque adresse logique occasionne au moins 2 références à la mémoire Une pour lire l’entrée de la table de pages L’autre pour lire le mot référencé Le temps d`accès mémoire est doublé... Chap. 9

102 Pour améliorer l`efficacité
Où mettre les tableaux des pages (les mêmes idées s ’appliquent aussi aux tabl. de segm) Solution 1: dans des registres de UCT. avantage: vitesse désavantage: nombre limité de pages par proc., la taille de la mém. logique est limitée Solution 2: en mémoire principale avantage: taille de la mém. logique (presque) illimitée désavantage: lenteur Solution 3 (mixte): les tableaux de pages sont en mémoire principale, mais les adresses les plus utilisées sont aussi dans des registres d`UCT. Chap. 9

103 Idée J’ai un petit tableau effaçable où je garde les numéros de téléphone de mes contacts le plus courants Quand je rencontre un nouvel ami, la première fois je dois chercher son numéro dans le bottin Puis je le mets dans le tableau, mais avant je dois effacer quelqu’un qui est déjà là Chap. 9

104 Régistres associatifs TLB TLB: Translation Lookaside Buffers, ou caches d’adressage
Recherche parallèle d’une adresse: l’adresse recherchée est cherchée dans la partie gauche de la table en parallèle (matériel spécial) Traduction page  cadre Si la page recherchée a été utilisée récemment elle se trouvera dans les registres associatifs recherche rapide No Page No Cadre 3 15 7 19 17 2 23 Chap. 9 v. Content-addressable memory dans Wikipedia

105 Recherche associative dans TLB
Le TLB est un tableau de registres de matériel où chaque ligne contient une paire: Numéro de page logique, Numéro de cadre Le TLB utilise du matériel de mémoire associative: interrogation simultanée de tous les numéros logiques pour trouver le numéro physique recherché recherche Chap. 9

106 Translation Lookaside Buffer (TLB)
Sur réception d’une adresse logique, le processeur examine le TLB Si cette entrée de page y est , le numéro de cadre en est extrait Sinon, le numéro de page indexe la table de page du processus (en mémoire) Cette nouvelle entrée de page est mise dans le TLB Elle remplace une autre pas récemment utilisée Le contenu du TLB est remplacé quand l’UCT change de proc Les premières trois opérations sont faites par matériel Chap. 9

107 Schéma d’utilisation TLB
Dans l’UCT En mémoire Dans le cas de ‘miss’, f est trouvé en mémoire, puis il es mis dans le TLB Chap. 9

108 Temps d’accès mémoire réel avec TLB
Supposons que recherche dans TLB = 1 nanosecondes = 1ns (normalement petit) Supposons que le temps de recherche en mémoire = 1 microseconde = 1ms  = probabilité de touches (hit ratio) = probabilité qu’un numéro de page soit trouvé dans les registres associatifs (quantité entre 0 et 1) ceci est en relation avec le nombre de registres associatifs disponibles Temps effectif d’accès tea: tea = (1ns+1ms)  + (1ns+2ms)(1 – ) Si  est grand, ce temps sera près de 1ms Dans plusieurs ordinateurs, il y a simultanéité entre ces opérations et d’autres opérations de l’UCT donc le temps d’accès réel est plus favorable Combien de nanosecondes dans 1 micros.? Chap. 9

109 Décortiqué … tea = (1ns+1ms)  + (1ns+2ms)(1 – ) Touche en Mém Assoc:
(temps d’accès à mém assoc) + (temps d’accès à mém princip.) Pas de Touche en MA: (temps d’accès à mém assoc) + (2 x temps d’accès à mém princip.) On va à la mém assoc mais on n’y trouve pas l’adresse. Faut accéder au tabl des pages en mém princip puis aller à l’adresse finale qu’on veut effectivement Chap. 9

110 Formulation plus générale
m: temps d’accès RAM : temps d’accès mémoire associative : probabilité de touche  est influencé par la taille de la TLB mais aussi par l’organisation du programme! (exercice: comment?) tea = (m+ )  + (2m+ )(1- ) = m +  + 2m - 2m +  -  = = 2m +  - m Chap. 9

111 Comptage d’utilisation dans TLB
Chaque paire dans le TLB est fournie d ’un indice de référence pour savoir si cette paire a été utilisée récemment. Sinon, elle est remplacée par la dernière paire dont on a besoin Contenu courant: Compt=0 indique la ligne moins récemment utilisée Si une nouvelle adresse doit être ajoutée, on remplace cette ligne là et son Compt devient 3, tous les autres Compt sont décrémentés Si par contre on utilise l’adresse de la ligne 1, son Compt devient 3, les Compt des deux dernières lignes sont décrémentés Compt No Page No Cadre 1 3 15 7 19 3 17 2 2 23 Chap. 9

112 TLB multi-niveaux Quelques ordis ont aussi implémenté des TLB à plusieurs niveaux, pex: Un TLB extrêmement rapide et petit, Un autre moins rapide mais plus grand Exercice: penser à comment un SE pourrait utiliser ces niveaux de manière efficace Chap. 9

113 Importance pour la sécurité
Quelques virus (p.ex. Spectre, Meltdown) utilisent ces concepts pour découvrir le fonctionnement d’un programme Contenu de la mémoire TLB Différence de temps entre calcul d’adresses trouvées en MP et adresses trouvées en TLB V. vastes informations sur ceci dans la Toile (surtout Wikipédia) Chap. 9

114 Extensions et combinaisons
Chap. 9

115 Les tableaux de pages peuvent aussi être paginés
Pour permettre aux mémoires logiques d’être vraiment grandes Donc un tableau de pages pourrait ne pas rentrer dans une seule page Chap. 9

116 Tableaux de pages à deux niveaux pour permettre aux tableaux de pages d’être eux-mêmes paginés
tableau de pages du tableau de pages Chap. 9

117 Tableaux de pages à deux niveaux
La partie de l’adresse qui appartient au numéro de page est elle-même divisée en 2 Chap. 9

118 Partage de pages: 3 proc. partageant un éditeur, sur des données privées à chaque proc
1 seule copie de l’éditeur en mémoire au lieu de 3 Chap. 9

119 Segmentation simple vs Pagination simple
La pagination se préoccupe seulement du problème du chargement, tandis que La segmentation vise aussi le problème de la liaison (linkage editing) La segmentation est visible au programmeur mais la pagination ne l’est pas Le segment est une unité logique de protection et partage, tandis que la page ne l’est pas Donc la protection et le partage sont plus aisés dans la segmentation La segmentation requiert un matériel plus complexe pour la traduction d’adresses (addition au lieu de concatenation) La segmentation souffre de fragmentation externe (partitions dynamiques) La pagination produit de fragmentation interne, mais pas beaucoup (1/2 cadre par programme/processus) Heureusement, la segmentation et la pagination peuvent être combinées Chap. 9

120 Pagination et segmentation combinées
Les programmes sont divisés en segments et les segments sont paginés Donc chaque adresse de segment n`est pas une adresse de mémoire, mais une adresse au tableau de pages du segment Les tableaux de segments et de pages peuvent être eux-mêmes paginés Méthode inventée pour le système Multics de l’MIT, approx Aujourd’hui encore implémentée dans le matériel Intel etc. Chap. 9

121 Adressage: combinaison des deux mécanismes
p d’ d Adresse d divisée en no de page et décalage dans page segment table base register: un registre de l`UCT Comprendre quelle partie de cette figure implémente la pagination, et quelle implémente la segmentation Chap. 9

122 Le même dessin avec moins de lignes
Chap. 9

123 Pagination des tableaux des pages et des segments
Étant donné que les tableaux des pages et des segments peuvent eux même être paginés, ceci peut se compliquer jusqu’à quatre niveaux d’adressage. Chap. 9

124 Segmentation et pagination combinées avec pagination des tableaux de pages et segments
Chap. 9

125 Importance de Translation Lookaside Buffer
Dans le cas de systèmes de pagination à quatre niveaux, l’utilisation de TLB devient encore plus importante pour éviter de multiples accès en mémoire RAM pour calculer une adresse physique Les adresses les plus récemment utilisées sont trouvées directement dans la TLB Chap. 9

126 Sommaire Chap. 9

127 Conclusions sur Gestion Mémoire
Problèmes de: fragmentation (interne et externe) complexité et efficacité des algorithmes Mécanismes à exécuter pour chaque instruction! Méthodes Allocation contiguë Partitions fixes Partitions variables Groupes de paires (buddy) Allocation non-contigue Pagination Segmentation Problèmes en pagination et segmentation: taille des tableaux de segments et pages pagination de ces tableaux efficacité fournie par Translation Lookaside Buffer Les différentes méthodes décrites dans ce chapitre, et dans le chapitre suivant, sont souvent utilisées conjointement, donnant lieu a des systèmes très complexes V. www pour informations sur les architectures réelles Chap. 9

128 Recapitulation sur la fragmentation
Partition fixes: fragmentation interne car les partitions ne peuvent pas être complèt. utilisées + fragm. externe s`il y a des partitions non utilisées Partitions dynamiques: fragmentation externe qui conduit au besoin de compression. Paires: fragmentation interne de 25% pour chaque processus + fragm. externe s ’il y a des partit. non utilisées Segmentation sans pagination: pas de fragmentation interne, mais fragmentation externe à cause de segments de longueur différentes, stockés de façon contiguë (comme dans les partitions dynamiques) Pagination: en moyenne, 1/2 cadre de fragm. interne par processus dans le cas de mémoire virtuelle, aucune fragmentation externe (v. chap suivant) Donc la pagination avec mémoire virtuelle offre la meilleure solution au pb de la fragmentation Chap. 9

129 Par rapport au manuel Tout à l’exception de
Section (Tables de pages hachées) Section (tables de pages inversées) Chap. 9

130 DLL http://www.webopedia.com/TERM/D/DLL.html
Short for Dynamic Link Library, a library of executable functions or data that can be used by a Windows application. Typically, a DLL provides one or more particular functions and a program accesses the functions by creating either a static or dynamic link to the DLL. A static link remains constant during program execution while a dynamic link is created by the program as needed. DLLs can also contain just data. DLL files usually end with the extension .dll,.exe., drv, or .fon. A DLL can be used by several applications at the same time. Some DLLs are provided with the Windows operating system and available for any Windows application. Other DLLs are written for a particular application and are loaded with the application. Short for Dynamic Link Library, a library of executable functions or data that can be used by a Windows application. Typically, a DLL provides one or more particular functions and a program accesses the functions by creating either a static or dynamic link to the DLL. A static link remains constant during program execution while a dynamic link is created by the program as needed. DLLs can also contain just data. DLL files usually end with the extension .dll,.exe., drv, or .fon. A DLL can be used by several applications at the same time. Some DLLs are provided with the Windows operating system and available for any Windows application. Other DLLs are written for a particular application and are loaded with the application. Chap. 9

131 Terminologie Registre de base = Registre de translation
Segment Table Pointer = Segment Table Base Register Translation Lookaside Buffer (TLB) = Address Cache = Mémoire associative etc. Chap. 9


Télécharger ppt "Chapitre 9 (6 heures – 2 cours)"

Présentations similaires


Annonces Google