Gruppe 5: Kryptische Anzeigen erklärt
Viel Speicher – und doch alles belegt?
Zugegeben, jedes System braucht Speicher für Verwaltungsaufgaben. Doch wenn Sie
einmal einen Blick darauf werfen, wie es unter Linux ausschaut, so ergibt sich
ein verwunderliches Bild: Fast der gesamte Speicher ist belegt, und das, obwohl
die gestarteten Programme dies gar nicht rechtfertigen!
Ein Aufruf des Programms free in einem Terminal wird
beispielsweise Folgendes ausgeben:
In diesem Beispiel stehen nur noch ca. 65 MByte zur freien Verfügung, und 3,8
GByte sind belegt (siehe die mit Mem gekennzeichnete
Zeile)!
Doch der Schein trügt. Das, was hier „belegt“ worden ist, sind Plattenpuffer
und Cache: So werden knapp 200 MByte für Plattenpuffer und 2,5 GByte alleine
für Zwischenspeicher belegt.
Rechnet man diese aus der Speicherbelegung heraus (siehe die Zeile darunter),
so sieht die Situation gleich ganz anders aus: Es stehen letztlich 2,8 GByte
Speicher zur Verfügung, und es sind gerade einmal etwas über 1 GByte belegt.
Doch was passiert jetzt eigentlich hinter den Kulissen, wenn ein Programm einen
neuen Speicherblock anfordert?
Hier schaut Linux zunächst einmal nach, ob die Reserve, die es in der
Hinterhand hält, ausreichend ist, um die Anforderung zu bedienen. In diesem
Fall braucht das System nichts zu unternehmen, sondern es wird einfach ein
Speicherblock belegt.
Sollte die Reserve jedoch nicht mehr ausreichen, so fängt der Systemkern an,
seine Caches und Puffer zu räumen, um genügend Platz für den neuen
Speicherblock zu schaffen. Dabei werden zunächst einmal die geräumt, deren
Inhalt lediglich eingelesen wurde, also mit den Informationen auf Platte
übereinstimmen, und sowie ausreichend Speicherplatz freigeräumt wurde, wird der
Speicher belegt. Caches und Puffer mit verändertem Inhalt müßten zunächst
einmal zurückgeschrieben werden, damit sie geräumt werden können, was immer
einen Zeitverlust zur Folge hat – nur wenn nichts anderes mehr verfügbar ist,
so müssen auch diese Caches und Puffer geräumt werden, um genügend Speicher
freizubekommen.
Dabei wird Linux jedoch nicht so weit gehen und alle Caches und Puffer
freigeben, da es immer einige Puffer benötigt, um Plattenoperationen zu
bewerkstelligen. Von daher wird Linux irgendwann anfangen, Daten auf Platte
auszulagern, wenn der Hauptspeicher zu knapp wird.
Sie sehen also, daß Linux nicht einfach den freien Speicher „auffrißt“, sondern ihn lediglich vorübergehend belegt, und wenn ein Programm freien Speicher benötigt, so bekommt es diesen ohne Probleme zugewiesen – es sei denn, daß der komplette Speicher (also der Hauptspeicher und der Auslagerungsbereich) vollgestopft ist. In diesem Fall werden Speicheranforderungen zwangsläufig scheitern, und Programme lassen sich so auch nicht mehr starten. Sie müssen dann Programme beenden, um andere öffnen zu können – und gerade im Zusammenspiel mit virtuellen Maschinen, die ihren Hauptspeicher dynamisch zugewiesen bekommen, wird Linux im Bedarfsfalle anfagen, Prozesse abzuschießen, wenn ihm vom Hypervisor ein Teil seines Speichers entzogen wird.
nach oben