La taille de la page est-elle toujours égale à la taille du cadre?

9

J'apprends la pagination. Mon livre dit que les adresses logiques générées par le CPU sont sous la forme |p|d|(numéro de page, décalage de page) et les adresses physiques sont sous la forme |f|d|(numéro de trame, décalage de trame). Il est également spécifiquement mentionné que dle décalage est copié directement pour générer l'adresse physique à partir des adresses logiques.

Maintenant, le bon sens dit que si le décalage est copié directement, la taille de la page DOIT être égale à la taille du cadre (sinon, les décalages ne correspondraient pas). Mais malheureusement, mon livre ne dit rien à ce sujet.

Ainsi, la taille de la page est-elle toujours égale à la taille du cadre?

Veuillez activer les images;)

Carburant
la source

Réponses:

8

Une page est une région d'espace d'adressage virtuel et un cadre de page est une région de mémoire physique. Une page qui mappe une région de mémoire physique doit avoir la même taille que ce morceau de mémoire physique, sinon cela ne sert à rien.

Ils doivent également généralement être alignés correctement. Si vous essayez de mapper, par exemple, un cadre de page de 2 Mo dans la mémoire virtuelle, l'adresse virtuelle et l'adresse physique doivent toutes deux être alignées sur 2 Mo.

De nombreux processeurs modernes prennent en charge plusieurs tailles de page et certains peuvent prendre en charge différentes tailles de page dans le même espace d'adressage. La version actuelle d'Intel x86-64, par exemple, prend en charge les tailles de page 4 Ko, 2 Mo et 1 Go. Ces chiffres ne sont pas arbitraires; ils représentent l'espace d'adressage couvert par différents "niveaux" dans le tableau de pages à plusieurs niveaux. De même, ARM moderne prend en charge les pages de 4 Ko, 64 Ko et 1 Mo, bien que ARM ne fasse pas référence aux pages de 1 Mo comme des "pages" (ce sont des "sections"). ARMv4 et ARMv5 ont pris en charge le fractionnement des pages plus loin en soi-disant "sous-pages"; ils ne sont plus disponibles dans ARMv7.

Fait intéressant, il y a quelques autres choses qui sont souvent de la même taille que la taille de la page. De toute évidence, une entrée TLB a la même taille qu'une page ou un cadre, car il s'agit conceptuellement d'un cache pour les entrées de table de pages. Cependant, la taille du cache L1 est également souvent déterminée par la taille de la page.

Supposons que le cache L1 soit associatif (un cache à mappage direct n'est en réalité qu'un cache associatif à 1 voie, vous pouvez donc le considérer comme un cas limite), alors il est souvent pratique de faire un "ensemble" de la taille de une page physique. Supposons donc que la taille de la page soit de 4 Ko et que le cache L1 soit un cache associatif à 4 voies, alors la «meilleure» taille du cache L1 est de 16 Ko (ce qui correspond à quatre fois 4 Ko). Voyez si vous pouvez travailler par vous-même, cela pourrait être le cas.

Pseudonyme
la source
1

oui la taille de la page doit être égale à la taille du cadre afin de minimiser la fragmentation interne de la mémoire principale.

RAJNISH
la source
3
Notez que certaines architectures prennent en charge plusieurs tailles de page simultanément.
TEMLIB
Peux-tu élaborer? Nous préférons des réponses détaillées qui fournissent une explication, une justification ou une analyse. Si la taille de la page n'était pas égale à la taille du cadre, comment cela entraînerait-il une fragmentation interne accrue de la mémoire principale? Pouvez-vous modifier la réponse pour ajouter une explication à cela?
DW
La réponse ci-dessus avec 1 vote positif est complètement fausse. La pagination utilise des blocs de mémoire de taille constante et minimise ainsi la fragmentation externe au détriment de la mémoire interne, si la mémoire allouée est inférieure à une page. J'ai donc conclu que votre système d'exploitation serait plus heureux si vous choisissez pageSize = frameSize.
Jignesh Kumar
@JigneshKumar, veuillez ne pas utiliser la case «Votre réponse» pour commenter les réponses existantes. Au lieu de cela, concentrez-vous sur des questions où vous pouvez fournir une réponse complète de votre choix ou poser de nouvelles questions utiles. Je vous remercie!
DW
0

Le cadre de la page ne peut pas être plus petit que la page, car le décalage pourrait alors déborder du cadre de la page. Qu'en est-il de l'inverse - le cadre de la page étant plus grand que la page? Contrairement au scénario précédent, cela fonctionnerait, mais ce serait du gaspillage car il y aurait des parties du cadre de page qui n'ont jamais été utilisées (ce sont les parties qui sont au-delà du décalage maximum).

JRG
la source