Warum verwendet Linux eine Swap-Partition, wenn der Kernel Paging / virtuellen Speicher unterstützt?

23

Soweit ich Paging und Swapping verstehe, handelt es sich um völlig unterschiedliche Konzepte. Während das Austauschen bedeutet, dass sich ein Prozess entweder vollständig im physischen Speicher oder auf der Festplatte befindet, können sich Paging-Teile eines Prozesses im physischen Speicher und andere Teile auf der Festplatte befinden.

Aber warum braucht Linux dann eine Swap-Partition? Wenn der physische Speicher voll ist, werden einige Prozesse auf die Festplatte ausgelagert und ein neuer Prozess wird vom virtuellen Speicher auf den physischen Speicher abgebildet.

Ich verstehe nur nicht, warum man dann eine Swap-Partition braucht (oder generell Swap)?

Oder ist das nur eine Frage der Terminologie und swap partition == virtual memory?

JohnnyFromBF
quelle
5
Beachten Sie, dass "virtueller Speicher" in der Computerarchitektur eine Technik ist, während MS Windows (fälschlicherweise IMO) dies als "virtueller Speicher ist Speicherplatz auf der Festplatte Ihres Computers, den Windows in Verbindung mit Arbeitsspeicher (RAM) verwendet" definiert. IE Google Windows "virtuellen Speicher"
Sägemehl

Antworten:

25

Ja, es ist nur eine Frage der Terminologie, in vielen Fällen wird eine Swap-Partition als virtueller Speicher verwendet.

Der Grund, warum UNIX- und UNIX-ähnliche Systeme Auslagerungspartitionen gegenüber Auslagerungsdateien bevorzugen, ist, dass sie zusammenhängend sein können, was im Vergleich zu einer möglicherweise fragmentierten Auslagerungsdatei zu kürzeren Suchzeiten führt.

Patuck
quelle
6
Auf diese Weise ist es auch einfacher, eine einzelne Swap-Partition für Linux-Installationen freizugeben.
OKTOSITE
3
In der Regel wird eine Auslagerungsdatei beim ersten Start vollständig erstellt, damit sie nicht fragmentiert wird (na ja, es gibt noch einige Möglichkeiten)
AndreaCi
12
Die allerersten UNIX-Systeme hatten nur das Auslagern und kein Auslagern und konnten nur auf eine dedizierte Partition auslagern. Paging wurde implementiert, sobald die Hardware es unterstützt, aber der Name "Swap-Partition" blieb. Das Paging in eine Datei ist aktueller und hat einen höheren Overhead für das Betriebssystem sowie das Risiko der Fragmentierung. Daher wird davon abgeraten.
zwol
1
msgstr "Swap - Partition wird als virtueller Speicher verwendet." - Nur Microsoft Windows definiert den sekundären Speicher (z. B. Auslagerungsdatei auf der Festplatte) als "virtuellen Speicher". Aber auch sie versuchen, sich von dieser Verwendung zu entfernen. Versuchen Sie, Windows "Virtueller Speicher" zu googeln, und die Inhaltsangabe für das erste Ergebnis ("Virtueller Speicher ist Speicherplatz ...") stimmt nicht mit dem Seiteninhalt überein. Eine korrekte Anweisung wäre "Swap-Partition wird vom virtuellen Speicher verwendet".
Sägemehl
14

Ich weiß nicht, woher Sie die Idee haben, dass "Tauschen bedeutet, dass sich ein Prozess entweder vollständig im physischen Speicher oder auf der Festplatte befindet". Diese Bedeutung wird seit einigen Jahrzehnten nicht mehr verwendet. Wikipedia zitieren :

In der Vergangenheit bezog sich das Auslagern auf das gleichzeitige Verschieben vom / zum sekundären Speicher in einem als Roll-In / Roll-Out bezeichneten Schema. In den 1960er Jahren, nachdem das Konzept des virtuellen Speichers eingeführt worden war - in zwei Varianten, entweder mit Segmenten oder Seiten -, wurde der Begriff "Swap" auf das Verschieben von Segmenten oder Seiten zwischen Festplatte und Speicher angewendet. Heute, da der virtuelle Speicher hauptsächlich auf Seiten und nicht auf Segmenten basiert, wurde das Austauschen zu einem ziemlich engen Synonym für Paging, wenn auch mit einem Unterschied.

In jedem Kontext, in dem Linux (oder andere Unix-Systeme) zum Einsatz kommen, sind Paging und Swapping gleichbedeutend. Beide beziehen sich auf die Verwendung des virtuellen Speichers, wobei die Seitendaten entweder im RAM oder auf der Festplatte gespeichert werden können. (Eine Seite hat auf jedem Gerät, auf das Sie wahrscheinlich stoßen, eine Größe von 4 KB.) Das Programm, das die Speicherseite verwendet, kümmert sich nicht darum oder weiß auch nicht, wo die Daten gespeichert sind, sondern verwendet weiterhin die virtuelle Adresse. Der Kernel überträgt Daten zwischen dem RAM und dem Datenträger und aktualisiert die MMU- Tabellen nacheinander, sodass der Eintrag für die virtuelle Adresse entweder auf eine physische Seite im Speicher verweist oder einen speziellen Wert enthält, der den Prozessor veranlasst, Kernel-Code auszuführen Dadurch werden die entsprechenden Daten von der Festplatte geladen.

Paging bezieht sich auf diesen generischen Prozess. Auslagerung bezieht sich auf den Fall, dass sich die Daten auf der Festplatte in einem bestimmten Bereich befinden: dem Auslagerungsbereich (eine Auslagerungspartition oder Auslagerungsdatei). Paging kann auch zwischen RAM und einer Datei durchgeführt werden. In diesem Fall wird es normalerweise nicht als Auslagerung bezeichnet . Wenn Sie beispielsweise ein Programm ausführen, muss der Code in den Speicher geladen werden, um ausgeführt zu werden. Wenn eine Codepage aus dem RAM entfernt werden muss, um Platz für etwas anderes zu schaffen, muss diese Seite nicht in den Auslagerungsbereich geschrieben werden, da sie aus der Programmdatei zurückgeladen werden kann. (Dies kann für alle schreibgeschützten Daten erfolgen, nicht nur für Programmcode.)

Wenn der physische Speicher (fast) voll ist, sucht der Kernel nach einer Seite im RAM (kein ganzer Prozess), die in letzter Zeit nicht verwendet wurde. Wenn diese Seite den Inhalt einer Festplattendatei wiedergibt (es gibt Tabellen im Kernel, die dies anzeigen), kann die Seite zurückgefordert werden. Wenn nicht, wird die Seite zum Tauschen ausgeschrieben und dann zurückgefordert. In beiden Fällen aktualisiert der Kernel den Eintrag in der virtuellen Speichertabelle des Prozesses (die zur MMU-Tabelle wird, während der Prozess ausgeführt wird), um ihn als nicht im RAM zu markieren, und kann die physische Seite dann für etwas anderes (ein anderes Programm oder eine andere Seite von) wiederverwenden das gleiche Programm).

Gilles 'SO - hör auf böse zu sein'
quelle
Der erste Absatz Ihrer Antwort sagt ihm, woher er die Idee hat: alte Dokumente. (Ich erinnere mich, als es auch einen Unterschied zwischen Tauschen und
Blättern gab
9

Mit der Funktion für virtuellen Speicher / Paging kann ein Kernel den Speicher für Prozesse im Userspace "virtualisieren". Der Kernel kann Seiten aus dem physischen Speicher entnehmen und durch Blättern so anordnen, dass sie an einen Benutzerbereichsprozess angrenzen.

Es kann ein Limit für den Arbeitsspeicher eines Userspace-Prozesses festgelegt werden. Wenn der Prozess darüber hinausgeht, tritt ein "Seitenfehler" auf, der eine CPU-Ausnahme verursacht, die zum Kernel zurückspringt. Dadurch wird verhindert, dass das Userspace-Programm ohne die Erlaubnis des Kernels mit dem dem Kernel oder anderen Programmen zugewiesenen Speicher in Konflikt gerät.

Typischerweise fragen User - Space - Programme den Kernel diese Grenze über gut definierte Schnittstellen zu erweitern (durch die C - Funktionen aufgerufen malloc()und free()zum Beispiel.). Der Kernel ist dafür verantwortlich, nachzuverfolgen, wie viel und welcher Speicher einem Programm zugewiesen ist.

Dieser "Seitenfehler" -Mechanismus kann auch dazu führen, dass der Kernel die Seite, auf die der Prozess versucht hat, mit einer Seite von der Festplatte auszutauschen, wenn der Kernel in der Lage ist, Speicher überzubereiten (und dies sowohl von Windows als auch von Linux unterstützt wird). Wenn der Speicherzugriff tatsächlich ungültig war (dh der Prozess versucht, auf den Speicher zuzugreifen, nach dem er nicht zuerst gefragt hat), wird der Prozess normalerweise mit einem SIGSEGV abgebrochen.

"Tauschen" ist also eine zusätzliche Funktion (in Linux können Sie sie sogar ganz deaktivieren, wenn Sie möchten), die vom virtuellen Speicher / Paging abhängt, aber nicht erforderlich ist, nur weil eine CPU über virtuellen Speicher / Paging verfügt. Die Konzepte sind nicht identisch, aber das Austauschen hängt davon ab, ob Paging / virtueller Speicher vorhanden ist.


Nachdem Sie Ihre Frage genauer gelesen haben, wird "Paging" manchmal als Synonym für "Auslagern" verwendet. Ich habe jedoch noch nie von "Auslagern" gehört, was bedeutet, dass der gesamte Prozessspeicher ausgelagert wird, im Gegensatz zu "Auslagern", was nur einen Teil von "Auslagern" bedeutet es ist vertauscht.

Aber warum braucht Linux dann eine Swap-Partition? Wenn der physische Speicher voll ist, werden einige Prozesse auf die Festplatte ausgelagert und ein neuer Prozess wird vom virtuellen Speicher auf den physischen Speicher abgebildet.

"Virtueller Speicher" ist physischer Speicher, nur "neu zugeordnet". Die MMU-Hardware kann keinem Speichergerät direkt zugeordnet werden. Die MMU kann einen Fehler auslösen, der dem Kernel mitteilt, dass ein Prozess versucht hat, auf den Speicher zuzugreifen, den er nicht haben sollte - und der Kernel kann diesen Mechanismus verwenden, um festzustellen, dass ein Prozess etwas von der Festplatte zurückverlangen möchte, von dem er glaubte, dass es sich im Speicher befand, und dann die folgenden Schritte ausführen: Wechsel". Der Punkt ist, dass es das Betriebssystem ist, das entscheidet, Seiten auf der Festplatte zu speichern, damit es diese Seiten für andere Prozesse verwenden kann, nicht für die Hardware.

LawrenceC
quelle
2

Im Allgemeinen entspricht die Swap-Partition nicht dem virtuellen Speicher.

Prozesse benötigen möglicherweise mehr Speicher als der tatsächliche physische Speicher. Daher haben sich die Betriebssystementwickler entschlossen, davon auszugehen, dass mehr Speicher im System vorhanden ist, der als "virtueller Speicher" bezeichnet wird.

Dieser virtuelle Speicher ist im Grunde ein physischer Speicher und ein Teil der Festplatte. Dieser Teil der Festplatte wird unter Linux als "Swap" bezeichnet.

Die Entwickler schlugen auch vor, dass die Nutzung des Teils des virtuellen Speichers, der sich auf der Festplatte befindet, so gering wie möglich sein sollte. Aus diesem Grund wurde der gesamte virtuelle Speicher in kleine Teile aufgeteilt, die als "Seiten" bezeichnet werden. Viele Seiten werden mit einer geringen Rate verwendet. Diese Seiten müssen in den Teil des virtuellen Speichers auf der Festplatte geschrieben werden. Dieser Vorgang wird als "Auslagern" bezeichnet. Das Betriebssystem muss nachverfolgen, welche Seiten sich nicht im physischen Speicher befinden, um sie bei Bedarf zu finden. Ein Seitenfehler tritt auf, wenn ein Programm einen Teil des ausgelagerten Speichers schreiben / lesen möchte.

Zur Beantwortung Ihrer Frage: Linux benötigt eine Swap-Partition, um einige Seiten des Speichers auszutauschen. Sie können eine Statistik der Nutzung des virtuellen Speichers anzeigen mit vmstat:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache    si   so    bi    bo   in   cs us sy id wa
2  0  35424 524560 134164 1858728    0    0    13    11   55   42  5  1 94  0
0  0  35424 526720 134164 1857872    0    0     0     0 2774 5224  7  2 91  0
1  0  35424 516328 134172 1870116    0    0     0     6 3464 6561 13  3 84  0
0  0  35424 522992 134212 1862676    0    0     0   125 4135 7135 12  4 84  1

Die 'Swap'-Spalte zeigt die Statistik für Auslagerung und Einlagerung. Auch dieser Link erklärt den virtuellen Speicher und dessen Verwendung vmstat.

soroosh
quelle