Wie werden die Adresszuordnungen im Speicher gespeichert, wenn der virtuelle Adressraum größer als der physische Adressraum sein kann?

14

Angenommen, wir arbeiten mit einem System mit 40 Bit für physikalische Adressen. Der gesamte physikalische Adressraum (unter der Annahme eines byteadressierbaren Speichers) beträgt Bytes oder 1 TiB. Und wenn virtuelle Adressen 48 Bit lang sind, bedeutet dies, dass mehr Adressen für den virtuellen Speicher verfügbar sind als Speicherorte im physischen Speicher.240

Dies ist für mich sinnvoll, da sich die "überzähligen" Adressen auch auf Festplattenspeicherorte beziehen können. Ich verstehe jedoch nicht, wie die Übersetzung zwischen virtuellen und physischen Adressen erfolgt. Ich gehe davon aus, dass irgendwo eine Zuordnung gespeichert ist, die VAS-Standorte mit den physischen Standorten verknüpft. Wie können alle diese Zuordnungen möglicherweise im Speicher gespeichert werden, wenn es mehr virtuelle Adressorte als physische Standorte gibt? Zum Speichern jeder virtuellen Adresse benötigen Sie mindestens 48 Bit und zum Speichern des physischen Standorts, dem sie zugeordnet ist, weitere 40 Bit. Sie können also natürlich nicht einfach eine 1: 1-Zuordnung jeder virtuellen Adresse zu ihrem physischen Gegenstück speichern, da die Zuordnung jedes Standorts mehr Speicher als den physischen Speicher selbst beanspruchen würde.

Was genau fehle ich hier?

Brad Power
quelle
Dies ist auch mit wenig Speicher und Adressraum nicht möglich. Wenn Sie physische 16-Bit-Adressen und virtuelle 16-Bit-Adressen hätten, könnten Sie immer noch nicht alle 1: 1-Zuordnungen speichern!
user253751
2
Das Problem ist komplexer, als Sie denken. Computer verfügen selten über TB an Arbeitsspeicher, sodass der physische Arbeitsspeicher WEGWEISE geringer ist als der virtuelle Adressraum. Noch schlimmer: Jeder Prozess hat seinen eigenen virtuellen Adressraum!
Mooing Duck
Zusätzlich zu den Festplattenpositionen haben Sie nur noch Bits / Speicherplatz, die Sie verschwenden müssen. Beispielsweise kann ein großer Bereich unterhalb des Stapels nicht zugeordnet sein, um unerkannte Überläufe zu verhindern. Sie können zufällig bestimmen, was Sie laden, um eine andere Klasse von Angriffen zu verhindern . Möchten Sie durch ein einzelnes Bit kennzeichnen, ob die Adresse dem Kernel oder dem Benutzer gehört - fahren Sie fort, obwohl Sie die Hälfte des Speicherplatzes verschwenden. Während sich die meisten Lehrbücher auf das Auslagern von Aspekten des virtuellen Speichers konzentrieren, steckt viel mehr dahinter.
Maciej Piechotka
(Beachten Sie auch, dass Adressen Alias ​​sein können, was manchmal nützlich ist, so dass VA A und Adresse B auf dasselbe PA P verweisen, obwohl A! = B.)
Maciej Piechotka

Antworten:

26

Der Trick, um diese Arbeit zu machen, ist "Paging". Wenn Sie Daten von einer Festplatte in den physischen Speicher übertragen, werden nicht nur einige Bytes übertragen. Sie bringen eine ganze Seite. 4 KB ist eine sehr häufige Seitengröße.

Wenn Sie nur die Seiten und nicht jedes einzelne Byte im Auge behalten müssen, wird die Zuordnung erheblich günstiger. Wenn Sie einen 48-Bit-Adressraum und 4096-Byte-Seiten haben, müssen Sie nur verfolgen, welche der 2 ^ 36 Seiten (ungefähr 69 Milliarden Seiten). Das ist viel einfacher! Die Aufzeichnung, wo sich alle Seiten befinden, wird als "Seitentabelle" bezeichnet.

Wenn Sie tatsächlich 1-256 TiB Speicher benötigen, ist es keine große Sache, ein paar Gigabyte aufzugeben, um diese Seitentabelle zu speichern. In der Praxis werden wir jedoch beispielsweise mehrstufige Seitentabellen verwenden , wodurch wir etwas effizienter arbeiten und die Seiten nur für Bereiche des Adressraums behalten, den wir tatsächlich verwenden.

Cort Ammon - Setzen Sie Monica wieder ein
quelle
6
Eine Auslagerungsdatei ist ein Windows-Begriff für eine physische Datei auf der Festplatte, die den Inhalt physischer Seitenrahmen enthält, die aus Speichermangel wiederhergestellt wurden und deren Inhalt beibehalten werden muss. Wenn ich mich nicht irre, sollte die Datenstruktur, mit der virtuelle Seitenadressen physischen Seitenadressen zugeordnet werden, als Seitentabelle bezeichnet werden .
Setzen Sie Monica wieder ein - ζ--
@hexafraction Ich denke du hast recht. Ich habe die Änderung vorgenommen.
Cort Ammon - Reinstate Monica
2
Wenn der tatsächliche Speicher groß ist, können Sie auch den für Seitentabellen erforderlichen Speicher reduzieren, indem Sie größere Seiten zulassen. x86 bietet die Option, 4 KiB-Seiten mit 2/4 MiB-Seiten zu mischen.
Nate Eldredge