Generelles Verständnis Problem zum Paging

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Generelles Verständnis Problem zum Paging
Hallo Gra Gemeinschaft,

Ich habe eine grundlegendes Verständnisproblem, wie man durch Paging mehr virtuellen Speicher simulieren kann (rein rechnerisch).

Beispiel: man benötige 16 GigaByte → 34 Bit virtuelle Adresse , der physikalische Speicher bietet nur 1 GigaByte → 30 Bit physikalische Adreese
Die Pages seien 4KiloByte groß → 12 Bit Offset. eindimensionales Paging.
die ID für die Pages tables ist also 34 Bit - offset = 22 Bit → Die Page Table kann max. 2^22 Einträge haben.
In den jeweiligen Einträgen steht die physikalische Adresse zu den Pages. Diese Adresse wäre doch in diesem Fall 18 Bit lang.
Folglich können doch nur 2 ^18 verschiedene physikalische Pages angesprochen werden. Ein Valid beschreibt, ob die Seite im RAM ist oder auf der Platte.
→ macht 2^(18+1) verschiedene Pages. → 2(18+1+offset) = 2^31 Bytes ansprechbar. Laut meiner Logik könnte man also immer doppelt so viel Speicher ansprechen auf Grund des Valid Bits und nicht mehr ? Bitte findet den Fehler im meiner Logik danke :slight_smile:


Das Valid Bit ist Teil der Datenstruktur zur Übersetzung von virtuellen nach physikalischen Seiten (Kacheln). Damit ist es egal ob du physikalisch 1 GB oder 16 GB verfügbar hast. Hast du also bei der Speichervergabe keine Kacheln mehr frei wird eine Kachel auf Platte ausgelagert und die Seite als not Valid markiert. Es kann auch sein, dass dadurch mehrere Seiten als not valid markiert werden müssen, z.B. wenn man eine DLL auf die Platte verbannt. Welche Kachel ausgelagert wird hängt vom Allokator ab.


Du kannst mit Paging jedem Prozess maximal so viel virtuellen Speicher vorgaukeln wie die Adressbreite des Prozessors vorgibt - d. h. mit einem 32-Bit-Prozessor kann der virtuelle Adressraum jedes Prozesses nicht größer als 4 GiB sein. Innerhalb dieses Adressraums liegen dann manche Seiten in RAM und manche sind auf Platte ausgelagert.

Zwei Beispiele, wann dir Paging hilft (nehmen wir an, dass im System 1 GiB physikalischer RAM verbaut ist):

  1. Ein einzelner Prozess benötigt 1,5 GiB.
  2. Es laufen mehrere Prozesse gleichzeitig. Keiner dieser Prozesse braucht mehr als 1 GiB Speicher, aber in der Summe benötigen die Prozesse 2 GiB.

In beiden Fällen wird das System alle Seiten ausgelagert halten, die nicht mehr in den physikalischen RAM passen (in den konkreten Beispielen also 512 bzw. 1024 MiB). Welche Seiten ausgelagert werden, entscheidet das Betriebssystem.