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?
7
Antworten:
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.
quelle
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.
quelle
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.
quelle