Swapping
In der Informatik beschreibt Swapping [swɐpɪŋ] (engl. für Umlagerung; von englisch to swap, ‚austauschen‘) innerhalb der Speicherhierarchie das Auslagern von Daten einer höheren in eine tiefere Ebene oder das entgegengesetzte Laden. Durch Swapping sollen die Vorteile höherer Ebenen, also höhere Geschwindigkeit, und tieferer Ebenen, nämlich höhere Kapazität und kostengünstigerer Speicher, quasi gleichzeitig nutzbar gemacht werden. Üblicherweise bezieht der Begriff sich auf die Datenverschiebung zwischen Arbeitsspeicher und Festplatte.
Arbeitsweise
Ist kein freier Arbeitsspeicher mehr verfügbar um eine Anfrage zu bedienen, so werden gerade nicht benötigte Daten ausgelagert, um Platz im Arbeitsspeicher zu schaffen. Werden sie wieder benötigt, müssen sie wieder geladen werden (und etwas anderes muss dafür weichen). Die für diese Zwecke eingesetzte, im Hintergrund arbeitende Software-Routine wird auch als Swapper bezeichnet. Swapping wurde zunächst kombiniert mit der Segmentierung, einer speziellen Art der Speicherverwaltung in Betriebssystemen. Swapping gab es schon vor dem Paging, das von den meisten modernen Betriebssystemen als Basis für Virtuelle Speicherverwaltung verwendet wird. Swapping und Paging werden heute meist miteinander kombiniert.
Häufig findet Swapping statt, wenn der Scheduler einen anderen Prozess aktiviert, da der andere Prozess nun seine Daten benötigt, während auf die des vorherigen nun länger nicht mehr zugegriffen wird.
Beim Swapping müssen zwei Probleme gelöst werden:
- Die Speicheradressen der lokalen Variablen können sich zwischen Auslagerung und erneutem Einlesen verändern, wenn sich die Größe des Speichersegmentes ändert. Bei Speicherverwaltung mittels Segmentierung wird das durch Relokation der Variablen umgangen, indem die Speicheradressen der Variablen bei jedem Einlesen neu berechnet werden. Bei Paging geschieht dies über die Abbildung virtueller Adressen auf reale Adressen mittels der Page-Table.
- Der Speicherschutz des verwaltenden Betriebssystems, der verhindert, dass Programme den ihnen zugewiesenen Speicherbereich zum Lesen oder Schreiben verlassen können.
Beide Probleme lassen sich auch durch Kombination von Swapping mit virtueller Speicherverwaltung lösen.
Bei Betriebssystemen, die nur Segmentierung unterstützen, bilden alle ausgelagerten Speichersegmente in ihrer Gesamtheit die Auslagerungsdatei, während bei Betriebssystemen, die Paging unterstützen, alle ausgelagerten Speicherseiten die Auslagerungsdatei bilden.
Swapping versus Paging
Virtueller Speicher und Festplatten-Caching können prinzipiell über denselben Mechanismus abgearbeitet werden, was moderne Betriebssysteme typischerweise unterstützen. Eine geöffnete Datei kann als Teil des Adressraums eingeblendet werden – tatsächlich eingelesen („swap-in“) werden nur jene Bereiche, auf die die Anwendung tatsächlich zugreift. Umgekehrt wird „Speichern“ einfach zu einem „swap out“-Vorgang.
Mitunter wird sprachlich abgegrenzt, dass "swap in" und "swap out" sich nur auf den Transfer zwischen dem Arbeitsspeicher und dediziertem Swap-Speicherplatz beziehen würde, nicht jedoch auf den Transfer anderer Dateieninhalte, wohingegen "page in" einen beliebigen Transfer von einer Datei in den Arbeitsspeicher, "page out" einen (beliebigen) Transfer vom Arbeitsspeicher in das Dateisystem bezeichne.
Beispiele
- Ein Programm mit Speicherleck verbraucht mehr Speicher, als dem System physisch zur Verfügung steht. Das System hat eine Swap-Datei und einige Speicherseiten des Programms werden dorthin ausgelagert. Man spricht hier von Swapping, da die Swap-Datei die einzige involvierte Datei ist.
- Ein Programm öffnet eine Datei, ohne die Option für direkte Ein- und Ausgabe zu verwenden. Die Datei wird in den Dateisystem-Cache geladen. Hier spricht man von page in, da der Swap-Speicherplatz nicht berührt ist.