Le PAE (Extension d'adresse physique) est un principe plutôt simple: le MMU (Unité de gestion mémoire) qui fait la conversion entre adresse logique et adresse physique est étendu afin que les adresse physiques soient codées sur 36 bits (64Gio). Les adresses logiques restent sur 32 bits (4gio), ce qui explique que les processus soient limités à 4Go.
Lorsque le processeur accède à une case mémoire, l'adresse logique sur 32 bits est convertie en adresse physique sur 36 bits via le TLB (Translation Lookaside Buffer) et tout le monde est content. De ce coté, ça n'a quasiment aucun impact.
Pour le kernel, les choses sont moins roses. Lui aussi est limité à 4Gio car toutes les adresses sont sur 32 bits. Or le kernel a globalement besoin d'accéder à toute la mémoire de tous les processus (pour mapper les pages du programme, des fichiers, lire ou écrire les données réseau, disque etc...) et comme on a plus de 4 Gio de mémoire, il est impossible de faire tout rentrer dans l'espace d'adressage de 32 bits du kernel.
Ça oblige à revenir aux joies de la mémoire paginées. Le kernel modifie en permanence les réglages de la MMU pour accéder, morceaux par morceaux, aux pages mémoires dont il a besoin. Opération très couteuse parce qu'elle oblige à vider un certain nombre de cache, en particulier le cache TLB qui conditionne tous les accès à la mémoire.
[^] # Re: Quels avantages à installer un noyau 64 bits ?
Posté par Sébastien Koechlin . En réponse au journal Quels avantages à installer un noyau 64 bits ?. Évalué à 10.
Ok, c'est parti.
Le PAE (Extension d'adresse physique) est un principe plutôt simple: le MMU (Unité de gestion mémoire) qui fait la conversion entre adresse logique et adresse physique est étendu afin que les adresse physiques soient codées sur 36 bits (64Gio). Les adresses logiques restent sur 32 bits (4gio), ce qui explique que les processus soient limités à 4Go.
Lorsque le processeur accède à une case mémoire, l'adresse logique sur 32 bits est convertie en adresse physique sur 36 bits via le TLB (Translation Lookaside Buffer) et tout le monde est content. De ce coté, ça n'a quasiment aucun impact.
Pour le kernel, les choses sont moins roses. Lui aussi est limité à 4Gio car toutes les adresses sont sur 32 bits. Or le kernel a globalement besoin d'accéder à toute la mémoire de tous les processus (pour mapper les pages du programme, des fichiers, lire ou écrire les données réseau, disque etc...) et comme on a plus de 4 Gio de mémoire, il est impossible de faire tout rentrer dans l'espace d'adressage de 32 bits du kernel.
Ça oblige à revenir aux joies de la mémoire paginées. Le kernel modifie en permanence les réglages de la MMU pour accéder, morceaux par morceaux, aux pages mémoires dont il a besoin. Opération très couteuse parce qu'elle oblige à vider un certain nombre de cache, en particulier le cache TLB qui conditionne tous les accès à la mémoire.
Bref, un bricolage pas très élégant.