Sinn der Auslagerungsdatei



  • Hi,

    mich würd mal interessieren, warum Windows so viel in die Auslagerungsdatei legt, obwohl noch mehr als genug RAM vorhanden ist. Vor allem beim Kernel wunderts mich, dass der fast vollständig ausgelagert wird. Hat das irgendeinen Vorteil?

    MfG,

    Michael E.



  • Ich nehme mal an das System knallt dir den Arbeitsspeicher nicht vollkommen zu, weil es ja sein könnte dass ein hungriger Prozess kommt und der dann erst auf das Auslagern warten müsste. Es sollten eigentlich hauptsächlich inaktive (oder kaum aktive) Prozesse ausgelagert sein.



  • Hi

    ausgelagert werden die Daten eines Programmes, die ein Programm seit langem nicht mehr angesprochen hat. Beim Programmcode geht das recht einfach. raus aus dem speicher und bei bedarf von Platte nachladen. Bei Daten geht das leider nicht, da die ja nicht rekonstruierbar sind. Also auslagern in eine besondere Datei. Drum gibts ja das Virtuelle speichermaping. 😃

    Hat z.B. beim starten eines programmes vorteile. es müssen nicht umbedingt alle teile in den speicher copiert werden um das prog zu starten. es reicht der erste happen. Erst wenn das programm ein Teile verzweigt die nicht im speicher sind, werden diese nachgeladen. Das gleiche passiert eigentlich auch mit dem Datenbereich. Nur das die erst bei vermeindlichem nicht gebrauch auf die Festplatte wandern, um sie dann, wenn sie wieder angesprochen werden, in den speicher zu laden.

    Gruss Termite

    ps. es ist nur ein vorteil des Virtuellen speichers. Den anderen kennen die alten Dos User sicherlich. Aber bitte jetzt nicht fragen was Dos ist. (Speicherfragmentierung, Prozesssicherheit, ...)



  • Termite: Werden die Daten eines Programms noch mal physikalisch in die Auslagerungsdatei kopiert oder definiert die Auslagerungsdatei seine Grenzen neu? Wenn ersteres der Fall ist, verstehe ich nicht, warum man nicht gleich in den RAM lädt, wenns sowieso kopiert werden muss.



  • Michael E. schrieb:

    mich würd mal interessieren, warum Windows so viel in die Auslagerungsdatei legt, obwohl noch mehr als genug RAM vorhanden ist. Vor allem beim Kernel wunderts mich, dass der fast vollständig ausgelagert wird. Hat das irgendeinen Vorteil?

    Das liegt u.a. daran, dass viele Programme VirtualAlloc() bzw. MapViewOfFile() aufrufen, um Speicherseiten im virtuellen Speicher zu allokieren. Windows hat den Fehler, dass es solche Bloecke nicht im RAM allokiert sondern in der virtuellen Speichertabelle.



  • Power Off schrieb:

    Michael E. schrieb:

    mich würd mal interessieren, warum Windows so viel in die Auslagerungsdatei legt, obwohl noch mehr als genug RAM vorhanden ist. Vor allem beim Kernel wunderts mich, dass der fast vollständig ausgelagert wird. Hat das irgendeinen Vorteil?

    Das liegt u.a. daran, dass viele Programme VirtualAlloc() bzw. MapViewOfFile() aufrufen, um Speicherseiten im virtuellen Speicher zu allokieren. Windows hat den Fehler, dass es solche Bloecke nicht im RAM allokiert sondern in der virtuellen Speichertabelle.

    Wieso siehst du das als Fehler an? Es wäre doch unlogisch, einen neu allokierten Speicherblock mit einer Größe von beispielsweise 100MB sofort in den Arbeitsspeicher zu packen, zumal er dort real Speicher in Anspruch nimmt im Gegensatz zum Bereithalten im virtuellen Speicher. Dass dieser Wert dann um 100MB steigt heißt ja natürlich nicht, dass 100MB auf die Festplatte geschrieben werden und bedeutet somit auch keinen Performancenachteil. Und wenn man nun von den allokierten 100MB 10MB beschreibt, werden die auch direkt im physischen Speicher bereitgehalten.



  • wenn ich für einen algorithmus soundsoviel speicher brauche, und der schnel laufen soll, dann hab ich keine lust nachdem 1/10 des speichers verbruacht ist endlos zu warten, bis das betriebssystem so freundlich ist, mir die restlichen 9/10 des speichers endlich zur verfügung zu stellen.
    das auslagern und einlagern kostet zeit, bei vielen sachen ist sowas dann ein empfindlich flaschenhals. drum ist es sehr wohl ratsam direkt angeforderten ram zunächst zur verfügung zu stellen.



  • Korbinian schrieb:

    wenn ich für einen algorithmus soundsoviel speicher brauche, und der schnel laufen soll, dann hab ich keine lust nachdem 1/10 des speichers verbruacht ist endlos zu warten, bis das betriebssystem so freundlich ist, mir die restlichen 9/10 des speichers endlich zur verfügung zu stellen.
    das auslagern und einlagern kostet zeit, bei vielen sachen ist sowas dann ein empfindlich flaschenhals. drum ist es sehr wohl ratsam direkt angeforderten ram zunächst zur verfügung zu stellen.

    Dafür hast du ja Möglichkeiten, in diesen Prozess einzugreifen indem du entweder mit ZeroMemory den Speicherbereich explizit nullst und er somit in den physischen Speicher gemappt wird oder du sperrst den Speicherblock gleich in den physischen Speicher.
    Ich halte es auf jeden Fall für sinnvoller, wenn das System lieber vorsichtig in den Arbeitsspeicher mappt als gleich in die Vollen zu gehen. Benötigt man für seinen Algorithmus beispielsweise voraussichtlich 200MB, die aber nicht zwingend benutzt werden ist diese Vorgehensweise schon sinnvoll und arbeitsspeicherschonend. Auf jeden Fall besser als das System dann jeweils mit 10MB-Allokierungen zu nerven.


Anmelden zum Antworten