Konventioneller Speicher

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Als Konventioneller Speicher werden die ersten 640 KiB (1 KiB = 1024 Byte) Arbeitsspeicher eines IBM-PC-kompatiblen Rechners bezeichnet.

Die 640-KiB-Grenze[Bearbeiten]

Die 640-KiB-Grenze ist ein Relikt aus DOS-Zeiten. Anfang der 1980er Jahre wurde beim Entwurf der Architektur des IBM-PCs nur ein Adressraum von 640 KiB für Arbeitsspeicher vorgesehen, da dies als ausreichend für den typischen Benutzer empfunden wurde – es war immerhin das Zehnfache des Adressraums der meisten anderen damals am Markt befindlichen Kleincomputer – und das erste PC-Modell, der IBM 5150, wurde anfänglich mit maximal 64 KiB (65536 Byte) tatsächlich installiertem Arbeitsspeicher ausgeliefert. Zudem erlaubte der eingesetzte Prozessor Intel 8088 ohnehin nur einen maximalen Adressraum von 1024 KiB; die oberen 384 KiB wurden für ROM und Memory Mapped I/O reserviert, so dass 640 KiB Adressraum für den RAM-Arbeitsspeicher übrig blieben. Niemand rechnete damals damit, dass die IBM-PC-Architektur so lange Bestand haben würde, bis diese Grenze ausgeschöpft werden würde; waren doch die meisten anderen damaligen Rechnerarchitekturen nach wenigen Jahren wieder vom Markt verschwunden.

Die PC-Architektur überdauerte jedoch und im Laufe der Zeit stellte sich diese Grenze immer mehr als Hindernis dar, da sie bestehen blieb, als die PCs mehr RAM besaßen. Mit dem Intel-80286-Prozessor des IBM AT von 1984 konnte zwar im Protected Mode ein Adressraum von immerhin 16 MiB (1 MiB = 1024 KiB) angesprochen werden, die PC-Architektur musste jedoch die ursprüngliche Speicheraufteilung aus Kompatibilitätsgründen beibehalten. Somit war der RAM-Speicher an den Adressen A0000hex bis FFFFFhex nicht ohne Weiteres nutzbar. Einige PC-Chipsätze unterstützten dafür ein so genanntes Remapping, das diesen Speicher an höhere Adressen einblendete. Wie der ganze Speicherbereich oberhalb der 1-MiB-Grenze war ein derart umgelagerter Speicher im Real Mode nicht nutzbar (mit Ausnahme der ersten 65520 Bytes, der so genannten High Memory Area). Ein Wechsel aus dem Real Mode in den Protected Mode veränderte das Verhalten der CPU aber so stark, dass keine Kompatibilität mehr gegeben war; das damals populäre Betriebssystem MS-DOS (und seine Nachahmer) und die darunter ausgeführten Anwendungen mussten deshalb weiterhin im Real Mode laufen. DOS bot jedoch spezielle Funktionen, um diesen Speicher zumindest als Datenspeicher anzusprechen (siehe XMS); dafür wurde der Prozessor vom Betriebssystem zeitweise in den Protected Mode geschaltet und dann ein Datenblock aus dem konventionellen Speicher in den Bereich über 1 MiB kopiert oder umgekehrt, danach folgte eine Rückschaltung in den Real Mode. Real-Mode-Programmcode konnte im XMS-Speicher somit zwischengelagert, jedoch nicht direkt dort ausgeführt werden.

Ab dem 386er Prozessor existierte ein dritter Betriebsmodus, der Virtual 8086 Mode, der es gestattete, über die virtuelle Speicherverwaltung des Protected Mode die von der PC-Architektur vorgegebene Aufteilung des physischen Adressraums zu überwinden und den gesamten 1-MiB-Adressraum, der von DOS aus sichtbar war, auf physisch vorhandenes RAM abzubilden, wobei aber im Gegensatz zum normalen Protected Mode die Kompatibilität zum Real Mode gewahrt blieb. Somit konnten diejenigen Teile des Bereichs zwischen der 640-KiB-Grenze und der 1-MiB-Grenze, die nicht für die Adressierung von Hardware benötigt wurden, für Programm- und Datenspeicher genutzt werden. In MS-DOS gab es hierfür wieder eigene Speicherverwaltungsfunktionen (siehe UMB). Da normale DOS-Programme hiervon jedoch nur selten Gebrauch machten, wurde dieser Bereich vorwiegend vom DOS-Kernel selbst und von ladbaren Gerätetreibern genutzt. Diese belegten somit nicht mehr den knappen und somit kostbaren Speicherbereich unterhalb der 640-KiB-Grenze, so dass dort mehr für die Anwendungsprogramme frei blieb.

Speicheroptimierung[Bearbeiten]

Die für Systemzwecke reservierten oberen 384 KiB des Adressraums der 8086er-CPU erwiesen sich, anders als die 640 KiB für Anwenderprogramme, als überdimensioniert; sie wurden kaum jemals komplett ausgenutzt, meist blieben davon zwischen 128 und 256 KiB frei. In dieser Ausgangslage entwickelte sich die Idee, den unbenutzten Teil der 384 KiB zum Beispiel für Gerätetreiber zu verwenden, was ab 1990 mit der Veröffentlichung von MS-DOS 5.0 möglich wurde.

Indem Gerätetreiber oder TSR-Programme in diesen sogenannten Upper Memory Block geladen werden (oder, wenn unnötig, ganz aus dem Speicher entfernt), steht durch diese Treiber/Programme benötigter Speicherplatz wieder als konventioneller Speicher zur Verfügung, d.h. von den 640 KiB bleibt mehr Speicher für Anwendungsprogramme übrig. Zur Vereinfachung können Batchdateien oder Bootdisketten erstellt werden, die die benötigten Treiber und Einstellungen beinhalten. Die benötigten Angaben dazu befanden sich in den (Spiele-)Dokumentationen. In späten Versionen von MS-DOS wurde ein Tool namens MemMaker (RamBoost in PC DOS) mitgeliefert, das diese Optimierung teilweise automatisieren konnte.

DOS Protected Mode Interface[Bearbeiten]

Mit Hilfe von so genannten DOS-Extendern kann die 640-KiB-Speichergrenze umgangen werden. Eines der ersten Computerspiele, das diese Technik verwendet hat, war Doom von id Software.

Situation bei 32/64-Bit-Betriebssystemen[Bearbeiten]

Windows 9x bootet nur, wenn genügend konventioneller Speicher frei ist, danach spielt der konventionelle Speicher (außer wenn DOS-Anwendungen gestartet werden) keine Rolle mehr. Bei modernen 32/64-Bit-Betriebssystemen, wie beispielsweise Microsoft Windows NT basierenden Betriebssystemen, hat die 640-KiB-Speichergrenze für Anwendungen keine Bedeutung mehr, da der Speicherzugriff grundsätzlich im Protected Mode erfolgt. Zwar findet sich auf der untersten Ebene der physischen Adressen bis heute ein „Loch“ im Speicherbereich zwischen 640 KiB und 1024 KiB, diese Tatsache muss aber nur noch Bootloader- und Betriebssystem-Programmierern bewusst sein, da sie für Anwendungsprogramme unsichtbar ist. Allerdings können diese 384 KiB Arbeitsspeicher nicht genutzt werden, was aber bei modernen Rechnern vernachlässigbar ist.

Modernes äquivalentes Problem[Bearbeiten]

Bei der Verwendung von 4 GiB (1 GiB = 1024 MiB) oder mehr Speicher kehrt das Grundproblem in Gestalt einer 4-GB-Grenze zurück: der maximal mit 32 Bit adressierbare Adressraum beträgt 4 GiB, worin wieder außer dem RAM auch noch Hardwareregister erscheinen müssen. Die Aufteilung des Adressraumes in System-RAM und Adressbereichen für Zusatzhardware ist jedoch dynamisch und abhängig vom Chipsatz auf der Hauptplatine und der zusätzlich vorhandenen Hardware, etwa PCI-Karten. Damit variiert der nutzbare Hauptspeicher bei 4 GiB Speicherausbau zwischen maximal ca. 2,75 bis 3,5 GiB Speicher.

Sofern das BIOS und der Chipsatz dies unterstützt, kann der Hauptspeicher, der von Hardwareressourcen überdeckt wird, auf Adressen jenseits der 4-GiB-Grenze umgemappt werden. Beherrscht sowohl das Betriebssystem als auch der Prozessor PAE, kann auf diesen Speicher jenseits der 4-GiB-Grenze zugegriffen werden.

Allerdings ist in allen 32-Bit-Betriebssystemen der je Prozess ohne „Tricks“ nutzbare Adressraum prinzipbedingt auf 4 GiB beschränkt, wovon je nach System 1 bis 2 GiB für das Betriebssystem selbst gebraucht werden, so dass maximal 2 bis 3 GiB Speicher wirklich pro Prozess nutzbar sind. Das gilt auch für 32-Bit-Anwendungen, die in einem 64-Bit-Betriebssystem ausgeführt werden (siehe z. B. WOW64).

Siehe auch[Bearbeiten]