it-swarm.com.de

Wie wird die Seitengröße im virtuellen Adressraum bestimmt?

Linux verwendet ein virtuelles Speichersystem, bei dem alle Adressen virtuelle Adressen und keine physischen Adressen sind. Diese virtuellen Adressen werden vom Prozessor in physische Adressen umgewandelt.

Um diese Übersetzung zu vereinfachen, sind der virtuelle und der physische Speicher in Seiten unterteilt. Jede dieser Seiten erhält eine eindeutige Nummer. die Seitenrahmennummer.

Einige Seitengrößen können 2 KB, 4 KB usw. sein. Aber wie wird diese Seitengrößenzahl bestimmt? Wird es von der Größe der Architektur beeinflusst? Ein 32-Bit-Bus verfügt beispielsweise über einen Adressraum von 4 GB.

44
JohnMerlino

Sie können die Standardseitengröße eines Systems ermitteln, indem Sie seine Konfiguration mit dem Befehl getconf abfragen:

$ getconf PAGE_SIZE
4096

oder

$ getconf PAGESIZE
4096

HINWEIS : Die obigen Einheiten sind normalerweise in Bytes angegeben, sodass 4096 4096 Bytes oder 4 KB entspricht.

Dies ist in der Quelle des Linux-Kernels hier fest verdrahtet:

Beispiel

$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */

#define PAGE_SHIFT  12
#ifdef __Assembly__
#define PAGE_SIZE   (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE   (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK   (~(PAGE_SIZE-1))

Wie bringt Ihnen das Schalten 4096?

Wenn Sie Bits verschieben, führen Sie eine binäre Multiplikation mit 2 durch. Eine Verschiebung der Bits nach links (1 << PAGE_SHIFT) Führt also die Multiplikation von 2 ^ 12 = 4096 durch.

$ echo "2^12" | bc
4096
58
slm

Die Hardware (insbesondere das MMU , das Teil der CPU ist) bestimmt, welche Seitengrößen möglich sind. Es gibt keine Beziehung zur Größe des Prozessorregisters und nur eine indirekte Beziehung zur Größe des Adressraums (da MMU bestimmt beide).

Fast alle Architekturen unterstützen eine Seitengröße von 4 KB. Einige Architekturen unterstützen größere Seiten (und einige unterstützen auch kleinere Seiten), aber 4 KB sind eine weit verbreitete Standardeinstellung.

Linux unterstützt zwei Seitengrößen:

  • Seiten mit normaler Größe, von denen ich glaube, dass sie auf allen Architekturen standardmäßig 4 KB groß sind, obwohl einige Architekturen andere Werte zulassen, z. 16 kB ein ARM64 oder 8 kB, 16 kB oder 64 kB ein IA64 . Diese entsprechen der tiefsten Ebene von Deskriptoren auf der MMU (was Linux nennt PTE ).
  • Riesige Seiten , wenn in (CONFIG_HUGETLB_PAGE ist notwendig und CONFIG_HUGETLBFS auch für die meisten Anwendungen). Dies entspricht der zweittiefsten Ebene von MMU Deskriptoren (was Linux PMD nennt) (oder zumindest normalerweise, ich weiß nicht, ob dies für alle Architekturen gilt).

Die Seitengröße ist ein Kompromiss zwischen Speichernutzung, Speichernutzung und Geschwindigkeit.

  • Eine größere Seitengröße bedeutet mehr Verschwendung, wenn eine Seite teilweise verwendet wird, sodass dem System früher der Speicherplatz ausgeht.
  • Eine tiefere MMU Deskriptorebene bedeutet mehr Kernelspeicher für Seitentabellen.
  • Eine tiefere MMU Deskriptorebene bedeutet mehr Zeit für das Durchlaufen von Seitentabellen.

Die Vorteile größerer Seitengrößen sind für die meisten Anwendungen gering, während die Kosten erheblich sind. Aus diesem Grund verwenden die meisten Systeme nur Seiten mit normaler Größe.

Sie können die (normale) Seitengröße auf Ihrem System mit dem Dienstprogramm getconf oder der C-Funktion sysconf abfragen.

$ getconf PAGE_SIZE
4096

Verwenden großer Seiten erfordert das Mounten des hugetlbfs -Dateisystems und der mmapping-Dateien dort.

Die Seitengröße hängt hauptsächlich von der Prozessorarchitektur ab. Auf x86 betrug die Seitengröße seit den Zeiten des 386-Prozessors, der den geschützten Modus einführte, 4 kB.

Im x64-Modus können auch große Seiten mit einer Größe von 2 MB vorhanden sein. Die Verwendung dieser ist jedoch etwas kompliziert.

Weitere Informationen zur Seitengröße finden Sie in Wikipedia-Artikel

0
Tero Kilkanen

Der Prozessor bestimmt die verfügbaren Seitengrößen. Für die meisten Zwecke beträgt die auf x86- und x86_64-Prozessoren implementierte Hardware-Seitengröße 4 KB. Das Betriebssystem kann jedoch mehr als eine Seite gleichzeitig zuweisen, wenn es dies möchte, und dadurch effektiv 8-KB-, 16-KB- oder 32-KB-Seiten in Software implementieren.

Die x86- und x86_64-Prozessoren können neben den Standard-4-KB-Seiten auch 4-MB- und 2-MB-Seiten mischen. Wenn diese Funktion überhaupt verwendet wird, wird sie hauptsächlich zum Zuweisen von Kernelspeicher verwendet.

0
Leslie