Les pages de mémoire
Dans notre contexte, une page est un bloc de données contiguës en mémoire. On distingue deux types de pages: les pages physiques et les pages virtuelles.
Les pages physiques (appelées aussi cadres de page) sont les pages de la RAM physique. Si on définit des pages de 4KiB (\(2^{12}\)) et que la taille de la mémoire physique fait 32KiB, on a donc \(32'768/4096 = 8\) pages physiques (ou \(8\) cadres de pages.).
La figure ci-dessous illustre les deux premières pages de 4KiB de la mémoire physique.
Les pages virtuelles segmentent l’espace d’adressage virtuel d’un système. Sur un système 16 bits, l’espace d’adressage permet \(2^{16} = 65'536\) adresses virtuelles. Si on définit des pages de 4KiB, on a donc \(2^{16}/2^{12} = 16\) pages virtuelles. Sur un système 32 bits, il y a \(2^{32}/2^{12} = 2^{10} = 1'048'576\) pages virtuelles de 4KiB.
La figure ci-dessus illustre le rôle de la MMU qui consiste à faire correspondre les pages virtuelles aux cadres de pages physiques. Dans cet exemple, la première page virtuelle (page 0) est mappée sur le cadre de page 3. La page virtuelle 1 est mappée sur le cadre de page 1. etc.
Un système a souvent plus de pages virtuelles que de cadres de pages physiques et les pages virtuelles ne sont pas toutes mappées sur des cadres de pages physiques. Dans notre exemple, les pages virtuelles 6, 7, 8, 10, 12, 13, 14 et 15 ne sont mappées sur aucun cadre de page physique.
Le microprocesseur émet des adresses virtuelles sur le bus d’adresses. La MMU intercepte ces adresses
et les traduit en adresses physiques. Toutes ces adresses peuvent être décomposées en deux parties:
le numéro de la page, et le déplacement (offset) à l’intérieur de la page. Si on reste sur un système
16 bits avec des pages de 4 KiB, l’adresse virtuelle 0x0000 correspond à la page 0 et au déplacement 0.
L’adresse virtuelle 0x2004 correspond à la page 2 et au déplacement 4 (\(0x2004 = 8196 = 2 \cdot 4096 + 4\)).
La taille des pages est toujours une puissance de 2 et la séparation entre le numéro de page et le déplacement est visible dans les adresses binaires. Si on a des pages de 4KiB, le déplacement est sur 12 bits de poids faibles et le numéro de page est sur les bits de poids forts. La figure ci-dessous illustre la décomposition d’une adresse virtuelle de 32 bits, avec des pages de 4 KiB, en numéro de page et déplacement.
Pour une adresse donnée \(a\), on obtient le numéro de la page \(n\) en divisant \(a\) par la taille de la page \(p\). Le déplacement \(d\), c’est le reste de la division (le modulo).
Notez bien que La MMU ne traduit que la page d’une adresse et que le déplacement reste le même dans l’adresse virtuelle et dans l’adresse physique.
La figure ci-dessous illustre la traduction des adresses virtuelles en adresses physiques. Dans la figure, l’adresse virtuelle 0x2004
entre par le bas; les bits de poids forts représentent le numéro de page virtuelle et ils sont traduits en cadre de page
à l’aide de la table de pages. Les bits de poids faibles représentent le déplacement dans la page et ils sont
passés tels quels dans l’adresse physique.