2015-09-25 1 views
0

J'essaie actuellement de comprendre la programmation des systèmes pour Linux et j'ai du mal à comprendre comment fonctionnent les mappages de mémoire virtuelle vers physique. Ce que je comprends jusqu'à présent, c'est que deux processus P1 et P2 peuvent faire référence à la même adresse virtuelle par exemple 0xf11001. Maintenant, cette adresse mémoire est divisée en deux parties. 0xf11 est le numéro de page et 0x001 est le décalage dans cette page (en supposant 4096 taille de la page est utilisée). Pour trouver l'adresse physique, la MMU a des registres matériels qui mappent le numéro de page à une adresse physique, disons 0xfff. La dernière étape consiste à combiner 0xfff avec 0x001 pour trouver l'adresse physique 0xfff001.Fonctionnement du mappage de mémoire virtuel vers pyhsical

Cependant cette compréhension ne fait aucun sens, les mêmes adresses virtuelles pointeraient toujours vers le même emplacement physique ??? Quelle étape manque-t-il pour que ma compréhension soit correcte ???

Répondre

1

Il vous manque une étape (cruciale) ici. En général, MMU n'a pas de registres matériels avec des mappages, mais un registre (pointeur de base de table page) qui pointe vers l'adresse de mémoire physique de la table de pages (avec mappages) pour le processus en cours d'exécution (qui sont propres à chaque processus). Sur le changement de contexte, le noyau change la valeur de ce registre, donc pour chaque processus en cours, un mappage différent sera effectué.

Voici une belle présentation sur ce sujet: http://www.eecs.harvard.edu/~mdw/course/cs161/notes/vm.pdf