2013-03-18 19 views
5

Ich habe folgende Fragen in Bezug auf Linux-Speicher:Fragen zu Linux Speichertypen

  1. Ich weiß, dass der aktive Speicher der Teil des Speichers ist das am häufigsten zugegriffen wird. Aber kann mir jemand erklären, wie Linux einen Speicherort für aktiven Speicher oder inaktiven Speicher berücksichtigt.

  2. Aus welchen Komponenten besteht der aktive Speicher? Wird der Festplatten-/Dateicache als Teil des aktiven Speichers betrachtet?

  3. Was ist der Unterschied zwischen Buffers und Cached Speicher?

Antwort

3

ich versuchen, Ihre Fragen zu beantworten:

(1) Im Grunde genommen, Ihre Gedanken richtig sind. Aber die Implementierung des Seiten-Caches ist im Linux-Kernel kompliziert. Der Linux-Kernel verwendet den LRU-Algorithmus (Least Recently Used), um die Seitencache-Listen zu verwalten. In einem Linux-System kann es unterschiedliche Speicherbereiche geben, jede Zone verwaltet mehrere LRU-Listen, wie LRU_INACTIVE_ANON, LRU_ACTIVE_ANON (diese Listen sind für anonyme Seitencaches), LRU_INACTIVE_FILE, LRU_ACTIVE_FILE (diese beiden Listen sind für Dateiseiten-Caches), LRU_UNEVICTABLE. Diese Listen werden unter Verwendung des LRU-Algorithmus (dem Schwanz hinzugefügt, vom Kopf entfernt) beibehalten. Und Seiten werden gemäß der Zugriffshäufigkeit zwischen aktiver Liste und inaktiver Liste übertragen. Seiten werden nur dann zum aktiven Listenende hinzugefügt, wenn auf die Seite zugegriffen wird und sie sich in der inaktiven Liste befindet. Wenn die aktive Liste zu groß wird, werden die Seiten, die am Anfang der aktiven Liste stehen, in den inaktiven Listen-Tail verschoben. Die Seitenrückgewinnung geschieht auf der inaktiven Liste, beginnend am Kopf der inaktiven Liste.

(2) Regelmäßige Lese-/Schreibzugriffe auf Dateien, Zugriff auf blockbasierte Dateien und Speicherabbilddateien können Linux Kernel dazu veranlassen, die aktiven oder inaktiven Seitencaches zu generieren. Auch das im User-Space-Prozess und im User-Space-Stack verwendete malloc kann Linux-Kernel zum Generieren der Seiten-Caches veranlassen.

(3) Vielleicht missverstehen Sie Ihre Frage, ich denke, Sie meinen Unterschied zwischen Puffer-Cache und Seiten-Cache: Ältere Version Kernel verwenden sowohl Puffer-Cache und Seiten-Cache. Seiten-Caches sind für Dateizugriffe (wie reguläre Dateizugriffe, Speicher-Map-Datei, Block-Geräte-Dateizugriffe) und Puffer-Caches sind für Zugriffe auf physische Plattenblöcke (normalerweise ist die Größe des physischen Plattenblocks weniger als eine Seite, also mehrere physische Festplattenblöcke können in eine Seite gefüllt werden). Obwohl der Kernel der neuen Version immer noch das Puffer-Cache-Konzept verwendet, implementiert der neue Kernel den Puffer-Cache basierend auf dem Seiten-Cache.

Oder meinen Sie den Unterschied zwischen Speicherpuffer und CPU-Cache, wenn ja, der Speicherpuffer soll die Festplatten-/Peripheriezugriffe beschleunigen, und der CPU-Cache soll die Speicherzugriffe beschleunigen.

+0

Was meinst du? "Auch das im User-Space-Prozess und im User-Space-Stack verwendete malloc kann Linux-Kernel dazu veranlassen, die Seiten-Caches zu generieren." –