2013-06-29 5 views

Antwort

3

Im Allgemeinen ist das, was Anwendungsprogrammierer Speicher nennen, wirklich nur ein Adressraum. Also der Heap, der Stack, sogar die Programmsegmente sind nur Adressen. Unsere Programme, einschließlich derjenigen im Knoten, lesen und schreiben Daten unter Verwendung dieser Adressen. Wir nennen Dinge wie malloc einen "Speichermanager", aber es sollte wirklich "Adressverwalter" sein. Ein separates "virtuelles Speicher" -System bestimmt, ob diese Adressensätze dem RAM, der Festplatte oder gar nichts zugeordnet sind oder nicht. Der resident set ist die Adresse, die vom RAM unterstützt wird. Die Resident-Set-Größe ist nur, wie groß das Set ist.

7

Einem Prozess wird vom Betriebssystem Speicher zugewiesen. Auf modernen 32-Bit- und 64-Bit-Systemen sieht dieser Speicherplatz wie ein weit geöffnetes Feld aller möglichen Speicheradressen aus, die adressiert werden können. In Wirklichkeit "liegt" das Betriebssystem im Prozess und kann diese Verpflichtung oft mit nur einem Teil des Speichers unterstützen, der potenziell durch den Prozess adressiert werden kann. Der Rest ist "virtuell".

Da die CPU nur Daten und Code im RAM ausführen kann, arbeitet das Betriebssystem mit der CPU zusammen, um zu verfolgen, welchen Speicher das Programm im RAM verwendet und was in einer speziellen Datei auf dem Datenträger gespeichert wird virtuelles RAM (dh die Auslagerungsdatei/Auslagerungsdatei). Was im RAM ist, wird als "resident" oder "working" bezeichnet.

Dies ist wichtig als Entwickler, da die Zeit, die für den Speicherzugriff benötigt wird, um viele Größenordnungen schneller ist, als wenn das Betriebssystem den Speicher zuerst von der Festplatte in den RAM laden muss. Das Entwerfen von Programmen, die kritische Daten resident halten, weist höhere Leistungsmerkmale auf als Programme, die nicht damit umgehen, wie Speicher zugeordnet und auf sie zugegriffen wird.

Der Heap ist die Partitionierung des weit offenen Speichers, den das Betriebssystem einem Prozess bereitstellt, der in einem data structure bearing the same name organisiert ist. Der Prozess verwendet diese Organisation, wenn er ausgeführt wird, um nur kleine Stücke gleichzeitig zu erfassen (und für die spätere Veröffentlichung nachzuverfolgen). Wenn der Prozess z. B. ein Array von ganzen Zahlen speichern möchte, benötigt er einen Teil des Speichers mit so vielen Bytes, wie Elemente die Größe der ganzen Zahl haben.

Diese Partitionierung steht über dem, was das Betriebssystem mit Swapping macht. Ich greife auf den Heapspeicher zu, um Zuweisungen von Speicherbytes für meine Objekte und Datenstrukturen zur Laufzeit zu speichern, aber diese Heapzuordnung lebt immer noch in dem Speicher, den das OS mir gegeben hat, in 4096 Bytes "Seiten", die verschoben werden können hin und her von der Festplatte. Der Stapel ist eine andere spezielle Datenstruktur, die das Betriebssystem einen Prozess gibt, aber es unterscheidet sich darin, dass es den gesamten Stapel auf einmal erhält, und wenn ein Prozess Elemente nacheinander auf den Stapel legt, inkrementiert (oder dekrementiert) er spezieller Zeiger (normalerweise ein spezielles CPU-Register), um zu verfolgen, wo es in diesem Stapel ist. Auf einer höheren Ebene verfolgt jeder Thread einen Stapel und wo sich der Zeiger in diesem Stapel befindet. Lokale Variablen, Funktionsparameter und Rücksprungzeiger werden hier gespeichert, und der Zeiger wird über diesen Speicher inkrementiert und dekrementiert, während der Prozeß ausführt, um diese Dinge im Auge zu behalten.

Verwandte Themen