Gestion des tables de pages Linux et MMU

J’ai une question sur la relation entre le kernel Linux et MMU. J’ai maintenant compris que le kernel Linux gère la table de pages entre les adresses de mémoire virtuelle et les adresses de mémoire physique. Dans le même temps, il existe une architecture MMU dans x86 qui gère la table de pages entre les adresses de mémoire virtuelle et les adresses de mémoire physique. Si le MMU présente près de CPU, le kernel doit-il toujours prendre en charge la table de pages?

Cette question peut être stupide, mais l’autre question est de savoir si MMU prend soin de l’espace mémoire, qui gère une mémoire élevée et une mémoire insuffisante? Je crois que le kernel recevra la taille de la mémoire virtuelle du MMU (4 Go en 32 bits), puis le kernel fera la distinction entre l’espace utilisateur et l’espace du kernel dans l’adresse virtuelle. Ai-je raison? ou complètement faux?

Merci beaucoup d’avance!

Les responsabilités de gestion des pages du système d’exploitation et du MMU sont deux aspects d’un même mécanisme, qui se situe à la frontière entre l’architecture et la micro-architecture.

La première partie définit le «contrat» entre le matériel et le logiciel qui s’exécute dessus (dans ce cas, le système d’exploitation). Si vous souhaitez utiliser la mémoire virtuelle, vous devez créer et gérer une table de pages comme décrit dans ce contrat. Le côté MMU, quant à lui, est une unité matérielle chargée d’effectuer les tâches matérielles de la traduction d’adresse. Cela peut inclure ou non des optimisations matérielles, celles-ci sont généralement masquées et peuvent être implémentées de différentes manières pour fonctionner sous le capot, du moment qu’elles conservent le côté matériel du contrat.

En théorie, la MMU peut décider d’établir un ensemble d’access à la mémoire pour chaque traduction (un parcours de page), afin d’obtenir le comportement requirejs. Cependant, comme il s’agit d’un élément essentiel à la performance, la plupart des MMU optimisent ce résultat en mettant en cache les résultats des passages de pages précédents dans le TLB, tout comme un cache stocke les résultats des access précédents. les access à la table de pages car elle réside généralement dans la mémoire cache). La MMU peut gérer plusieurs TLB (la plupart des implémentations séparent celles pour les pages de données et de code et certaines ont des TLB de second niveau), et fournissent la traduction sans que vous ne remarquiez cela, sauf pour le temps d’access plus rapide.

Il convient également de noter que le matériel doit se prémunir contre de nombreux cas en coin susceptibles de nuire à la cohérence de ces “mises en cache” de TLB de traductions précédentes, par exemple un aliasing de pages ou des remappages en cours d’utilisation. Sur certaines machines, les cas les plus dangereux nécessitent même un stream de chasse massif appelé abattage TLB.