Mémoire virtuelle Ce cours s'intéresse au principe de la mémoire virtuelle. Il aborde notamment les notions liées aux défauts de pages. I- Principe de la mémoire virtuelle La multiprogrammation implique de charger plusieurs programmes en mémoire centrale de manière à obtenir un bon taux d'utilisation du processeur. Supposons comme sur la figure 1 ici que l'exécution des programmes 1, 2 et 3 soit nécessaire pour obtenir ce taux d'utilisation du cpu satisfaisant. On peut remarquer qu'une fois les programmes 1 et 2 chargés dans la mémoire, toutes les cases sont occupées : le programme 3 ne peut pas être chargé. Mémoire virtuelle Page 1 Page 3-1 Case 1 Page 4 Page 2 Page 3 Page 4 Page 2 Page 1-1 Case 2 Page 3-2 Case 3 Page 1 Page 2 Programme 1 Page 1 Mémoire physique Page 3 Page 1-2 Case 4 Programme 2 Page 3 Programme 3 Espaces d'adressage des programmes Page 2-2 Case 5 Page 2-1 Case 6 Page 4-1 Case 7 MPS 2002/2003 N°page, processus 1 Fig 1 : Cas de figure Lorsque l'on regarde l'exécution d'un processus, on s'aperçoit qu'à un instant donné le processus n'accède qu'à une partie de son espace d'adressage (par exemple la page de code couramment exécutée par le processeur et la page de données correspondante). Les autres pages de l'espace d'adressage ne sont pas accédées et sont donc inutiles en mémoire centrale. Une solution pour pouvoir charger plus de programmes dans la mémoire centrale est donc de ne charger pour chaque programme que les pages couramment utilisées. Ici par exemple, seules les pages 1,2 et 4 du processus 1 sont chargées ainsi que la page 3 du processus 2 et les pages 1,2,3 du programme 3. Puisque les pages d'un espace d'adressage de processus ne sont pas toutes chargées en mémoire centrale, il faut que le processeur puisse détecter leur éventuelle absence lorsqu'il cherche à effectuer une conversion d'adresse paginée vers l'adresse physique. Chaque entrée de la table des pages comporte alors un champ supplémentaire, le bit Validation V, qui est à vrai (1 ou V) si la page est effectivement présente en mémoire centrale. La figure 2 montre les valeurs des bits de validation pour les tables des pages des trois processus 1, 2 et 3, en tenant compte des chargements de leurs pages en mémoire centrale. Ainsi pour le processus 1, la page 1 est chargée dans la case 2, le bit de validation est à vrai (V). La page 2 est chargée dans la case 4, le bit de validation est à vrai. Par contre la page 3 n'est pas présente en mémoire centrale et donc le bit de validation est à faux (I pour Invalide) : dans ce cas, le champs n° de case n'a pas de signification. Bit de validation V 2 I - V 5 V 4 I - V 6 I - V 3 V 1 V 7 I - Processus 2 Processus 1 Processus 3 Page 1 Page 4 Page 2 Page 3 Programme 1 Page 1 Page 4 Page 2 Page 3 Page 1 Page 2 Page 3 Programme 2 Programme 3 Mémoire physique Page 3-3 Case 1 Page 1-1 Case 2 Page 3-2 Case 3 Page 2-1 Case 4 Page 1-3 Case 5 Page 2-3 Case 6 Page 4-1 MPS 2002/2003 Case 7 2 Fig 2 : Bit de validation II- Notion de défaut de pages Que se passe-t-il à présent lorsque qu'un processus tente d'accéder à une page de son espace d'adressage qui n'est pas en mémoire centrale ? Ici le processus 2 génère une adresse paginée portant sur la page 2. La MMU accède à la table des pages pour effectuer la conversion adresse paginée, adresse physique et teste la valeur du bit de validation : elle le trouve à faux, ce qui veut dire que la page n'est pas chargée dans une case et donc la conversion ne peut être réalisée. Il se produit alors un défaut de page : c'est un déroutement qui oblige le processeur à suspendre l'exécution du programme en cours pour lancer une entrée/sortie qui charge la page manquante en mémoire centrale dans une case libre. Définition : défaut de page Le défaut de page est un déroutement qui oblige le processeur à suspendre l'exécution du programme en cours pour lancer une entrée/sortie qui charge la page manquante en mémoire centrale dans une case libre. Les figures 3 et 4 illustrent le mécanisme de défaut de page. Le processus cherche à convertir l'adresse logique <p,d>. Il accède donc à l'entrée de sa table des pages correspondant à l'entrée de la page p, et teste la valeur du bit de validation. Celui-ci est à faux (I) indiquant ainsi que la page n'est pas présente. Automatiquement, puisque la traduction vers l'adresse physique ne peut pas être faite, le système lève un défaut de page, qui entraîne une entrée/sortie pour charger la page manquante en mémoire centrale. Le défaut de page charge la page manquante dans une case libre de la mémoire centrale, puis le système met à jour l'entrée de la table des pages correspondant à la page p : le bit de validation passe à vrai et le numéro de case physique contenant la page p est renseigné. Enfin, la traduction vers l'adresse physique reprend. Défaut de page Mémoire Adresse logique p d Registre adresse Table des pages 1. Déroutement E/S disque adresse table + I - Table des pages MPS 2002/2003 Fig 3 : Mécanisme du défaut de pages 3 Défaut de page Mémoire Adresse logique p 4. Reprise instruction d Registre adresse Table des pages adresse table case libre 2 Chargement de la page + I 5 3. Mise à jour table des pages Table des pages MPS 2002/2003 4 Fig 4 : Mécanisme du défaut de pages III- Les algorithmes de remplacement de pages Lors d'un défaut de page, la page manquante est chargée dans une case libre. La totalité des cases de la mémoire centrale peut être occupée : il faut donc libérer une case de la mémoire physique globalement (parmi l'ensemble des cases) ou localement (parmi les cases occupées par les pages du processus en défaut). Le système d'exploitation utilise un algorithme pour choisir une case à libérer. Les deux principaux algorithmes sont : - FIFO (First In, First Out) - LRU (Least Recently Used) III.1- Algorithme de remplacement de pages FIFO Avec cet algorithme, c'est la page la plus anciennement chargée qui est remplacée. La figure 5 donne un exemple du fonctionnement de cet algorithme où l'on suppose une mémoire centrale composée de trois cases initialement vides. La lettre D signale l'occurrence de défaut de pages. Algorithmes de remplacement de page • FIFO : la page la plus anciennement chargée est la page remplacée Chaine de référence 7 0 7 7 0 D D 1 2 0 3 0 7 2 2 2 2 0 0 0 3 1 1 1 D D 4 2 3 0 4 4 4 0 3 3 2 2 2 1 0 0 0 3 3 D D D D MPS 2002/2003 D D 5 Fig 5 : Remplacement de pages FIFO III.2- Algorithme de remplacement de pages LRU Avec cet algorithme, c'est la page la moins récemment accédée qui est remplacée. La figure 6 donne un exemple du fonctionnement de cet algorithme où l'on suppose une mémoire centrale composée de trois cases initialement vides. La lettre D signale l'occurrence de défaut de pages. Algorithmes de remplacement de page • LRU : la page la moins récemment accédée est la page remplacée Chaine de référence 7 0 7 7 0 D D 1 2 0 3 0 7 2 2 2 2 0 0 0 0 1 1 1 3 D D D 4 2 3 0 4 4 4 0 0 0 0 3 3 3 3 2 2 2 D D MPS 2002/2003 D D 6 Fig 6 : Remplacement de pages LRU Complément sur le format d'une entrée de la table des pages d'un processus. Finalement, une entrée de la table des pages d'un processus comprendra souvent les champs suivants : - le bit V de validation pour indiquer si la page est présente ou non en mémoire centrale - le champ A pour Accès qui contient les informations pour l'algorithme de remplacement de pages. Par exemple, pour l'algorithme FIFO, ce champ contiendra la date de chargement de la page; pour l'algorithme LRU, la date du dernier accès à la page. - Le bit M pour Modification permet de savoir si la page a été modifiée lors de sa présence en mémoire centrale. Si oui, il faudra réécrire cette page sur le disque avant de l'écraser par une nouvelle page. - Le champ D pour Droits, qui contient la définition des droits d'accès à la page en lecture / écriture / exécution. - Le champ n° de case physique, pour la conversion vers l'adresse physique. III.3- Algorithme pour la conversion d'une adresse logique paginée en adresse physique. Nous donnons ci-dessous le schéma général de l'algorithme suivi par le système d'exploitation lors de la conversion d'une adresse logique vers une adresse physique. Une adresse est un couple constitué des champs page et déplacement. Procedure Conversion (in adresse_virtuelle, out adresse_physique) debut entrée := adresse_virtuelle.page + adresse_table(processus) Si (entrée.V = FAUX) alors -- defaut de page Charger_page(adresse_virtuelle.page, adresse_case); entrée.V = vrai; entrée. case := adresse_case; fsi adresse physique := adresse_case + adresse_virtuelle.deplacement; return (adresse_physique); fin Procedure Charger_Page (in page, out case) debut Si (Trouver_case_Libre( ) = FAUX) alors Choisir_case_à_libérer (case_à_liberer, page_victime); si (page_victime.M = Vrai) alors Ecrire_Disque(page_victime) Fsi Fsi Lire_Disque(case_à_liberer, page) return (case_à_liberer) fin IV- Notion d'écroulement Défintion : Ecroulement On appelle Ecroulement, une haute activité de pagination. Un processus . s'écroule lorsqu’il passe plus de temps à paginer qu'à s'exécuter La figure 7 illustre ce phénomène. Elle représente le taux d'utilisation du processeur en fonction du degré de multiprogrammation, c'est-à-dire en fonction du nombre de processus chargés en mémoire centrale. • Sur cette figure, on voit clairement que l'utilisation du processeur augmente jusqu'à un certain seuil au delà duquel cette utilisation chute complètement : cette chute correspond à une trop grande activité de pagination des processus qui passent le plus clair de leur temps en entrée/sortie car ils n'ont pas suffisamment de cases mémoires disponibles pour contenir les pages relatives à leur espace de travail courant. Ecroulement On appelle Ecroulement, une haute activité de pagination. Un processus s'écroule lorsqu'il passe plus de temps à paginer qu'à s'exécuter. MPS 2002/2003 Fig 7 : Phénomène d'écroulement 7