Frage von sotnu, 42

Was passiert, wenn man den Auslagerungsspeicher ausschaltet und der Arbeitsspeicher voll ausgelastet wird?

Hallo erstmal,

ich hätte einige Fragen zum Auslagerungsspeicher unter Win 7 (Habe Win7 Pro 64 Bit).

  • 1: Also der Auslagerungsspeicher ist ja im Grunde da, um den Arbeitsspeicher zu "entlasten" falls er mal sehr stark ausgelastet wird, sonst sollte der ja nicht "benutzt" werden, richtig ? Ich habe nämlich das Gefühl, dass der schon weit vor der 8 GB Grenze benutzt wird (Ich habe 8GB).

  • 2: Ich lösche den eigentlich immer, da ich 8GB habe und mir das reicht. Aber angenommen, es würde doch mal stark ausgelastet sein (z.B wegen Videobearbeitung oder verwendung von Virtuellen Maschinen), würde dann der PC abstürtzen oder einfach langsam werden ?

  • 3: Im Grossen und Ganzen brauche ich niemals 8 GB, wenn ich aber vlt doch mal ein Video bearbeiten will (nur mal angenommen) , wird ganz klar 8 GB ausgelastet (weiss ich). Wäre es in diesem Fall besser den Auslagerungsspeicher zu verwenden ? Schliesslich muss die Festplatte in diesem Moment ja anderes tun ( das Video auf die Platte schreiben) , andererseits ist er ja dafür da.

  • 4: Dann noch eine Frage zur "Einsatzart" des Auslagerungsspeicher: Wann wird der denn eingesetzt ? Wird der bei meinen 8GB bei einer bestimmten Auslastung (also z.B ab 7GB) eingesetzt und kann ich das selber einstellen ? Also wann er mit mischen soll ? Ich habe nämlich das Gefühl, dass der schon weit vor der 8 GB Grenze benutzt wird (wie oben schon steht).

Danke schonmal für die Antworten.

Antwort
von DrErika, 32

Das System verwaltet den Speicher in logischen Einheiten, die im Betriebssystemkern verwaltet werden. Wird ein Programm geladen, werden Blöcke des benötigten Speichers zugewiesen und in das RAM geladen. Sind dort noch Blöcke, die derzeit nicht im Zugriff sind, werden diese unter Umständen in den Auslagerungsspeicher ausgelagert, um Platz zu schaffen. Das passiert tatsächlich auch dann schon, wenn das eigentlich physikalische RAM noch nicht vollgelaufen ist.

Die Steuerung dieses Mechanismus lässt sich nicht beeinflussen. Lediglich die Größe des Auslagerungsspeichers lässt die eine oder andere Auslagerung weniger oder mehr stattfinden. Typischerweise macht das Betriebssystem das aber schon so gut, dass man keine Bedenken haben muss, sich zu verlangsamen, nur weil die Auslagerungsdatei verwendet wird. Es muss nämlich nicht immer alles im RAM verfügbar sein. Die meisten Daten werden die meiste Zeit über gar nicht benötigt.

Läuft der maximal verfügbare Speicher voll, ist also kein freier Block mehr da (sowohl RAM als auch Auslagerungsspeicher), dann gibt es Fehlermeldungen und das System wird lahmgelegt. Im einfachsten Fall lädt das Programm nicht fertig. Im schlimmsten Fall hängt sich das ganze System auf und rödelt auf der Auslagerungsdatei herum.


Kommentar von sotnu ,

Danke erstmal für die Antwort.

Wie können denn da Blöcke sein, die nicht "im Zugriff sind", aber trotzdem garnicht genutzt werden ? Also mit "nicht im Zugriff" meinst du, sie sind gerade nicht verwendbar. So wie ich das jetzt verstanden habe, kann das aber auch sein, wenn sie garnicht "benutzt" werden, oder ?

Als ich das letzte mal ein Video bearbeitet habe, wurde mein Arbeitspeicher so ziemlich vollständig ausgelastet und das ganze System hat gestockt. Da hatte ich den Auslagerungsspeicher aber noch eingeschaltet. In dem Fall sollte ich das nicht machen, wenn ich ihn ausgeschaltet habe, richitg :) ?

Und noch eine letzte Rückfrage: Angenommen ich hätte nur 4 GB RAM und dazu noch 4 GB Auslagerungsspeicher, würde dann eben so ein Video bearbeiten, kann es doch nicht sein, dass das System gleich abschmiert (Wenn ich das slebe mache, wie das, was ich oben genannt habe, würde ja mehr als 8GB gebraucht werden). Ich meine, da muss doch das System irgendwie vorher automatisch etwas unterbinden, oder nicht ? Also das System sollte doch immer genug Ressourcen für sich "behalten" oder nicht ?

Ich nehme an, das könnte nur wirklich in der Theorie passieren, oder ?

Kommentar von DrErika ,

Also das geht (für ausführbare Progamme und zugehörige Blöcke) so - vereinfacht natürlich:

Der "Instruction Pointer" läuft durch den Programmcode durch: Wie ein Zeiger zeigt der auf den Teil, der gerade vom Betriebssystem ausgeführt wird. Dieser Zeiger wird durch den Kern des Betriebssystems geführt. Da wir ein preemptives Scheduling haben, wird die Ausführung des einen Programms gestoppt, der Zeiger gehoben und auf ein anderes Segment gestellt, damit dort weiter ausgeführt wird. Der Kern merkt sich, wo er den Zeiger hatte, wo er wieder hin gestellt werden muss, um die Prozesse weiterzuführen. In dieser Tabelle stehen also die Blöcke und die Stellen, wo der IP aufgesetzt werden muss. Gleichzeitig führt der Kern eine Zeittabelle, wie lang es schon her ist, dass der IP an welcher Stelle war. Der Kern entscheidet dann nach einem speziellen Mechanismus ob und wann der IP wo wieder aufgesetzt wird. Unter anderem hängt dies auch von der Priorität der Prozesse ab. Ist jetzt Speicher knapp, dann schaut der Kern nach, wo der IP schon lange (oder am längsten) nicht mehr war und lagert den dazugehörigen Speicherblock auf die Auslagerungsdatei aus. Den frei gewordenen Block füllt er dann mit dem neuen Prozess.

Gibt es keine Auslagerungsdatei oder ist auch die voll, gibt es ein Dilemma: Den Block kann man nicht einfach freigeben, weil dort ja auch durch die Laufzeit festgelegte Zustände mit verbunden sind. Dem Kern bleibt nichts anderes übrig, als solche Blöcke zu entfernen, die keine solche Zustände haben (also nicht geänderte Daten - z.B. aus einer Videodatei). Wenn das auch nicht klappt, gibt es ein echtes Problem, denn es handelt sich um eine Sackgasse. Wie heutige Betriebssysteme das Problem erledigen, weiß ich nicht wirklich. Früher hing sich das Windows einfach auf. Einfach zu sagen: Dann darf das Windows eben kein neues Programm starten, hilft hier nicht. Denn es weiß ja nicht, wieviele Ressourcen/RAM das zu startende Programm haben will. Man denke an ein kleines Progrämmchen, welches unendliche Zahlenreihen produziert und diese mittels Speicheranforderungen erst zur Laufzeit holen will. Das kann also niemand vorher wissen. Für das System sollte allerdings eigentlich immer genug übrig bleiben. Aber unter XP habe ich so ein Progrämmchen schon geschrieben und es hängt sich einfach quasi auf und meldet, es sei nicht genug Speicher zum weiterarbeiten da.

Kommentar von sotnu ,

Sorry für die später Antowrt. Ich habe gerade sehr viel zu tun.

Aber falls es dich interessiert. Bei mir kam jetzt die Meldung, als ich meine VM (die 4GB RAM reservieren darf) starten wollte, dass ich Programme schliessen solle um Datenverlust zu verhindern, da ich zu wenig Arbeitsspeicher hätte. Und es wurde sogar ein Programm vorgeschlagen, welches (wahrsch.) am meisten verbraucht.(abgesehen von dem, was ich gerade starten wollte).

Ich habe übrigens Win7 Pro 64 bit, das gehört ja noch zu den "neueren" und nicht zu denen "früher".

Kommentar von DrErika ,

Nun, der Punkt hier ist, dass es sich bei der VM um eine der wenigen Programme handelt, die sehr wohl schon im voraus wissen, wieviel Speicher sie reservieren wollen. Das gilt für die allermeisten anderen Programme aber nicht! Und für solche kann dein Betriebssystem das allerneueste sein, beim Start wird es dir keine Fehlermeldung geben.

Kommentar von sotnu ,

Stimmt natürlich, das habe ich vergessen mit einzubeziehen. Dann muss ich wohl selbst entscheiden, wann ich was öffne ohne Auslagerungsspeicher. Sofern ich nicht wieder 4GB Auslagerungsspeicher  (oder so) einrichte.

Danke nochmals für die Hilfe.

Keine passende Antwort gefunden?

Fragen Sie die Community