Zitat ausBereitstellungshandbuch von centos.orgdas ist,
Swap-Platzwird unter Linux verwendet, wenn der physische Speicher (RAM) voll ist.
Und dasWikipediasagte auch,
Der Begriff „Swap“ [wird verwendet], um sowohl das Verschieben von Speicherseiten zwischen RAM und Festplatte als auch den Bereich einer Festplatte zu beschreiben, in dem die Seiten gespeichert sind.
Wie kommt es nun, dass der Swap-Speicher in bestimmten Fällen mehr Daten enthält als mein physischer Speicher? Ich glaube, wenn das System mehr Speicher benötigt als physisch verfügbar ist, lagert der Kernel weniger genutzte Seiten aus und gibt den Speicher an die aktuelle Anwendung (den aktuellen Prozess) weiter, die den Speicher sofort benötigt. Der Swap-Speicher darf also keine Daten enthalten, die größer sind als der RAM.
Hier komme ich her, bitte sehen Sie sich den unten bereitgestellten Screenshot an.
Antwort1
Sie verstehen virtuellen Speicher falsch. Programme und das Betriebssystem arbeiten immer im virtuellen Speicher. Wenn Sie 10 Bytes, 10 Millionen oder 10 Milliarden mallocen, weisen Sie virtuellen Speicher zu. Ihr Code, Ihr Stapelspeicher (automatischer Speicher, alloca usw.), Ihr globaler Speicher (falls vorhanden) befinden sich ebenfalls alle im virtuellen Speicher. Wenn Sie die Adresse von etwas nehmen, wie in &myVariable
, ist das Ergebnis eine virtuelle Adresse. Sie verwenden unter einem Betriebssystem mit virtuellem Speicher ''niemals'' physische Speicheradressen.
Die Gesamtsumme des vom Betriebssystem benötigten virtuellen Adressraums plus aller ausgeführten Programme wirdroutinemäßigdie Größe des RAM überschreiten, sogar auf heutigen Systemen. Dies kann sogar für ein einzelnes Programm zutreffen. Daher kann die RAM-Nutzung + „Auslagerungsspeicher“ für einen einzelnen Prozess leicht den RAM überschreiten.
Der ganze Sinn des virtuellen Speichers – oder besser gesagt einer der wichtigsten Punkte – besteht darin, Ihnen das Schreiben von Code zu ermöglichen, der mehr „Speicher“ (sei es für Code, Daten oder was auch immer) benötigt, als Ihnen RAM zur Verfügung steht.
Wie andere in Kommentaren sagten, liegt es am Betriebssystem, zu entscheiden, welcher Teil des gesamten virtuellen Adressraums (für das Betriebssystem + alle Prozesse) im RAM und welcher auf der Festplatte (im „Swap“-Speicher) gespeichert wird. Wenn Sie auf eine Seite (im Allgemeinen 4 KBytes auf x86/x64-Systemen) Ihres virtuellen Adressraums verweisen, die sich nicht im RAM befindet, „lagert“ das Betriebssystem sie für Sie ein (wir sagen auch „lagert sie ein“ oder „lagert sie ein“, da dies durch einen „Seitenfehler“ ausgelöst wird). Einige Zeit später kann das Betriebssystem entscheiden, dass es nicht genug RAM hat, und einige der am längsten oder am wenigsten referenzierten Dinge aus dem RAM entfernen. Wenn diese Dinge seit dem letzten Einlesen in den RAM geändert wurden, muss die geänderte Version auf der Festplatte gespeichert werden – deshalb werden die Dinge in den „Swap“-Speicher (oder in Windows-Begriffen in die Auslagerungsdatei) verschoben.
Übrigens ist der Auslagerungs-/Auslagerungs-/Auslagerungsbereich bei weitem nicht der einzige Ort, an dem virtuelle Speicherinhalte gespeichert werden, wenn sie sich nicht im RAM befinden. Zugeordnete Dateien, die im Allgemeinen jede Codedatei enthalten, sind ein weiterer Ort. Code wird im RAM selten geändert, daher wird er im Allgemeinen nur eingelagert, nicht ausgelagert. Wenn er aus dem RAM gelöscht werden muss, wird er einfach gelöscht und kann bei Bedarf wieder aus derselben Datei eingelagert werden, aus der er ursprünglich stammte.