Swapping
# Swapping

In der Informatik beschreibt Swapping [swɐpɪŋ] (englisch 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.
Swapping ist meist in Form einer Auslagerungsdatei oder einer Swap-Partition praktisch umgesetzt.

## 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 Seitentabelle.
* 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.

## Anwendungspraxis
### Auslagerungsdatei

Das Betriebssystem jedes Computers verwaltet einen Speicherbereich, in dem die Daten, die der Rechner gerade benötigt, abgelegt werden. Diesen Bereich nennt man RAM (Random Access Memory). In bestimmten Situationen kann es je nach Größe des Arbeitsspeichers vorkommen, dass nicht alle diese Daten im RAM Platz finden, etwa weil besonders speicherintensive Programme verwendet werden. In diesem Fall wird der adressierbare Systemspeicher erweitert und dieser zusätzliche Adressraum in eine Auslagerungsdatei umgeleitet.
Einige Programme oder Betriebssysteme wie etwa Windows greifen aber auch dann auf die Auslagerungsdatei zu, wenn noch ausreichend RAM vorhanden ist. So wird unter bestimmten Versionen von Windows beispielsweise der einem Programm zugewiesene Arbeitsspeicher in die Auslagerungsdatei umgeleitet, wenn es vom Benutzer minimiert wird. Dadurch wird mehr Arbeitsspeicher für die momentan aktiven Programme verfügbar.
Der Zugriff auf den zusätzlichen Speicher der Auslagerungsdatei ist aus technischen Gründen wesentlich langsamer als der direkte Zugriff auf den RAM. Daher kommt es je nach Geschwindigkeit des verwendeten Massenspeichermediums zu Geschwindigkeitseinbußen, wenn größere Datenmengen aus der Auslagerungsdatei gelesen beziehungsweise in die Auslagerungsdatei geschrieben werden. Je höher die Übertragungsrate und vor allem je niedriger die Zugriffszeit des Massenspeichermediums ist, desto geringer sind die zu erwartenden Geschwindigkeitseinbußen.
Je nachdem, ob die Speicherverwaltung reine Segmentierung, reines Paging im Rahmen einer virtuellen Speicherverwaltung oder eine Kombination aus beidem anwendet, enthält die Auslagerungsdatei Segmente, Speicherseiten oder beides. Der Arbeitsspeicher, die Auslagerungsdatei und eventuell gemappte Sekundärspeicherseiten (Paging) bilden zusammen den belegten Teil des virtuellen Speichers.

#### Windows

Der Begriff Auslagerungsdatei ist hauptsächlich durch das Betriebssystem Windows geprägt. Dieses verwaltet die Auslagerungsdatei selbstständig und passt sie dynamisch den Anforderungen an. Wird für die Ausführung eines Prozesses mehr Speicherplatz benötigt, wird die Auslagerungsdatei größer; wird später wieder weniger Speicherplatz gebraucht, wird sie verkleinert. Die minimale und maximale Größe der Auslagerungsdatei kann weitestgehend frei gewählt werden. Auf Computern mit mehreren internen Festplatten ist es möglich, die Auslagerungsdatei auf eine beliebige Festplatte (vorzugsweise schnelle SSDs) zu verschieben oder auch auf mehrere Festplatten zu verteilen. Eine Unterscheidung zwischen dem physischen Arbeitsspeicher und der Auslagerungsdatei findet aus Sicht der Anwendungen nicht statt. Die Anwendungen verwenden den virtuellen Speicher vollkommen transparent. Unter Betriebssystemen der Windows-NT-Familie heißt die Auslagerungsdatei standardmäßig pagefile.sys. Es ist auch möglich, die Auslagerungsdatei zu deaktivieren, was jedoch nur sinnvoll ist, wenn der physische Speicher nie vollständig aufgebraucht wird und seine Nutzung auch nicht durch Lizenzmodelle eingeschränkt wird (z. B. MS SQL Server Express).
ReadyBoost ist eine von Microsoft unter Windows Vista eingeführte Technologie, die es erlaubt, auf einem schnellen Flash-Speicher (z. B. einem USB-Stick) Dateien (damit unter anderem die Auslagerungsdatei) zwischenzuspeichern und dadurch den Zugriff zu beschleunigen.

### Swap-Partition
#### Linux

Andere Betriebssysteme, wie z. B. Linux, verwenden ähnliche Speicherverwaltungsmechanismen, jedoch anstelle der Auslagerungsdatei meist eine dafür zugewiesene (oder dedizierte) Partition, der Auslagerungsbereich (englisch swap partition oder swap space). Dieser Bereich kann auch auf einem eigenen Massenspeicher liegen. Die Verwendung einer Partition statt einer Auslagerungsdatei hat den Vorteil, dass die dadurch zu erwartende Fragmentierung in dem Dateisystem, auf dem die Auslagerungsdatei angelegt würde, vermieden werden kann sowie umgekehrt dass eine bei Anlegen des Bereichs bereits bestehende Fragmentierung der übrigen Daten sich nicht auf die Auslagerung auswirkt. Nachteilig kann die feste Größe der Partition und somit auch des verfügbaren Speichers sein. Unter Linux ist es möglich, während des Betriebs weitere Auslagerungspartitionen hinzuzufügen beziehungsweise vorhandene zu entfernen. Außerdem können auch reguläre Dateien zum Auslagern genutzt werden, aber auch hier ist die Dateigröße fest. Der Auslagerungsspeicher kann auch als Zwischenspeicher während des Ruhezustandes verwendet werden.