Wie wir alle wissen, verwaltet Linux den Speicher in Seiteneinheiten. Unabhängig davon, ob Daten von der Festplatte in den Speicher geladen oder Daten aus dem Speicher zurück auf die Festplatte geschrieben werden, arbeitet das Betriebssystem in Seiteneinheiten. Dies bedeutet auch, dass das Betriebssystem auch leeren muss, wenn wir nur ein Byte Daten auf die Festplatte schreiben alle Daten der gesamten Seite auf die Festplatte.
Es ist erwähnenswert, dass wir unter Linux entweder Speicherseiten normaler Größe für Vorgänge oder riesige Speicherseiten (Huge Page) verwenden können. Obwohl die Standardgröße der Speicherseiten bei den meisten Prozessoren 4 KB beträgt, verwenden einige Prozessoren 8 KB oder 16 KB oder 64 KB als Standardseitengröße. Zusätzlich zu den normalen Speicherseitengrößen unterstützen verschiedene Prozessoren unterschiedliche große Seitengrößen. Auf einem x86-Prozessor können wir beispielsweise Speicherseiten mit einer Größe von 2 MB verwenden.
4-KB-Speicherseiten sind zu einem historischen Relikt geworden. Diese Seitengröße wurde ab den 1980er Jahren weit verbreitet und ist bis heute erhalten geblieben. Obwohl die heutige Hardware leistungsfähiger ist als früher, bleiben wir immer noch bei der aus der Vergangenheit übernommenen Speicherseitengröße von 4 KB. Normalerweise können wir beim Einbau des Speichers die Spezifikationen des Speichermoduls deutlich erkennen, wie im Bild unten dargestellt:
Abbildung 1 – Direktzugriffsspeicher
Heutzutage ist eine Speicherseitengröße von 4 KB möglicherweise nicht die beste Wahl. 8 KB oder 16 KB sind möglicherweise die bessere Wahl, aber dies ist in der Vergangenheit in bestimmten Szenarien ein Kompromiss. In diesem Artikel sollten wir uns nicht zu sehr auf die Zahl 4 KB konzentrieren. Wir sollten den verschiedenen Faktoren, die dieses Ergebnis bestimmen, mehr Aufmerksamkeit schenken, damit wir in diesem Artikel die beste Wahl treffen können In dem Artikel werden die folgenden zwei Faktoren vorgestellt, die sich auf die Speicherseitengröße auswirken:
Eine zu kleine Seitengröße führt zu größeren Seitentabelleneinträgen, was die Suchgeschwindigkeit und den zusätzlichen Overhead des TLB (Translation Lookaside Buffer) während der Adressierung erhöht
Übermäßige Seitengröße verschwendet Speicherplatz, führt zu Speicherfragmentierung und verringert die Speicherauslastung
Im letzten Jahrhundert wurden die beiden oben genannten Faktoren bei der Gestaltung der Speicherseitengröße vollständig berücksichtigt, und schließlich wurden 4-KB-Speicherseiten als häufigste Seitengröße für Betriebssysteme ausgewählt. Als Nächstes werden wir ihre Auswirkungen auf die Betriebssystemleistung im Detail vorstellen.
Wir haben den virtuellen Speicher in Linux im Artikel „Warum Linux benötigt virtuellen Speicher“ vorgestellt. Was jeder Prozess sehen kann, ist nur ein logisches Konzept, auf das der virtuelle Speicher zugreifen muss , erfordert die Konvertierung vom virtuellen Speicher in den physischen Speicher die Verwendung von Seitentabellen, die von jedem Prozess gehalten werden.
Um die zugeordneten Daten des 128 TiB großen virtuellen Speichers im 64-Bit-Betriebssystem zu speichern, hat Linux in 2.6.10 eine vierschichtige Seitentabelle zur Unterstützung der virtuellen Adressübersetzung eingeführt und eine fünfschichtige Seitentabellenstruktur eingeführt in 4.11. In Zukunft werden möglicherweise auch weitere Schichten von Seitentabellenstrukturen eingeführt, um virtuelle 64-Bit-Adressen zu unterstützen.
Abbildung 2 – Vierschichtige Seitentabellenstruktur
In der in der Abbildung oben gezeigten vierstufigen Seitentabellenstruktur verwendet das Betriebssystem die niedrigsten 12 Bits als Seitenversatz und die verbleibenden 36 Bits werden in vier Gruppen unterteilt, um den Index der aktuellen Ebene in darzustellen vorherige Ebene. Alle virtuellen Adressen können die oben erwähnte mehrschichtige Seitentabelle verwenden, um die entsprechende physische Adresse zu finden.
Da die Größe des virtuellen Adressraums des Betriebssystems fest ist, ist der gesamte virtuelle Adressraum gleichmäßig in N Speicherseiten gleicher Größe unterteilt, sodass die Größe der Speicherseite letztendlich die hierarchische Struktur der Seitentabelle bestimmt Insbesondere gilt: Je kleiner die Größe der virtuellen Seite, desto mehr Seitentabelleneinträge und virtuelle Seiten gibt es in einem einzelnen Prozess.
PagesCount=VirtualMemory ÷ PageSize
Da die aktuelle Größe der virtuellen Seite 4096 Byte beträgt, können die 12 Bits am Ende der virtuellen Adresse die Adresse in der virtuellen Seite darstellen. Wenn die Größe der virtuellen Seite auf 512 Byte reduziert wird, dann die ursprüngliche Seite mit vier Ebenen Tabellenstruktur oder Seite mit fünf Ebenen Die Tabellenstruktur wird zu fünf oder sechs Ebenen, was nicht nur den zusätzlichen Overhead des Speicherzugriffs erhöht, sondern auch die Speichergröße erhöht, die von Seitentabelleneinträgen in jedem Prozess belegt wird.
Da das Speicherzuordnungsgerät auf Speicherseitenebene arbeitet, geht das Betriebssystem davon aus, dass die kleinste Einheit der Speicherzuweisung die virtuelle Seite ist. Auch wenn das Benutzerprogramm nur 1 Byte Speicher beantragt, beantragt das Betriebssystem eine virtuelle Seite dafür, wie in der folgenden Abbildung dargestellt. Wenn die Größe der Speicherseite 24 KB beträgt, wird 1 Byte Speicher beantragt Verschwendung von ca. 99,9939 % des Platzes.
Abbildung 3 – Fragmentierung eines großen Speichers
Mit zunehmender Speicherseitengröße wird die Speicherfragmentierung immer schwerwiegender. Kleine Speicherseiten verringern die Speicherfragmentierung im Speicherplatz und verbessern die Speichernutzung. Im letzten Jahrhundert gab es nicht so viele Speicherressourcen wie heute. In den meisten Fällen ist Speicher keine Ressource, die die Ausführung von Programmen einschränkt. Die meisten Online-Dienste erfordern mehr CPUs und nicht mehr Speicher. Allerdings war Gedächtnis im letzten Jahrhundert tatsächlich eine knappe Ressource, daher müssen wir über eine Verbesserung der Nutzung knapper Ressourcen nachdenken:
Abbildung 4 – Speicherpreis
Speichersticks waren in den 1980er und 1990er Jahren nur 512 KB oder 2 MB groß, und der Preis war lächerlich teuer. Heutzutage ist die Speicherauslastung jedoch immer noch sehr wichtig, der Preis für Speicher ist jedoch erheblich gesunken Fragmentierter Speicher ist kein zentrales Problem mehr, das gelöst werden muss.
Zusätzlich zur Speichernutzung erhöhen größere Speicherseiten auch den zusätzlichen Overhead beim Kopieren des Speichers. Aufgrund des Copy-on-Write-Mechanismus unter Linux wird bei Änderungen eines der Prozesse der gemeinsame virtuelle Speicher verwendet Zu diesem Zeitpunkt gilt: Je kleiner die Speicherseite des Betriebssystems, desto geringer ist der zusätzliche Overhead, der durch das Kopieren beim Schreiben verursacht wird.
Zusammenfassung
Wie oben erwähnt, ist die im letzten Jahrhundert festgelegte Standardeinstellung die falsche Wahl. Architekturen wie arm64 und ia64 können bereits 8 KB, Speicherseiten mit 16 KB unterstützen Da der Preis für den Speicher immer niedriger wird und der Systemspeicher immer größer wird, ist ein größerer Speicher möglicherweise die bessere Wahl für das Betriebssystem. Sehen wir uns die beiden Entscheidungen bezüglich der Speichergröße an:
Schauen wir uns zum Schluss noch einige relativ offene Fragen an, über die sich interessierte Leser sorgfältig Gedanken machen können:
Was sind die Unterschiede und Zusammenhänge zwischen Sektoren, Blöcken und Seiten unter Linux?
Wie wird die Blockgröße unter Linux bestimmt? Was sind die gängigen Größen?
Das obige ist der detaillierte Inhalt vonWarum die Standardseitengröße des Linux-Systems 4 KB beträgt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!