La génération d'une adresse physique dépend fortement du système de gestion de la mémoire du système d'exploitation et de l'architecture de l'ordinateur. Il n’existe pas d’algorithme unique et universel. Cependant, le processus général implique de mapper une adresse logique (virtuelle) sur une adresse physique. Cette cartographie est cruciale car :
* Protection : Plusieurs processus s'exécutent simultanément et chacun a besoin de son propre espace mémoire isolé. L’utilisation directe d’adresses physiques conduirait au chaos et à des failles de sécurité.
* Efficacité : Les processus peuvent ne pas avoir besoin de toute la mémoire allouée en même temps. Le mappage permet une utilisation efficace de la RAM physique.
* Partage de mémoire : Les processus peuvent devoir partager certaines régions de mémoire. La cartographie permet de gérer ce partage en toute sécurité.
Voici un aperçu du processus, en mettant l'accent sur l'approche la plus courante utilisant la pagination :
1. Génération d'adresse logique : Un programme génère une adresse logique (également appelée adresse virtuelle). Il s'agit de l'adresse utilisée par le programme, indépendamment de la configuration de la mémoire physique. Il est généralement composé de deux parties :
* Numéro de page : Identifie à quelle page le programme accède.
* Décalage : Identifie l'emplacement spécifique dans cette page.
2. Recherche dans la table des pages : Le système d'exploitation utilise une structure de données appelée *table de pages* pour traduire les adresses logiques en adresses physiques. Cette table est généralement à plusieurs niveaux pour plus d'efficacité dans la gestion de grands espaces d'adressage. Chaque entrée de la table des pages correspond à une page de la mémoire virtuelle du processus. L'entrée contient :
* Bit présent : Indique si la page est actuellement chargée dans la mémoire physique. Sinon, une *erreur de page* se produit, déclenchant le chargement de la page par le système d'exploitation à partir du stockage secondaire (comme un disque dur).
* Numéro de cadre : Numéro de la trame de mémoire physique (un bloc contigu de mémoire physique) où réside la page.
* Bits de protection : Spécifiez les droits d'accès (lecture, écriture, exécution).
3. Calcul de l'adresse physique : L'entrée de la table des pages pour le numéro de page donné est localisée. Si le bit actuel est défini, l'adresse physique est calculée en concaténant :
* Numéro de cadre (à partir du tableau des pages) : Ceci indique l'adresse de début de la page dans la mémoire physique.
* Décalage (depuis l'adresse logique) : C'est le même décalage dans la page.
4. Adresse physique : La concaténation résultante est l'adresse physique utilisée pour accéder à l'emplacement mémoire.
Exemple (simplifié) :
Disons :
* Adresse logique :numéro de page =2, décalage =100
* Entrée de table de pages pour le numéro de page 2 :numéro de trame =5, bit présent =1
* Taille du cadre =1024 octets
L'adresse physique serait :(Numéro de trame * Taille de trame) + Décalage =(5 * 1024) + 100 =5224
Variations et complications :
* Segmentation : Un autre système de gestion de la mémoire utilise des segments au lieu de pages. La segmentation offre une manière différente d'organiser la mémoire, souvent utilisée en conjonction avec la pagination.
* Tampon de recherche de traduction (TLB) : Pour accélérer la traduction des adresses, un cache appelé TLB stocke les entrées de table de pages récemment utilisées.
* Tableaux de pages à plusieurs niveaux : Pour les très grands espaces d'adressage, les tables de pages sont souvent hiérarchiques (par exemple, une table de pages pointant vers d'autres tables de pages).
* E/S mappées en mémoire : Certains appareils sont accessibles à l’aide d’adresses mémoire. Ces mappages sont gérés par le système d'exploitation et le matériel.
* Randomisation de la disposition de l'espace d'adressage (ASLR) : Une fonctionnalité de sécurité qui randomise l'emplacement des régions de mémoire clés pour rendre les exploits plus difficiles.
En résumé, la génération d'une adresse physique est un processus complexe impliquant plusieurs étapes et structures de données gérées par le système d'exploitation. Les détails varient en fonction de l'architecture et du système d'exploitation spécifiques, mais le principe de base reste le même :mapper les adresses logiques aux adresses physiques pour la protection, l'efficacité et la gestion de la mémoire.
|