Fiche de révision : Gestion de la mémoire virtuelle et partage

📋 Plan du Cours

  1. Mémoire virtuelle : intuition et motivation
  2. Problèmes de la mémoire physique
  3. Indirection et abstraction adressage direct
  4. MMU et traduction VA vers PA
  5. Pagination et table de pagination
  6. Pagination à la demande et défaut de page
  7. Localité, working set et thrashing
  8. Allocation dynamique avec mmap
  9. Types de mapping mmap et partage
  10. Protection, isolation et partage mémoire

📖 1. Mémoire virtuelle : intuition et motivation

🔑 Notions clés & Définitions

  • Mémoire virtuelle : Technique où chaque processus dispose d’un espace mémoire qui lui paraît privé, même si la mémoire réelle est partagée.
  • Espace d’adressage : Ensemble des adresses qu’un processus peut utiliser pour indexer sa mémoire vue comme un tableau d’octets.
  • CPU virtuel : Idée selon laquelle le processeur est partagé entre processus tout en donnant à chacun l’illusion d’un CPU dédié.
  • Hiérarchie mémoire : Organisation des supports de stockage (cache, RAM, disque) du plus rapide au plus lent, avec des accès gérés en cascade.
  • Cache miss : Événement où le cache ne contient pas la donnée demandée, obligeant à aller chercher ailleurs (ex. RAM).

📝 Points essentiels

  • Chaque processus a sa propre mémoire vue comme un grand tableau d’octets, indexé par des adresses propres au processus.
  • Le programmeur peut, en pratique, décider où placer code et données dans l’espace du processus via l’allocation.
  • L’implémentation combine plusieurs niveaux (cache, RAM, disque) et reste en grande partie invisible pour le programmeur.
  • La mémoire vive est limitée par la vitesse : SRAM est rapide mais coûteuse, tandis que DRAM est moins chère mais environ 100× plus lente.
  • La mémoire vive est limitée par la capacité : un espace d’adressage de 64 bits correspond à 2^64 octets, soit 17 179 869 184 Gio, alors que la RAM physique est de l’ordre de quelques Gio.
  • L’espace disponible doit être géré malgré de nombreux processus simultanés, des durées d’usage différentes et des types d’objets hétérogènes (code lecture seule, données chargées depuis disque, variables lecture+écriture

💡 Astuce mémo

Mémoire virtuelle = «tableau privé» par processus, mais réalisée avec une «échelle» cache→RAM→disque pour compenser lenteur et petite taille.

📖 2. Problèmes de la mémoire physique

🔑 Notions clés & Définitions

  • Mémoire physique : La mémoire physique est la mémoire réelle de la machine, typiquement la DRAM, adressée par des adresses physiques.
  • Mémoire virtuelle : La mémoire virtuelle est un espace d’adressage présenté au CPU, mappé vers la mémoire physique par le système de gestion mémoire.
  • Indirection : L’indirection est un accès indirect via une référence, permettant de passer par un niveau supplémentaire avant d’atteindre la donnée ou le code.
  • Mémoire adressée directement : L’adressage direct fait correspondre une adresse CPU à une position mémoire sans passer par une traduction dynamique.
  • MMU : La MMU est le composant matériel qui traduit les adresses virtuelles du CPU en adresses physiques à la volée.

📝 Points essentiels

  • La mémoire physique doit gérer simultanément de nombreux processus, chacun consommant du code, des données et des variables.
  • La taille et la durée d’occupation de chaque processus posent un problème de dimensionnement de l’espace mémoire.
  • Les processus manipulent souvent des éléments hétérogènes, comme du code en lecture seule et des données chargées depuis le disque.
  • Les variables locales et globales sont en lecture et écriture, contrairement au code typiquement protégé en lecture seule.
  • La protection de chaque processus nécessite d’empêcher l’accès non autorisé aux zones mémoire des autres processus.
  • La coopération entre processus nécessite un mécanisme de partage, par exemple via une zone de mémoire partagée (shared memory).

💡 Astuce mémo

Indirection = “référence → intermédiaire → cible” : on passe par un relais avant d’atteindre code/données.

📖 3. Indirection et abstraction adressage direct

🔑 Notions clés & Définitions

  • Adresse virtuelle : Une adresse virtuelle est un identifiant utilisé par le CPU pour référencer la mémoire, sans correspondre directement à la DRAM.
  • Adresse physique : Une adresse physique désigne l’emplacement réel dans la mémoire principale (DRAM) ou chez un périphérique.
  • Memory Management Unit : La MMU est le composant matériel qui traduit les adresses virtuelles en adresses physiques à la volée.
  • Espace d’adressage virtuel : L’espace d’adressage virtuel est l’ensemble des adresses virtuelles possibles, noté VAS={0,…,N−1}.
  • Espace d’adressage physique : L’espace d’adressage physique est l’ensemble des adresses physiques possibles, noté PAS={0,…,M−1}.

📝 Points essentiels

  • Le CPU manipule des adresses virtuelles (VA) et ne voit pas directement la DRAM.
  • La MMU traduit chaque VA en une adresse physique (PA) via une correspondance reconfigurable.
  • Chaque processus dispose d’un VAS privé, ce qui évite que les adresses de processus se confondent.
  • Le VAS est exprimé sur n bits avec N=2^n, et le PAS sur m bits avec M=2^m.
  • La mémoire centrale correspond à la mémoire physique (DRAM) et sert de support principal aux données en cours d’usage.
  • La MMU est reconfigurée par l’OS à chaque changement de contexte pour refléter le processus courant.

💡 Astuce mémo

VA→MMU→PA : la MMU fait le “dictionnaire” entre l’adresse vue par le CPU et l’adresse réelle.

📖 4. MMU et traduction VA vers PA

🔑 Notions clés & Définitions

  • MMU : La Memory Management Unit est le matériel qui traduit les adresses virtuelles en adresses physiques à chaque accès mémoire, avec l’aide du noyau.
  • Traduction d’adresses : La traduction d’adresses est le mécanisme qui convertit un numéro de page virtuelle (VPN) en numéro de page physique (PPN) puis recompose l’adresse physique.
  • Taille de bloc P : La taille de bloc P est l’unité commune de découpage, avec P=2pP=2^p octets, utilisée pour les pages virtuelles et les pages physiques.
  • Page virtuelle : Une page virtuelle est un bloc de taille P dans l’espace d’adressage virtuel, identifié par un numéro de page virtuelle VPN.
  • Page physique : Une page physique est un bloc de taille P dans la mémoire DRAM, identifié par un numéro de page physique PPN.

📝 Points essentiels

  • La MMU intervient à chaque accès mémoire pour traduire le VPN en PPN, rendant la gestion invisible pour le programme d’application.
  • Le disque est beaucoup plus lent que la SRAM/CPU et la DRAM, ce qui rend la gestion purement matérielle trop complexe et nécessite la coopération du noyau.
  • Le système utilise une vue virtuelle : les données résident réellement en DRAM, mais le CPU les adresse via des adresses virtuelles.
  • La taille de page P=2pP=2^p rend les opérations de calcul efficaces : division entière par P, modulo P, multiplication par P et ajout de l’offset sont gratuits en pratique.
  • La traduction suit : VPN=VA/PVPN=\lfloor VA/P\rfloor et PO=VAmodPPO=VA\bmod P, puis PA=PPN×P+POPA=PPN\times P+PO avec un offset identique dans VA et PA.
  • Les numéros de pages vérifient VPN{0,,X1}VPN\in\{0,\dots,X-1\} avec X=N/PX=N/P et PPN{0,,Y1}PPN\in\{0,\dots,Y-1\} avec Y=M/PY=M/P.

💡 Astuce mémo

VA = (VPN × P) + PO ; PA = (PPN × P) + PO : même PO, seul VPN→PPN change.

📖 5. Pagination et table de pagination

🔑 Notions clés & Définitions

  • Table de Pagination : Annuaire de traduction qui associe chaque numéro de page virtuelle VPN à un numéro de page physique PPN et à des métadonnées.
  • Page Table Entry : Entrée de table de pagination qui contient la correspondance VPN→PPN et des informations d’état pour la traduction d’adresse.
  • VPN : Numéro de page virtuelle, identifiant la page dans l’espace d’adressage virtuel.
  • PPN : Numéro de page physique, identifiant la page dans la mémoire physique.
  • Page Offset : Partie basse de l’adresse qui désigne la position dans la page et reste identique en virtuel et en physique.

📝 Points essentiels

  • La traduction d’adresse utilise PA=PPN×P+POPA=PPN\times P+POPOPO (offset) est identique dans la page virtuelle et la page physique.
  • La taille de page vaut P=2pP=2^p, ce qui rend la division entière, la division modulo et la multiplication par PP efficaces (opérations de bits).
  • La division entière par PP extrait la partie haute (VPN), et le modulo PP extrait la partie basse (offset).
  • La table de pagination est un dictionnaire de correspondances : clé=VPN et valeur=PPN plus métadonnées, chaque paire forme une PTE.
  • Une PTE est stockée en mémoire principale, et la MMU la consulte en matériel pour traduire l’adresse sans intervention logicielle supplémentaire.
  • Il existe trop de PTE pour tenir entièrement dans la MMU : historiquement tableau exhaustif, aujourd’hui plutôt structure en arbre de recherche pour accélérer la consultation.

💡 Astuce mémo

Offset = même adresse dans la page : VPN change, PO reste.

📖 6. Pagination à la demande et défaut de page

🔑 Notions clés & Définitions

  • Valid bit : Le valid bit est un booléen du PTE qui indique si la page virtuelle est présente en DRAM et donc accessible.
  • PTE valide : Une PTE valide décrit une page virtuelle dont le contenu est en DRAM, ce qui rend l’accès mémoire possible.
  • PTE invalide : Une PTE invalide décrit une page virtuelle absente de DRAM, ce qui empêche l’accès direct et déclenche une gestion par le noyau.
  • Page fault : Un page fault est l’interruption déclenchée quand le CPU accède à une page virtuelle dont la PTE est invalide mais dont la page doit être chargée.
  • Segmentation fault : Un segmentation fault correspond à une erreur irrécupérable quand la page virtuelle demandée n’est pas allouée (adresse non valide pour le processus).

📝 Points essentiels

  • Une page virtuelle présente en DRAM correspond à une PTE valide, donc la MMU peut traduire vers une adresse physique et autoriser l’accès.
  • Une page virtuelle absente de DRAM (swapped-out ou uncached) correspond à une PTE invalide, donc l’accès déclenche une interruption logicielle.
  • Une page virtuelle non existante (unallocated ou unmapped) correspond aussi à une PTE invalide, mais l’erreur est irrécupérable et le noyau tue le processus.
  • Quand le CPU accède à une PTE invalide, la MMU déclenche une interruption logicielle et le CPU exécute l’ISR du noyau associée.
  • Si la page n’est pas allouée, le noyau considère l’accès comme une erreur irrécupérable (VO : segmentation fault) et termine le processus fautif.
  • Si la page est déchargée, le noyau traite un défaut de page (VO : page fault) et charge la page en DRAM avant de relancer l’accès.

💡 Astuce mémo

Valid bit = DRAM : 1 accès OK, 0 page fault (ou kill si non allouée).

📖 7. Localité, working set et thrashing

🔑 Notions clés & Définitions

  • Localité des accès : Principe selon lequel des adresses proches sont consultées à des instants proches, ce qui rend les accès mémoire plus prédictibles.
  • Working set : Ensemble des pages virtuelles qu’un processus a utilisées récemment, servant d’estimation de ses besoins en mémoire.
  • Thrashing : Effondrement brutal des performances dû à un excès de défauts de page, où le système passe son temps à échanger plutôt qu’à exécuter.
  • AMAT : Moyenne du temps d’accès mémoire, combinant le temps de hit et le coût des défauts de page pondéré par leur fréquence.
  • Working set en multiprogrammation : Situation où plusieurs processus ont chacun un working set, dont la somme peut dépasser la mémoire DRAM disponible.

📝 Points essentiels

  • AMAT = temps de hit + (taux de défaut de page × pénalité de défaut de page).
  • Le temps de hit est proche de la latence DRAM, environ 50 ns.
  • La pénalité d’un défaut de page correspond à la latence disque, environ 5 ms.
  • Les défauts de page doivent rester rares pour éviter une hausse massive de l’AMAT.
  • Principe de localité : si des accès sont proches dans le temps, les pages récemment utilisées ont plus de chances d’être réutilisées.
  • Working set d’un processus = ensemble des pages virtuelles accédées récemment par ce processus uniquement, pas par les autres.

💡 Astuce mémo

Localité = « proche maintenant, proche bientôt » ; Working set = « pages chaudes » ; Thrashing = « trop de pages froides à charger ».

📖 8. Allocation dynamique avec mmap

🔑 Notions clés & Définitions

  • Adresse virtuelle : Une adresse virtuelle désigne une zone vue par le processus, que le noyau relie ensuite à des pages physiques selon les besoins.
  • Pages virtuelles : Des pages virtuelles sont des unités fixes de mémoire virtuelle que le noyau mappe en nombre entier lors d’un appel mmap.
  • Flags de protection PROT : Les flags PROT indiquent les droits d’accès de la zone mappée, comme lecture, écriture et exécution.
  • Flags de mapping MAP : Les flags MAP décrivent le type de mapping et le comportement de partage, en combinant des options via un OR bitwise.
  • Swap file : Un swap file est un espace de stockage utilisé pour faire transiter des pages entre DRAM et disque lors des défauts de page.

📝 Points essentiels

  • mmap choisit une adresse virtuelle de départ et le noyau réserve un nombre entier de pages virtuelles pour la région demandée.
  • Les droits d’accès viennent de PROT_READ et/ou PROT_WRITE et/ou PROT_EXEC, combinables selon le besoin.
  • Les options de mapping se combinent avec un OR bitwise, par exemple MAP_ANONYMOUS | MAP_PRIVATE pour des pages vierges dédiées.
  • Avec MAP_ANONYMOUS, la région est allouée paresseusement page par page : le premier accès déclenche un défaut et le noyau fournit une page physique puis l’efface.
  • Le swapping correspond à un va-et-vient entre DRAM et un swap file : swap in au défaut de page, swap out pour libérer des pages physiques.
  • Comparaison : MAP_ANONYMOUS | MAP_SHARED rend les pages accessibles aux processus enfants, tandis que MAP_ANONYMOUS | MAP_PRIVATE isole via Copy-On-Write.

💡 Astuce mémo

Paresseux = premier accès = défaut de page = page physique fournie, puis swap in/out gère la DRAM.

📖 9. Types de mapping mmap et partage

🔑 Notions clés & Définitions

  • Memory-Mapped I/O : Technique de communication où le noyau mappe des adresses physiques de périphériques dans l’espace d’adressage pour y accéder comme de la mémoire.
  • MMIO : Zone d’adresses réservée au noyau et aux drivers pour accéder aux périphériques via leurs registres.
  • VAS : Espace d’adressage virtuel propre à un processus, géré par l’OS via une table de pagination.
  • Copy-on-Write : Mécanisme qui retarde la duplication des pages jusqu’au moment où une copie est modifiée.
  • fork() : Appel système qui crée un nouveau processus en dupliquant les structures, puis en s’appuyant sur Copy-on-Write pour éviter une copie immédiate.

📝 Points essentiels

  • Les adresses DRAM sont allouées aux processus userland, tandis que les adresses MMIO sont réservées au noyau et aux drivers.
  • La MMU sert de support matériel à la traduction et peut être reconfigurée à chaque changement de contexte pour refléter le VAS courant.
  • L’isolation entre processus repose sur un VAS individuel et sur une table de pagination maintenue par l’OS pour chaque processus.
  • Une même page peut être présente dans plusieurs VAS, ce qui permet du partage tout en conservant des espaces virtuels distincts.
  • Le mapping en lecture seule peut viser des pages comme un fichier exécutable, sans consommer d’espace disque supplémentaire.
  • Le mapping en lecture/écriture correspond à une mémoire partagée pour permettre la communication entre processus via les mêmes pages physiques ou mappages.

💡 Astuce mémo

DRAM=Userland, MMIO=Noyau; VAS=bulle par processus; COW=Copie seulement si ça s’écrit.

📖 10. Protection, isolation et partage mémoire

🔑 Notions clés & Définitions

  • Fork() : Appel système qui crée un nouveau processus en dupliquant l’espace d’adressage, tout en pouvant partager des pages via une stratégie de copie différée.
  • Copy-on-Write : Stratégie de gestion mémoire où des pages sont partagées en lecture seule jusqu’à la première écriture, qui déclenche une copie.
  • PTE en lecture seule : Entrée de table de pages configurée pour interdire l’écriture, afin de forcer la détection d’une tentative de modification.
  • PCB (page table) : Structure de contrôle par processus contenant les informations nécessaires pour traduire ses adresses virtuelles et gérer les pages associées.
  • Faute de protection : Interruption déclenchée par la MMU lorsqu’un processus tente d’écrire dans une page dont les droits ne l’autorisent pas.

📝 Points essentiels

  • Lors d’un fork(), le noyau duplique les structures de pagination (PCB et tables) et marque les PTE concernés en lecture seule pour éviter une copie immédiate.
  • Le noyau marque, dans les deux PCB, les pages partagées comme copy-on-write afin que les deux processus voient la même donnée tant qu’aucun n’écrit.
  • Quand P1 tente d’écrire dans une page marquée en lecture seule, la MMU détecte l’infraction et lève une faute de protection.
  • Après la faute, le noyau constate que la page est copy-on-write, duplique finalement le contenu de la page, puis met à jour les tables pour autoriser lecture/écriture.
  • Après mise à jour, P1 réessaie l’écriture et obtient une nouvelle donnée visible uniquement depuis son espace d’adressage.

💡 Astuce mémo

Copy-on-Write = «lecture partagée, écriture déclenche copie» : tant que ça ne s’écrit pas, ça ne se duplique pas.

📊 Tableaux de synthèse

PTE valide vs invalide (ce que voit la MMU)

État PTEPage en DRAMConséquence à l’accès
PTE valideOuiMMU traduit vers une adresse physique et l’accès est possible
PTE invalideNonMMU ne peut pas traduire et déclenche une interruption logicielle

Types de mapping mmap : partage vs isolation

Mapping (flags)PartageComportement à l’écriture
MAP_ANONYMOUS | MAP_SHAREDEnfants peuvent accéderPas d’isolation via COW (partage visible)
MAP_ANONYMOUS | MAP_PRIVATEIsolationCopy-On-Write : copie seulement à la première écriture
MAP_FILE | MAP_SHAREDPartage avec le fichier d’origineSwap vers le fichier d’origine
MAP_FILE | MAP_PRIVATEIsolationCopy-On-Write puis swap vers fichier anonyme

⚠️ Pièges & confusions fréquents

  1. Confondre VA et PA : le CPU manipule des adresses virtuelles, la MMU traduit à la volée vers des adresses physiques.
  2. Croire que la page fault est gérée par le programme : c’est une interruption logicielle où le noyau charge la page en DRAM puis relance l’accès.
  3. Mélanger page fault et segmentation fault : page fault = page déchargée à charger, segmentation fault = page non allouée/irrécupérable.
  4. Penser que PO change entre virtuel et physique : l’offset de page reste identique, seul VPN→PPN (ou équivalent) varie.
  5. Croire que la table de pagination tient dans la MMU : le cours indique qu’il y a trop de PTE, donc structure de recherche (ex. arbre) plutôt qu’un tableau exhaustif.
  6. Interpréter MAP_ANONYMOUS|MAP_PRIVATE comme “copie immédiate” : le cours insiste sur l’allocation paresseuse et l’isolation via Copy-On-Write.
  7. Confondre isolation et partage : une même page peut apparaître dans plusieurs VAS, donc partage possible malgré des espaces virtuels distincts.

✅ Checklist Examen

  1. Expliquer l’intuition de la mémoire virtuelle : chaque processus voit un “vas” privé comme un vaste tableau d’octets, réalisé via hiérarchie cache→RAM→disque.
  2. Relier les 4 problèmes motivant la mémoire virtuelle : lenteur, taille insuffisante, gestion des zones libres/occupées, isolation/protection et partage.
  3. Définir indirection et donner l’idée “référence → intermédiaire → cible” appliquée à la traduction d’adresses.
  4. Décrire le rôle de la MMU : traduire à chaque accès mémoire une VA en PA, reconfigurée par l’OS à chaque changement de contexte.
  5. Donner les ensembles VAS et PAS (VA sur n bits avec N=2^n, PA sur m bits avec M=2^m) et l’idée “VAS privé par processus”.
  6. Calculer la décomposition d’une adresse avec taille de page P=2^p : VPN=⌊VA/P⌋, PO=VA mod P, puis PA=PPN×P+PO.
  7. Expliquer pourquoi les calculs sont “gratuits” en pratique quand P=2^p (division entière/modulo/multiplication par bits) et rappeler que PO est identique en virtuel et physique.
  8. Décrire la table de pagination PT comme dictionnaire VPN→PPN+méta, et la notion de PTE (valid bit et métadonnées).
  9. Distinguer PTE valide vs invalide : page présente en DRAM (accès possible) vs absente (interruption logicielle).
  10. Décrire le déroulement d’un défaut de page : MMU détecte PTE invalide, OS vérifie l’existence, choisit une page libre (swap out si besoin), charge (swap in), met à jour la PTE, puis relance l’accès.
  11. Calculer/écrire AMAT = page hit time + (page fault rate × page fault penalty) et rappeler les ordres de grandeur (hit ~50 ns, pénalité ~5 ms) et le lien avec la localité/working set.
  12. Expliquer thrashing : somme des working sets > taille DRAM ⇒ excès de défauts de page ⇒ effondrement des performances.
  13. Expliquer mmap : réservation d’un nombre entier de pages virtuelles, droits via PROT_, partage via MAP_ (OR bitwise), et allocation paresseuse (premier accès ⇒ défaut).
  14. Comparer MAP_ANONYMOUS|MAP_SHARED vs MAP_ANONYMOUS|MAP_PRIVATE (COW) et MAP_FILE|MAP_SHARED vs MAP_FILE|MAP_PRIVATE (COW puis swap vers fichier anonyme).

Testez vos connaissances

Testez vos connaissances sur Gestion de la mémoire virtuelle et partage avec 10 questions à choix multiples avec corrections détaillées.

1. Quel est l’intérêt principal de la mémoire virtuelle pour un processus ?

2. Quel problème la mémoire physique doit-elle notamment résoudre lorsqu’elle héberge plusieurs processus ?

Faire le QCM →

Révisez avec les flashcards

Mémorisez les concepts clés de Gestion de la mémoire virtuelle et partage avec 20 flashcards interactives.

Mémoire virtuelle — définition ?

Espace privé perçu par chaque processus.

Espace d’adressage — rôle ?

Indexer la mémoire virtuelle d’un processus.

CPU virtuel — concept ?

Illusion de CPU dédié à chaque processus.

Voir les flashcards →

Cours similaires

Crée tes propres fiches de révision

Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.

Générateur de fiches