Simple OS La Pagination Benoit LAMOTTE D’après l’article Conception d’OS : mise en place de la pagination, Linux magazine n°65 page 42, David Decotigny & Thomas Petazzoni.
Sommaire Principe de la memoire virtuel Architecture x86 Simple OS Objectifs Traduction d’adresses Architecture x86 Petit rappel Adresse Linéaire Répertoire et table des pages Identity mapping Modification des tables de traduction d’adresses Simple OS Le mirroring Le fonctionnement : la mise en place de la pagination
Principe de la memoire virtuelle Objectifs Avant : Programmer en fonction de la mémoire disponible Après : Mémoire disponible « infinie »
Principe de la memoire virtuelle Objectifs Comment est-ce possible ? Utilisation des autres ressources. RAM utilisé pour stocker les données les plus utilisées.
Principe de la memoire virtuelle Traduction d’adresses Prise en charge par la MMU RAM Bus de données Bus de données CPU MMU Adresses fictives Adresses RAM Exception MMU
Principe de la memoire virtuelle Traduction d’adresses CPU MMU Adresse fictive Accès à une donnée Chargement d’un instruction Il existe une traduction en RAM? non oui Utilisation des données Exécution de l’instruction Bus de données Mémoire Accès à la RAM Exception OS Données/instruction sur le bus de données La donnée/instruction est stockée ailleurs ? oui non Transfert vers la RAM Signale accès invalide à l’application fautive Nouvelle traduction communiquée à la MMU
Architecture x86 Petit Rappel MMU gère la segmentation et la pagination Adresse logique -> adresse linéaire par la segmentation Adresse linéaire -> adresse physique par la pagination de la MMU
Architecture x86 Adresse linéaire Adresse Linéaire : 0xa811800c : 42*4MO + 24*4KO +12 31 22 21 12 11 Index PDE Index PTE Offset 24 12 Page physique 42 PT PD Offset 12 0x84 0x123000 P=1 PTE n° 24 PDE n° 42 0x504000 P=1 cr3 0x40100
Architecture x86 Répertoire et table des pages Tableau de 4ko 1024 entrées (PDE & PTE) de 4 octets Structure identique : Bit 31-12 : adresse en RAM Bit 2 : 0 si accessible qu’en mode superviseur Bit 1 : 0 accessible en lecture seule Bit 0 : bit « P » indique si présent en mémoire.
Architecture x86 Mise en place de la pagination Configuration de toutes les tables de traduction d’adresses (PD et PT). Initialisation du registre cr3. Positionnement du Bit 31 du registre cr1 à 1.
Architecture x86 Identity Mapping Configuration particulière des tables de traduction d’adresses. Adresses physique = adresse linéaire Il faut ensuite modifier la pagination.
Architecture x86 Modification des tables de traduction d’adresses Simple en pratique mais attention au TLB Modification du cr3 Utilisation de l’instruction invlpg.
Simple OS Le mirroring Permet de rendre le répertoire de pages et les tables des pages accessibles PT 0 PT 1023 0x80000000 PT 1023 PT 511 = PD 0x7fdff000 PT 511 = PD PT 0 0x7fc00000
Simple OS Le mirroring On a fait PDE[idxMirror]=addrPD Pour modifier le contenu de ième tables des pages il faut accéder à la page d’adresse linéaire : idxMirror*4Mo + ième*4Ko Pour modifier les entrer du répertoire des pages il faut accéder à la page d’adresse linéaire: idxMirror*4Mo + idxMirror*4Ko
Simple OS Le fonctionnement : la mise en place de la pagination Mise en place de l’identity mapping Mise en place du Mirroring Activation de la pagination 0x3fc00000 0x40000000 0x100000 0x200000 0xa0000 0x0 BIOS & VIDEO Kernel (initial) Desc. Page physique MIRRORING (4MO)
Questions ?