Aller au contenu principal

Mémoire virtuelle

Progression

#Mémoire virtuelle

À quoi ça sert ?

À quoi ça sert: donner à chaque processus l’illusion d’un grand espace contigu, protéger les espaces entre eux, et permettre du partage contrôlé. Comment ça marche: pages, tables, TLB, fautes de page, politiques de remplacement.

#Concepts clés

  • Adresse logique (virtuelle) vs physique: le programme manipule des adresses virtuelles, traduites vers des cadres en RAM par la MMU selon des tables pilotées par le noyau.
  • Pages et cadres: la mémoire est découpée en unités fixes (4K, 2M, 1G). Taille qui impacte TLB/localité (huge pages réduisent la pression TLB).
  • TLB: cache la traduction VA→PA; un hit est très rapide, un miss force une marche dans la table (page walk) et remplit le TLB.
  • Fautes de page: mineure (page déjà en RAM mais non mappée), majeure (lecture disque). Trop de fautes majeures ⇒ thrash.

#Animation: parcours de traduction

TLB lookup
Hit → rapide ; Miss → consulter table
Table des pages
Multi‑niveaux ; remplir le TLB
Page fault
Mineure: map ; Majeure: I/O + remplacement
Protection
RWX/NX ; user/supervisor ; SIGSEGV sinon

#Diagramme: TLB hit/miss et faute de page

CPU
MMU/TLB
Noyau
Disque
1. VA → ? (lookup)
2. Hit: PA, accès RAM
3. VA → miss
4. Page walk / défaut
5. Page majeure: lire bloc
6. Données
7. Map + remplir TLB
8. Reprendre l’instruction

#Pas‑à‑pas: Copy‑on‑Write (fork/écriture)

Après fork(), parent et enfant pointent vers les mêmes pages en lecture (bit COW). Les deux avancent sans copie tant qu’ils lisent.

Étape 1 / 4

#LRU (cache/pages) — démonstrateur

LRU — capacité 3 — séquence: [1, 2, 3, 2, 4, 1, 5, 2, 3, 4, 5]
Hits: 0
Misses: 0
Prochain: 1
Plus à gauche = plus récent
vide
vide
vide

#Étude de cas: thrashing

Quand l’ensemble de travail dépasse largement la RAM, le système “bat des ailes”: fautes majeures en boucle, débits disques en hausse, CPU syst. élevé. Indices: vmstat, iostat, compteurs de fautes majeures. Contre‑mesures: réduire la pression mémoire, revoir structures/algos, limiter la concurrence, ajouter de la RAM.

#Copy‑on‑Write et fork

  • fork(): parent et enfant partagent les mêmes pages en lecture, marquées COW.
  • Écriture → faute de page → dupliquer la page et marquer comme écrivable.

#ASLR et NX (sécurité)

  • ASLR: randomise les bases (heap, stack, libs) pour complexifier l’exploitation.
  • NX/DEP: interdit l’exécution sur la pile/heap; combiné à ASLR et canaries, réduit l’impact des débordements.

#Remplacement

  • Politiques: LRU approximée (CLOCK), FIFO avec second‑chance; choix local (par processus) vs global (système).
  • Mesures: surveiller fautes majeures et temps I/O; si le système swappe et que les fautes explosent, on entre en thrashing.
TLB shootdown

En SMP, invalider des entrées TLB d’un autre cœur requiert une coordination (IPI) pour maintenir la cohérence.

#Pas‑à‑pas: faute de page et diagnostic

Supposons un processus qui touche 1 GiB de mémoire après allocation, par sauts de 4 KiB. À chaque premier accès d’une page, la MMU ne trouve pas de mapping: faute de page. Si la page est demandée en lecture et que la RAM est disponible, le noyau alloue un cadre et met à jour la table: on parle de faute mineure. Si la pression mémoire force à relire depuis le swap/disque, la faute est majeure et coûte des millisecondes.

Indices à observer:

  • vmstat 1: colonnes si/so (swap in/out), cs (context switches), us/sy (temps user/system). Une hausse si/so et un sy élevé sont des signaux.
  • pidstat -r 1 <pid>: fautes mineures/majeures par seconde.
  • iostat -xz 1: latences disque et saturation (%util).

Contre‑mesures simples: réduire l’empreinte (structures plus compactes), regrouper les accès (meilleure localité), limiter la concurrence qui dilate l’ensemble de travail, et si nécessaire ajouter de la RAM. Sur Linux, des huge pages réduisent la pression TLB pour de grands accès séquentiels.

#Quiz

Quelle situation déclenche une faute de page majeure ?
Quelle situation déclenche une faute de page majeure ?