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. Das wird erkauft durch den Zeitbedarf des Swappens. Üblicherweise bezieht der Begriff sich auf die Datenverschiebung zwischen Arbeitsspeicher und Festplatte.
Gerade nicht benötigte Daten werden 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). Dieser Vorgang ist Teil der Segmentierung, einer speziellen Art der Speicherverwaltung in Betriebssystemen. Die für diese Zwecke eingesetzte, im Hintergrund arbeitende Software-Routine wird auch als Swapper bezeichnet.[1]
Swapping ist ein Vorläufer des Paging, das von den meisten modernen Betriebssystemen als Basis für Virtuelle Speicherverwaltung verwendet wird.
Meist findet Swapping statt, wenn der Scheduler einen anderen Prozess aktiviert. Das Datensegment des neu aktivierten Prozesses wird in den Arbeitsspeicher geladen, während das Datensegment des abgelösten Prozesses auf den Hintergrundspeicher geschrieben 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. Das wird durch Relokation der Variablen umgangen, indem die Speicheradressen der Variablen bei jedem Einlesen neu berechnet werden.
- Der Speicherschutz des verwaltenden Betriebssystems, der verhindert, dass Programme den ihnen zugewiesenen Speicherbereich zum Lesen oder Schreiben verlassen können.
Beide Probleme „verschwinden automatisch“ bei Kombination von Swapping mit Virtueller Speicherverwaltung.
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 [Bearbeiten]
Moderne Betriebssysteme unterstützen typischerweise das Konzept des page cache, so dass virtueller Speicher und Festplatten-Caching über denselben Mechanismus abgearbeitet werden. "Page in" bezeichnet den Transfer von einer Datei in den Arbeitsspeicher, "page out" den Transfer vom Arbeitsspeicher in das Dateisystem. "Swap in" und "swap out" bezieht sich nur auf den Transfer zwischen dem Arbeitsspeicher und dediziertem Swap-Speicherplatz, nicht jedoch auf den Transfer anderer Dateieninhalte.
Beispiele [Bearbeiten]
- 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.