J'essaie de comprendre comment un tableau de pages à plusieurs niveaux permet d'économiser de la mémoire. Selon ma compréhension, un tableau de pages à plusieurs niveaux consomme au total plus de mémoire qu'un tableau de pages à un seul niveau.
Exemple: considérons un système de mémoire avec un format de page de 64 Ko et un processeur 32 bits. Chaque entrée dans la table des pages est de 4 octets.
Un seul niveau de table de page : 16 bits (2 ^ 16 = 64 Ko) sont requis pour représenter le décalage de page. Les 16 bits restants sont donc utilisés pour indexer dans un tableau de page. Alors
* Taille du tableau de pages = 2 ^ 16 (nombre de pages) * 4 octets (taille de chaque entrée du tableau de pages) = 2 ^ 18 octets *
Table de pages à plusieurs niveaux : Dans le cas d'une table de pages à deux niveaux, permet d'utiliser les 10 premiers bits les plus significatifs pour indexer dans la table de pages de premier niveau. Ensuite, 10 bits à indexer dans la table de pages de deuxième niveau, qui comporte les mappages numéro de page sur numéro de trame. Reste 12 bits représente le décalage de page.
Taille d'un tableau de pages de second niveau = 2 ^ 10 (nombre d'entrées) * 4 octets (taille de chaque entrée) = 4 Ko
Taille totale de toutes les tables de pages de second niveau = 2 ^ 10 (nombre de tables de pages de second niveau) * 4 Ko (taille de chaque table de pages de second niveau) = 4 Mo
Taille de la table de pages de premier niveau = 2 ^ 10 (nombre d'entrées) * (10/8) octets (taille de chaque entrée) = 1,25 Ko
Mémoire totale requise pour stocker les tables de pages de premier et deuxième niveau = 4 Mo + 1,25 Ko
Nous avons donc besoin de plus de mémoire pour stocker des tables de pages à plusieurs niveaux.
Si tel est le cas, comment les tables de pages multi-niveaux économisent-elles de la mémoire?
L'espace requis pour accéder aux données est 2 ^ 20 * 4bytes = 4MB
Dans le cas à 2 niveaux dont vous avez parlé, vous avez besoin de la page de premier niveau, puis de l'une des 2 ^ 10 pages de deuxième niveau . Donc, Taille du premier niveau = 2 ^ 10 * 4 octets = 4 Ko. nous avons besoin de seulement 1 parmi les 2 ^ 10 pages = la taille est donc 2 ^ 10 * 4 octets = 4 Ko
La taille totale requise est maintenant: 4 Ko + 4 Ko = 8 Ko.
La comparaison finale est de 4 Mo contre 8 Ko.
Voici l'un des principaux avantages des tables de pages à plusieurs niveaux:
Commencez par découper le tableau de pages en unités de la taille d'une page. puis, si une page entière d’entrées de table de pages (PTE) n’est pas valide, n’allouez pas cette page du tout.
La source. (article 20.3)
Ainsi, la quantité de mémoire nécessaire pour la table de pages n'est pas dictée par la taille de l'espace d'adressage, mais par la quantité de mémoire utilisée par le processus.
En outre, les pages de table peuvent être paginées si la mémoire physique est saturée - seul le répertoire de page doit toujours être présent en mémoire.
Les tables multi-niveaux sont principalement nécessaires car si la structure de la mémoire est Intel-land.
Supposons que vous ayez un système 32 bits et que vous divisiez l'espace d'adressage de sorte que le premier soit réservé au système et que la moitié inférieure concerne les adresses d'utilisateur.
Avec une telle division, vous auriez besoin de 2 Go d'entrées de table de page contiguës dans chaque table de page d'utilisateur pour atteindre les adresses système.
L'ancien VAX à une approche simple à cela. Il a divisé l'espace d'adressage de 4 Go en 4 régions (2 utilisateurs, 1 système, une inutilisable). Les trois zones utilisables avaient leur propre tableau de pages.
Chaque région avait son propre tableau de pages. Comme il y avait un espace d'adressage système dédié, les tables de pages utilisateur pouvaient être des adresses virtuelles afin de ne pas nécessiter de mémoire contiguë.
La première phase de la traduction d'adresse a consisté à examiner les 2 bits d'adresse de poids fort pour sélectionner le tableau de pages à utiliser.
Au lieu de disposer de tables de pages distinctes, Intel-land décompose la table de pages. Cela réduit les problèmes de (1) besoin de mémoire contiguë pour la table; (2) obliger la table des pages à couvrir tout l'espace d'adressage; (3) permet de définir des adresses de noyau pouvant être partagées par tous les processus.