Ich muss die Kommentare zur Frage kommentieren, insbesondere die Verwechslung zwischen "Seitentabelle" und "Auslagerungsdatei". Dies ist keine Antwort, passt aber nicht in den für Kommentare zulässigen Bereich.
"Seitentabelle" ist in der Tat eine ganz andere Sache als die Auslagerungsdatei. Wenn n MB RAM für Seitentabellen verwendet werden, bedeutet dies nicht, dass Sie n MB Auslagerungsspeicherplatz verwenden. Und obwohl einige Seitentabelleneinträge (PTEs, aus denen Seitentabellen bestehen) auf den Inhalt von Auslagerungsdateien verweisen, tun dies nicht alle.
Die Seitentabellen sind speicherinterne Strukturen, die von der MMU der CPU verwendet werden, um die Adressumsetzung von virtuellen Adressen (wiederum nicht der Auslagerungsdatei) in physische Adressen durchzuführen, und vom Betriebssystem, um den virtuellen Adressraum zu verfolgen und Seitenfehler zu beheben. Seitentabellen bestehen aus Seitentabelleneinträgen (PTEs). Jeder PTE belegt 8 Bytes und definiert 4 KByte virtuellen Adressraum - dh eine virtuelle Seite. Es gibt ungefähr einen PTE für jede nicht freie Seite des virtuellen Adressraums.
Übrigens, obwohl die Auslagerungsdatei sowohl eine externe als auch eine interne Fragmentierung aufweisen kann (die erstere ist normalerweise kein großes Problem; die letztere kann verbessert werden, indem sie etwa viermal so groß gemacht wird, wie sie sein muss), können Seitentabellen dies jedoch nicht. Sie sind schon immer fragmentiert, und das spielt keine Rolle.
Jeder PTE hat ein "gültiges" Bit. Für "gültige", auch "residente" Seiten genannt, enthält der PTE die physische Seitenzahl, die der virtuellen Seitenzahl entspricht, die dem PTE zugeordnet ist. Dies wird direkt von der MMU verwendet.
Für "ungültige" Seiten löst die MMU einen Seitenfehler aus und die PTE hat dann viele mögliche Formate und Interpretationen.
Hinweis: Alle oben genannten Punkte gelten für alle Betriebssysteme, die Paging unter x86 / x64 ermöglichen. Das Folgende ist weitgehend spezifisch für Windows, aber viele der Konzepte gelten für andere Betriebssysteme, mit Unterschieden in den Details der Implementierung.
Für eine Seite im Seitencache enthält der PTE weiterhin die physische Seitenzahl. Für Seiten, die aus dem RAM verloren gegangen sind und in die Auslagerungsdatei geschrieben wurden, enthält der PTE die Auslagerungsnummer und den Versatz in der Auslagerungsdatei, in die der Seiteninhalt geschrieben wurde. Andere mögliche PTE Inhalte sind Verweise auf virtuelle Adresse Deskriptoren , Verweise auf „Prototyp PTEs“, Verweise auf Null verlangen Seiten usw., die ich nicht in Gang zu bringen. Es genügt zu sagen, dass sich nur einige der PTEs auf Speicherorte in Auslagerungsdateien beziehen.
Ich erwähne dies alles hauptsächlich, um zu zeigen, dass die Auslagerungsdatei und die Seitentabellen, obwohl sie miteinander verbunden sind, definitiv nicht dasselbe sind.
Seitentabellen sind in einer Baumstruktur organisiert. Für jeden Prozess gibt es einen anderen solchen Baum oder eine andere Sammlung von Seitentabellen. Auf diese Weise kann jeder Prozess seine eigene Instanz des virtuellen Adressraums definieren. Die Seitentabelle im Stammverzeichnis des Baums muss sich immer im RAM befinden. Die anderen sind pageable; Sie sind sogar nicht vorhanden, wenn sie großen (mindestens 2 MB) Regionen undefinierten oder freien virtuellen Adressraums entsprechen würden.
Die Seitentabelleneinträge in den Tabellen an den "Blättern" des Baums entsprechen Seiten des virtuellen Adressraums. Die PTEs in den übergeordneten Tabellen - diejenigen, die näher an der Wurzel (und der Wurzel selbst) liegen - geben an, wo sich die nächstniedrigeren Tabellen befinden (falls überhaupt vorhanden).
Die von RAMmap angezeigte Nummer ist der physische Speicher (RAM), der von allen residenten (In-RAM) Seitentabellen für alle Prozesse plus das Betriebssystem belegt wird.
Wichtig ist hierbei, dass auf dem System im OQ 2,5 GB RAM mit Seitentabellen verknüpft waren. Das bedeutet, dass mindestens 2,5 GB Seitentabellen definiert sind. Da Seitentabellen selbst pageable sind, kann die virtuelle Größe viel größer sein als die physische Größe, die RAMmap nur anzeigen kann. Aber nehmen wir an, es sind "nur" 2,5 GB. Bei acht Bytes pro PTE sind das ungefähr 320 Millionen PTEs. Da jeder PTE eine Seite - 4 KByte - des virtuellen Adressraums definiert, bedeutet dies, dass über 1,2 Terabyte des virtuellen Adressraums durch speicherinterne Seitentabellen definiert werden.
Das ist nicht unmöglich, aber es ist ziemlich viel.
Als Referenz habe ich auf meinem System atm ungefähr 125 MB RAM in Seitentabellen. Dies würde nur etwa 65 GB virtuellen Adressraum anzeigen. Meine tatsächliche virtuelle Nutzung ist viel höher (125 TB nur für Prozesse), aber das liegt daran, dass sich die meisten Seitentabellen nicht im RAM befinden. "Große Seiten", eine andere Sache, auf die ich hier nicht eingehen sollte, kann auch dazu beitragen, unterschiedliche Verhältnisse zwischen der Größe von Seitentabellen und der Größe des verwendeten virtuellen Adressraums zu berücksichtigen.
Also: Um den Schuldigen zu finden, würde ich zuerst im Leistungsmonitor unter der Kategorie Prozess nach Prozessen mit einem hohen Zählerwert für "virtuelle Bytes" suchen.