Seite (Computerspeicher) - Page (computer memory)

Eine Seite , Speicherseite oder virtuelle Seite ist ein zusammenhängender virtueller Speicherblock fester Länge , der durch einen einzelnen Eintrag in der Seitentabelle beschrieben wird . Es ist die kleinste Einheit von Daten für die Speicherverwaltung in einem virtuellen Speicherbetriebssystem . In ähnlicher Weise ist ein Seitenrahmen der kleinste zusammenhängende Block des physischen Speichers mit fester Länge, in den Speicherseiten durch das Betriebssystem abgebildet werden.

Eine Übertragung von Seiten zwischen dem Hauptspeicher und einem Hilfsspeicher, beispielsweise einem Festplattenlaufwerk , wird als Paging oder Swapping bezeichnet.

Kompromiss bei Seitengröße

Die Seitengröße wird normalerweise durch die Prozessorarchitektur bestimmt. Traditionell hatten Seiten in einem System eine einheitliche Größe, z. B. 4.096 Byte . Prozessordesigns erlauben jedoch aufgrund ihrer Vorteile oft zwei oder mehr, manchmal gleichzeitige Seitengrößen. Es gibt mehrere Punkte, die bei der Auswahl der besten Seitengröße eine Rolle spielen können.

Seitentabellengröße

Ein System mit einer kleineren Seitengröße verwendet mehr Seiten und erfordert eine Seitentabelle , die mehr Platz einnimmt. Wenn beispielsweise ein 2 32 virtueller Adressraum auf 4 KiB (2 12 Byte) Seiten abgebildet wird  , beträgt die Anzahl der virtuellen Seiten 2 20  = (2 32  / 2 12 ). Wenn die Seitengröße jedoch auf 32 KiB (2 15 Byte) erhöht wird , werden nur 2 17 Seiten benötigt. Ein mehrstufiger Paging-Algorithmus kann die Speicherkosten für die Zuweisung einer großen Seitentabelle für jeden Prozess verringern, indem die Seitentabelle weiter in kleinere Tabellen aufgeteilt wird, wodurch die Seitentabelle effektiv ausgelagert wird.

TLB-Nutzung

Da jeder Zugriff auf den Speicher von der virtuellen auf die physikalische Adresse abgebildet werden muss, kann das Lesen der Seitentabelle jedes Mal recht kostspielig sein. Daher wird oft eine sehr schnelle Art von Cache verwendet, der Translation Lookaside Buffer (TLB). Der TLB hat eine begrenzte Größe, und wenn er eine gegebene Anforderung (ein TLB-Fehltreffer ) nicht erfüllen kann, müssen die Seitentabellen manuell (entweder in Hardware oder Software, abhängig von der Architektur) nach der richtigen Abbildung durchsucht werden. Größere Seitengrößen bedeuten, dass ein TLB-Cache der gleichen Größe größere Speichermengen verfolgen kann, wodurch die kostspieligen TLB-Fehltreffer vermieden werden.

Interne Fragmentierung

Selten erfordern Prozesse die Verwendung einer genauen Anzahl von Seiten. Infolgedessen ist die letzte Seite wahrscheinlich nur teilweise voll, wodurch eine gewisse Menge an Speicher verschwendet wird. Größere Seitengrößen führen zu einer großen Menge an verschwendetem Speicher, da mehr potenziell ungenutzte Teile des Speichers in den Hauptspeicher geladen werden. Kleinere Seitengrößen stellen eine bessere Übereinstimmung mit der tatsächlichen Speichermenge sicher, die für eine Zuweisung erforderlich ist.

Nehmen wir als Beispiel an, dass die Seitengröße 1024 KiB beträgt. Wenn ein Prozess 1025 KiB zuweist, müssen zwei Seiten verwendet werden, was zu 1023 KiB ungenutztem Speicherplatz führt (wobei eine Seite 1024 KiB vollständig und die andere nur 1 KiB verbraucht).

Festplattenzugriff

Bei der Übertragung von einer rotierenden Platte wird ein Großteil der Verzögerung durch die Suchzeit verursacht, die Zeit, die benötigt wird, um die Lese-/Schreibköpfe korrekt über den Plattentellern zu positionieren. Aus diesem Grund sind große sequentielle Übertragungen effizienter als mehrere kleinere Übertragungen. Die Übertragung der gleichen Datenmenge von der Festplatte in den Speicher erfordert bei größeren Seiten oft weniger Zeit als bei kleineren Seiten.

Programmgesteuertes Abrufen der Seitengröße

Die meisten Betriebssysteme ermöglichen Programmen, die Seitengröße zur Laufzeit zu ermitteln . Dadurch können Programme Speicher effizienter nutzen, indem sie die Zuweisungen auf diese Größe ausrichten und die gesamte interne Fragmentierung von Seiten reduzieren.

Unix- und POSIX-basierte Betriebssysteme

Unix- und POSIX- basierte Systeme können die Systemfunktion verwenden sysconf(), wie im folgenden Beispiel in der Programmiersprache C veranschaulicht .

#include <stdio.h>
#include <unistd.h> /* sysconf(3) */

int main(void)
{
	printf("The page size for this system is %ld bytes.\n",
		sysconf(_SC_PAGESIZE)); /* _SC_PAGE_SIZE is OK too. */

	return 0;
}

In vielen Unix-Systemen kann das Befehlszeilen-Dienstprogramm getconfverwendet werden. Gibt beispielsweise getconf PAGESIZEdie Seitengröße in Byte zurück.

Windows-basierte Betriebssysteme

Win32- basierte Betriebssysteme wie die der Windows 9x- und Windows NT- Familien können die Systemfunktion GetSystemInfo()von kernel32.dll.

#include <stdio.h>
#include <windows.h>

int main(void)
{
	SYSTEM_INFO si;
	GetSystemInfo(&si);

	printf("The page size for this system is %u bytes.\n", si.dwPageSize);

	return 0;
}

Mehrere Seitengrößen

Einige Befehlssatzarchitekturen können mehrere Seitengrößen unterstützen, einschließlich Seiten, die wesentlich größer als die Standardseitengröße sind. Die verfügbaren Seitengrößen hängen von der Befehlssatzarchitektur, dem Prozessortyp und dem Betriebsmodus (Adressierungsmodus) ab. Das Betriebssystem wählt eine oder mehrere Größen aus den von der Architektur unterstützten Größen aus. Beachten Sie, dass nicht alle Prozessoren alle definierten größeren Seitengrößen implementieren. Diese Unterstützung für größere Seiten (bekannt als "große Seiten" in Linux , "superpages" in FreeBSD und "große Seiten" in der Terminologie von Microsoft Windows und IBM AIX ) ermöglicht "das Beste aus beiden Welten" und reduziert den Druck auf den TLB Cache (manchmal wird die Geschwindigkeit um bis zu 15% erhöht) für große Zuweisungen, während die Speicherauslastung für kleine Zuweisungen immer noch auf einem vernünftigen Niveau gehalten wird.

Seitengrößen zwischen Architekturen
Die Architektur Kleinste Seitengröße Größere Seitengrößen
32-Bit- x86 4 KiB MiB im PSE-Modus , 2 MiB im PAE-Modus
x86-64 4 KiB 2 MiB, 1  GiB (nur wenn die CPU ein PDPE1GBFlag hat)
IA-64 ( Itanium ) 4 KiB 8 KiB, 64 KiB, 256 KiB, 1 MiB, 4 MiB, 16 MiB, 256 MiB
Leistungs-ISA 4 KiB 64 KiB, 16 MiB, 16 GiB
SPARC v8 mit SPARC-Referenz-MMU 4 KiB 256 KiB, 16 MiB
UltraSPARC-Architektur 2007 8 KiB 64 KiB, 512 KiB (optional), 4 MiB, 32 MiB (optional), 256 MiB (optional), 2 GiB (optional), 16 GiB (optional)
ARMv7 4 KiB 64 KiB, 1 MiB ("Abschnitt"), 16 MiB ("Überabschnitt") (definiert durch eine bestimmte Implementierung)

Beginnend mit dem Pentium Pro und dem AMD Athlon unterstützen x86- Prozessoren 4 MiB-Seiten (als Page Size Extension bezeichnet ) (2 MiB-Seiten bei Verwendung von PAE ) zusätzlich zu ihren standardmäßigen 4 KiB-Seiten; neuere x86-64 Prozessoren wie AMD ‚s neuere AMD64 - Prozessoren und Intel ‘ s Westmere und später Xeon können Prozessoren 1 GiB Seiten in langen Modus . IA-64 unterstützt bis zu acht verschiedene Seitengrößen, von 4 KiB bis zu 256 MiB, und einige andere Architekturen haben ähnliche Funktionen.

Obwohl sie in den Prozessoren, die in den meisten modernen Personalcomputern verwendet werden , verfügbar sind, werden größere Seiten nicht allgemein verwendet, außer in groß angelegten Anwendungen, den Anwendungen, die typischerweise in großen Servern und in Rechenclustern gefunden werden , und im Betriebssystem selbst. Im Allgemeinen erfordert ihre Verwendung erhöhte Berechtigungen, die Zusammenarbeit der Anwendung, die die große Zuweisung vornimmt (normalerweise das Setzen eines Flags, um das Betriebssystem nach riesigen Seiten zu fragen) oder die manuelle Konfiguration durch den Administrator; Betriebssysteme können sie in der Regel, manchmal absichtlich, nicht auf die Festplatte auslagern.

Allerdings SGI IRIX hat Allzweck- Unterstützung für mehrere Seitengrößen. Jeder einzelne Prozess kann Hinweise liefern und das Betriebssystem verwendet automatisch die größtmögliche Seitengröße für einen bestimmten Adressraumbereich. Spätere Arbeiten schlugen eine transparente Betriebssystemunterstützung vor, um eine Mischung von Seitengrößen für unveränderte Anwendungen durch präemptive Reservierungen, opportunistische Beförderungen, spekulative Herabstufungen und Fragmentierungskontrolle zu verwenden.

Linux unterstützt seit der 2.6er-Serie riesige Seiten auf mehreren Architekturen über das hugetlbfsDateisystem und hugetlbfsseit 2.6.38 ohne . Windows Server 2003 (SP1 und neuer), Windows Vista und Windows Server 2008 unterstützen riesige Seiten unter dem Namen Large Pages. Windows 2000 und Windows XP unterstützen intern große Seiten, stellen sie jedoch nicht Anwendungen zur Verfügung. Ab Version 9 unterstützt Solaris große Seiten auf SPARC und x86. FreeBSD 7.2-RELEASE bietet Superpages. Beachten Sie, dass bis vor kurzem in Linux Anwendungen geändert werden mussten, um riesige Seiten zu verwenden. Der Kernel 2.6.38 hat die Unterstützung für die transparente Verwendung riesiger Seiten eingeführt. Auf Linux-Kernels, die transparente riesige Seiten unterstützen, sowie FreeBSD und Solaris nutzen Anwendungen automatisch riesige Seiten, ohne dass Änderungen erforderlich sind.

Siehe auch

Verweise

Weiterlesen

  • Dandamudi, Sivarama P. (2003). Grundlagen der Computerorganisation und des Designs (1. Aufl.). Springer . S. 740–741. ISBN 0-387-95211-X.