Quote:
Hm, irgendwie check ich hier jetzt was nicht mehr. Ich dachte immer, der virtuelle Speicher wäre die Auslagerungsdatei (Pagefile)?!
Eieiei, bevor Du hier über das Datums-Format herziehst, solltest Du erstmal systemtechnisch ein paar Hausaufgaben erledigen... 😉
Ich versuch' mich kurz zu fassen:
Bei 32-Bit-Systemen, wie z.B. Windows, laufen alle Applikationen in ihrem eigenen, virtuellen Adressraum. Dieser hat, 32-Bit-bedingt, eine Größe von exakt 4GB.
Bei Win32 teilt sich dieser Adressraum in den User-Bereich am Anfang und den Systembereich am Ende. Meist liegt die Trennung in der Mitte, was dem User-Bereich eben 2GB Raum lässt, bei aktuellen Windows-Versionen kann man an dieser Aufteilung allerdings drehen.
Der Adressraum ist in sich geschlossen und bietet (zunächst) keiner anderen Applikation eine Möglichkeit, hierauf zuzugreifen, sämtliche Adressen gelten nur für den jeweiligen Prozess. Das hat schonmal den immensen Vorteil, dass man auf den klassischen Loader verzichten kann, welcher den logischen Adressen aus der Datei eine physikalische Adresse zuordnet. Unter Windows wird ein Binary einfach in den Adressraum-Eingeblendet, und zwar an der Adresse, welche zur Compile-Zeit festgelegt wurde (ok, bei DLLs ist es etwas komplizierter). Daher haben eigentlich alle Applikationen die gleiche Start-Adresse.
Natürlich braucht man physikalischen Speicher, damit eine Anwendung überhaupt laufen kann. Dieser wird bei Intel-Systemen in 4kB großen Häppchen (Speicher-Seiten) in die jeweiligen, virtuellen Adressräume der Prozesse eingeblendet. Das ist Aufgabe der MMU. Im System-Bereich verweisen die virtuellen Adressen immer auf gleiche physikalische Seiten, im User-Bereich gilt dies nur für Programmcode (weswegen dieser unter Win32 eben nicht mehr modifizierbar ist).
Es sollte schon klar sein, dass der virtuelle Adressraum eines Prozesses sehr viele Lücken aufweist und nur ein winziger Bruchteil überhaupt auf realen, physikalischem Speicher verweist.
So, bis hierher haben wir die Auslagerungs-Datei noch gar nicht benötigt. Diese kommt erst dann in's Spiel, wenn die Prozesse mehr Speicherseiten benötigen, als physikalisch im System vorhanden ist. Dann werden ungenutzte Seiten eben in diese Datei ausgelagert und die freigewordene physikalische Seite kann einem anderen Prozess zugeordnet werden.
Wenn nun ein Prozess wieder auf eine so ausgelagerte Seite zugreift, dann muss das System erstmal wieder irgendwie eine Seite organisieren und die zuvor ausgelagerten Daten reinladen, diese Seite in den virtuellen Adressraum einbleden und dann den Prozess weiterlaufen lassen.
Dass dies recht zeitintensiv ist und insbesondere deutlich langsamer als ein RAM-Zugriff ist, kann sich jeder gut vorstellen. Daher sollte bei Performance-kritischen Systemen möglichst auf die Notwendigkeit einer Auslagerungsdatei verzichtet und das System mit möglichst viel Arbeitsspeicher ausgestattet werden.
Leider machen einem da die modernen Windows-Systeme einen kleinen Strich durch die Rechnung, denn plattenintensive Anwendungen vergrößern den Datei-Cache im RAM, weswegen das System auch dann mit dem Auslagern beginnt, wenn theoretisch noch genügend Platz im RAM wäre, sofern der Cache nicht alles belegt hätte. In diesem Punkt lügt übrigens auch der Task-Manager, aber das ist ein anderes Ding.
So, das war es in aller notwendigen Kürze, ich hoffe, Du weisst nun, welchen Wert ich mit den 2GB anzeige...😉