Ist die Seitengröße immer gleich der Rahmengröße?

9

Ich lerne über Paging. Mein Buch sagt, dass die von der CPU generierten logischen Adressen in der Form |p|d|(Seitenzahl, Seitenversatz) und die physischen Adressen in der Form |f|d|(Rahmennummer, Rahmenversatz) vorliegen . Es wird auch ausdrücklich erwähnt, dass ddh der Offset direkt kopiert wird, um die physikalische Adresse aus den logischen zu erzeugen.

Nun sagt der gesunde Menschenverstand, dass, wenn der Versatz direkt kopiert wird, die Seitengröße gleich der Rahmengröße sein muss (andernfalls würden Versätze nicht entsprechen). Aber leider sagt mein Buch nichts darüber aus.

Ist die Seitengröße also immer gleich der Rahmengröße?

Bitte Bilder aktivieren;)

Treibstoff
quelle

Antworten:

8

Eine Seite ist eine Region des virtuellen Adressraums, und ein Seitenrahmen ist eine Region des physischen Speichers. Eine Seite, die einen Bereich des physischen Speichers abbildet, muss dieselbe Größe wie dieser physische Speicher haben, sonst macht es keinen Sinn.

Sie müssen normalerweise auch korrekt ausgerichtet sein. Wenn Sie beispielsweise versuchen, einen 2-MB-Seitenrahmen dem virtuellen Speicher zuzuordnen, müssen sowohl die virtuelle Adresse als auch die physische Adresse 2 MB ausgerichtet sein.

Viele moderne CPUs unterstützen mehr als eine Seitengröße, und einige können unterschiedliche Seitengrößen im selben Adressraum unterstützen. Der aktuelle Intel x86-64 unterstützt beispielsweise Seitengrößen von 4 KB, 2 MB und 1 GB. Diese Zahlen sind nicht willkürlich; Sie stellen den Adressraum dar, der von verschiedenen "Ebenen" in der mehrstufigen Seitentabelle abgedeckt wird. In ähnlicher Weise unterstützt modernes ARM 4-KB-, 64-KB- und 1-MB-Seiten, obwohl ARM die 1-MB-Seiten nicht als "Seiten" bezeichnet (sie sind "Abschnitte"). ARMv4 und ARMv5 unterstützten die weitere Aufteilung von Seiten in sogenannte "Unterseiten". Diese sind in ARMv7 nicht mehr verfügbar.

Interessanterweise gibt es einige andere Dinge, die oft die gleiche Größe wie die Seitengröße haben. Offensichtlich hat ein TLB-Eintrag die gleiche Größe wie eine Seite oder ein Frame, da er konzeptionell ein Cache für Seitentabelleneinträge ist. Die Größe des L1-Cache wird jedoch häufig auch von der Seitengröße bestimmt.

Angenommen, der L1-Cache ist satzassoziativ (ein direkt zugeordneter Cache ist eigentlich nur ein assoziativer Einweg-Cache, Sie können sich dies als Grenzfall vorstellen), dann ist es oft praktisch, eine "Menge" festzulegen eine physische Seite. Angenommen, die Seitengröße beträgt 4 KB, und der L1-Cache ist ein satzassoziativer 4-Wege-Cache. Die "beste" Größe für den L1-Cache beträgt 16 KB (was vier mal 4 KB entspricht). Sehen Sie, ob Sie selbst herausfinden können, ob dies der Fall ist.

Pseudonym
quelle
1

Ja, die Seitengröße muss der Frame-Größe entsprechen, um die interne Fragmentierung des Hauptspeichers zu minimieren.

RAJNISH
quelle
3
Beachten Sie, dass einige Architekturen mehrere Seitengrößen gleichzeitig unterstützen.
TEMLIB
Können Sie das näher erläutern? Wir bevorzugen detaillierte Antworten, die Erklärungen, Begründungen oder Analysen liefern. Wenn die Seitengröße nicht der Frame-Größe entsprechen würde, wie würde dies zu einer erhöhten internen Fragmentierung des Hauptspeichers führen? Können Sie die Antwort bearbeiten, um eine Erklärung hinzuzufügen?
DW
Die obige Antwort mit 1 Gegenstimme ist absolut falsch. Paging verwendet Speicherblöcke konstanter Größe und minimiert so die externe Fragmentierung auf Kosten des internen Speichers, wenn der zugewiesene Speicher weniger als eine Seite beträgt. Daher bin ich zu dem Schluss gekommen, dass Ihr Betriebssystem zufriedener ist, wenn Sie pageSize = frameSize wählen.
Jignesh Kumar
@JigneshKumar, bitte verwenden Sie nicht das Feld "Ihre Antwort", um vorhandene Antworten zu kommentieren. Konzentrieren Sie sich stattdessen auf Fragen, bei denen Sie selbst eine vollständige Antwort geben oder nützliche neue Fragen stellen können. Vielen Dank!
DW