Was passiert unter UNIX / Linux, wenn ein Programm größer als der Speicher ist?

7

Ich habe mich gefragt, wie eingebettete Systeme Programme ausführen können, die größer als der Speicher sind. Wenn ich 1 GB Speicher hätte und das Programm 1,5 GB groß wäre, würde das Programm geladen werden? Gibt es Systeme, die nur verfügbaren Speicher verwenden?

MAXGEN
quelle
1
Aus diesem Grund haben Sie Swap, sodass buchstäblich Code in den Speicher und aus dem Speicher ausgetauscht werden kann, um sicherzustellen, dass nur die erforderlichen Bits im Speicher sind.
Burhan Khalid
Da Burhan Said Swap der virtuelle Speicher ist, wird er von den Anwendungen verwendet, wenn der physische Speicher (RAM) eine Ziellast erhält. Wenn sich auf Ihrem Computer 8 GB RAM befinden, müssen wir 16 GB Swap zuweisen, dh immer doppelt so viel RAM. Meistens, wenn Desktop-Computer über mehr RAM-Kapazität verfügen, müssen wir keinen Swap konfigurieren. Wenn es sich um einen Server handelt, muss ein Swap-Bereich vorhanden sein. Wenn Sie einen Swap zum Erstellen benötigen, können Sie ihn mithilfe von Befehlen erstellen. Sie benötigen jedoch freien Speicherplatz in Platte.
Babin Lonston
1
Sie benötigen nicht doppelt so viel Swap wie RAM. Das ist einfach eine Faustregel und wird immer schlimmer, wenn RAM billiger wird.
Strugee
Ich würde annehmen, dass eingebettete Systeme keine so großen Programme haben würden.
Evilsoup
@Lonston, Sie sollten RAM so konfigurieren, dass Sie genug für Ihre normale Arbeitslast (oder die erwartete Spitzenauslastung) haben, und Swap hinzufügen, um alle darüber hinausgehenden außergewöhnlichen Anforderungen zu erfüllen. Aber das ist schwer abzuschätzen, und da RAM in der Vergangenheit teuer und die Festplatte billig war, wurden grobe Faustregeln wie das 2-fache von RAM eingeführt. Einige anfängliche SunOS-Kernel mussten mindestens so groß wie RAM sein, um sie überhaupt verwenden zu können, was dies verstärkte.
vonbrand

Antworten:

6

1. Virtueller Speicher
Das System stellt sicher, dass Prozesse die angeforderte Speichermenge erhalten, obwohl sie größer als der physische Speicher sind. Auf diese Weise weist der Kernel einen virtuellen Speicherplatz mit der maximalen physischen Speichergröße zu, die er verarbeiten kann. Beispielsweise weist der Kernel auf einem 32-Bit-Computer standardmäßig jedem Prozess insgesamt 2 ^ 32, dh 4 GB virtuelle Adressen zu.
2. Overcommit
Es gibt auch genannt etwas overcommit in Linux, wobei der Kernel reagiert auf Speicherzuordnungsanforderungen Weise größer als der physische Speicher zur Verfügung. Durch Überbeanspruchung weist der Kernel virtuellen Speicher zu, ohne dass eine entsprechende Zuweisung des physischen Speichers garantiert ist.
3. Speicherplatz austauschen
Wenn der Prozess beginnt, der so viel Speicher benötigtWenn der Kernel tatsächlich so viel Speicher verwendet, beginnt er mit der Suche nach nicht verwendeten Speicherseiten sowie nach Speicherseiten von Prozessen mit niedrigerer Priorität oder die derzeit nicht ausgeführt werden. Diese Daten werden in den Auslagerungsbereich auf dem sekundären Speichergerät ausgelagert und diese Seiten für Ihren Prozess freigegeben. Dies wird als Seitenraub bezeichnet.

Durch kontinuierliches Wiederholen von Schritt 3, dh das Ein- und Auswechseln von Seiten, gelingt es dem Kernel, dem Prozess eine Illusion des angeforderten Speichers zu zeigen, die größer sein kann als der physisch verfügbare Speicher. Wie Sie nun ein eingebettetes System erwähnt haben, müssen wir prüfen, ob der Swap auf dem System aktiviert ist oder nicht. Wenn ja, gelten die oben genannten 3 Punkte. Wenn nein, gelten die oben genannten 3 Punkte weiterhin , aber das Einzige ist, dass Ihr Prozess wahrscheinlich entweder abstürzt oder vom OOM-Killer (Out-Of-Memory) getötet wird. Es besteht auch die Möglichkeit, dass der Kernel OOM Killer verwendet, um andere Prozesse abzubrechen und mehr Seiten für Ihre Prozesse freizugeben, wenn dies für angemessen erachtet wird. Dies geschieht jedoch nur, wenn kein Swap Space vorhanden ist.

Stark07
quelle
2
Virtueller Speicher und Speicherüberlastung sind nicht dasselbe.
Jlliagre
Bedenken Sie auch, dass alles, was unverändert von der Programm- / Bibliotheksdatei auf der Festplatte ist, niemals ausgetauscht wird, sondern bei Bedarf von dort (erneut) gelesen wird.
vonbrand
@jlliagre - Ich stimme zu, ich musste es ein bisschen umstrukturieren, was ich auch getan habe. Vielen Dank.
Stark07
1
Sie sind immer noch leicht falsch mit Ihrer Definition von Überbindung. Das (nicht beachtete) Limit ist nicht der verfügbare physische Speicher, sondern der verfügbare virtuelle Speicher (dh physischer + Swap). Wenn im Swap-Bereich genügend freier Speicherplatz vorhanden ist, um eine Speicherreservierung zu sichern, ist das Betriebssystem nicht überlastet.
Jlliagre
1
Sie definieren Overcommitting mit diesem Satz: "Overcommitting ist die Zuweisung von virtuellem Speicher ohne Garantie für die entsprechende Zuweisung von physischem Speicher." Nicht überlastete Betriebssysteme weisen den virtuellen Speicher ohne Zuweisung der physischen Speicherzuweisung sicher zu, solange genügend freier Austausch vorhanden ist.
Jlliagre
4

Es wird nichts Besonderes passieren, genauso wie bei jedem anderen Prozess.

Trotz der weit verbreiteten Meinung werden ein Programmcode und Daten beim Start des Programms nicht als Ganzes geladen. Es wird nur eine kleine Teilmenge geladen, im Wesentlichen ihr Einstiegspunkt (Elfentabelle, Hauptfunktion, anfänglicher Stapel), und alles andere wird bei Bedarf geladen, dh ausgelagert. Dies geschieht, wenn sich Code oder Daten, auf die zugegriffen werden soll, derzeit nicht auf einer Seite befinden im physischen Gedächtnis.

Wenn der Arbeitsspeicher unter Druck steht, werden weniger verwendete Seiten auf die Festplatte ausgelagert, um Speicherplatz freizugeben.

Wenn die Größe des verfügbaren Arbeitsspeichers plus die Größe des Auslagerungsbereichs zu klein ist, als dass alle Seiten mit laufenden Programmen passen könnten, ist das Verhalten vom Betriebssystem abhängig:

  • Linux und andere Betriebssysteme, die den virtuellen Speicher überbeanspruchen, beenden einige Prozesse mehr oder weniger zufällig, um Speicherplatz freizugeben.

  • Nicht überlastete Betriebssysteme wie Solaris lassen keine neuen Prozesse zu und lehnen eine neue Speicherreservierung (Malloc) für vorhandene Prozesse ab.

jlliagre
quelle
0

Nein. Die meisten nicht verwendeten Seiten werden ausgetauscht. Wenn es keinen Swap gibt (oder nicht genug), wird er getötet und Sie erhalten eine Kernel-Warnung.

Peter - Setzen Sie Monica wieder ein
quelle