Zum Inhalt springen

Konventioneller Speicher

aus Wikipedia, der freien Enzyklopädie

Vorlage:Hinweisbaustein Als Konventioneller Speicher wird der mit dem IBM Personal Computer 1981 eingeführte DOS-Speichertyp bezeichnet. Im ursprünglichen Design des IBM PC ist der maximal mögliche Speicherbereich, der mit dem 16-Bit-Prozessor Intel 8088 adressierbar ist, auf 1 MiB begrenzt. Mit Einführung des IBM PC/AT, dessen 80286-Prozessor bereits 16 MiB adressieren kann, wurde der im 8086-kompatiblen Betriebsmodus, retronym {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) genannt, weiterhin begrenzte Speicherbereich unter DOS retronym als Konventioneller Speicher bezeichnet. Bei IBM-PC-kompatiblen Computern unterteilt er sich in die ersten 640 KiB (1 KiB = 1024 Byte) Arbeitsspeicher, jenen u. a. für Anwendungsprogramme von DOS zur Verfügung gestellten Teil, und weiteren 384 KiB für Hardwareadressen reservierten Speicher, der auch als {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) bezeichnet wird und ab rund 1990 in Form von einzelnen {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) als eigener DOS-Speichertyp teilweise nutzbar gemacht wurde.<ref></ref>

In der Praxis versteht man unter Konventionellem Speicher nur den zusammenhängend als Arbeitsspeicher nutzbaren Teil des Adressraums, beim IBM PC also die ersten 640 KiB.<ref>Dietrich Franz, Rudiger Mattes: Das Wichtigste zu MS-DOS 5.0. Gabler, Wiesbaden 1992, ISBN 978-3-409-19737-3, 2.7.7 Arbeitsspeicherbelegung anzeigen (MEM), S. 94, Abb. 56: MEM-Befehl ohne Parameter: Konventioneller Speicher (Basisspeicher) Der Basisspeicher beginnt bei der Adresse 0 und ist 640 KB groß. Er ist vorwiegend für die Ausführung von Programmen und die Vorhaltung von Nutzdaten bestimmt. Einen Teil des Basisspeichers belegt das DOS-System, die Menge hängt von der DOS-Installation ab. … Upper Memory Upper Memory (384 KB), vom MEM als ‚hoher Speicher‘ bezeichnet, nennt man den Adreßraum zwischen dem Basisspeicher (640 KB) und der traditionellen Grenze der Speicheradressen von DOS, das ist 1 MB.</ref> U. a. MS-DOS war seit den frühen 1980er Jahren auch auf anderen PCs, die nicht IBM-kompatibel sind, verfügbar, wo der nutzbare Speicherbereich teils größer ist, etwa beim Sirius 1 mit maximal 896 KiB RAM.<ref>Bernd Leitenberger: Der Sirius 1 und IBM PC – ein Vergleich. In: Bernd Leitenbergers Web Site. 1. November 2012, abgerufen am 26. Januar 2026: „896 KByte RAM (voll nutzbar!)“</ref>

Die 640-KiB-Grenze

Anfang der 1980er Jahre wurde beim Entwurf der Architektur des ersten „IBM Personal Computer“, Modell 5150, ein Adressraum von 640 KiB für den Arbeitsspeicher vorgesehen, da dies als ausreichend für den typischen Benutzer empfunden wurde. Es war das Zehnfache des Adressraums der meisten anderen damals am Markt befindlichen Kleincomputer, der erste PC von IBM wurde anfänglich ebenfalls mit maximal 64 KiB (65536 Byte) tatsächlich installiertem Arbeitsspeicher ausgeliefert. Zudem erlaubte der eingesetzte Prozessor Intel 8088 nur einen maximalen Adressraum von einem Megabyte, genauer: 1 MiB bzw. 1024 KiB; die oberen 384 KiB dieses Adressraums, retronym als oberer Speicherbereich (UMA, für {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) bezeichnet, wurden für ROM und {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) reserviert, sodass 640 KiB an Adressraum für verbauten RAM als Arbeitsspeicher bzw. retronym „konventionellen Speicher“ übrig blieben. Niemand rechnete damals damit, dass diese Architektur so lange Bestand haben würde, bis diese Grenze ausgeschöpft wäre, waren doch die meisten anderen damaligen Rechnerarchitekturen nach wenigen Jahren wieder vom Markt verschwunden.

Die für Systemzwecke reservierten oberen 384 KiB des Adressraums 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.

Geschichte

Bereits in den ersten Jahren konnte sich die IBM-PC-Architektur mit dessen Betriebssystem PC DOS bzw. MS-DOS etablierten, was u. a. Killerapplikationen und der Verfügbarkeit von Nachbauten geschuldet war. Und so stellte sich im Laufe der Zeit diese Grenze immer mehr als Hindernis dar, da sie bestehen blieb, als die IBM-kompatiblen PCs mit immer mehr physischem Arbeitsspeicher (RAM) bestückt wurden. Skriptfehler: Ein solches Modul „Vorlage:Siehe auch“ ist nicht vorhanden.

Für bestimmte Anwendungen, beispielsweise Datenbanken, bestand schon früh Bedarf an mehr Arbeitsspeicher für Daten. Es bildete sich daher ein Markt für Speichererweiterungskarten – dieser als „{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)“ bezeichnete Erweiterungsspeicher wurde 1985 per {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) für DOS standardisiert. Der limitierende Faktor von EMS ist die Notwendigkeit, den Speicher aufgeteilt in einzelne Speicherseiten nutzen zu müssen: die Erweiterungskarte verwendet ihren im Design des IBM PC vorgesehenen Speicherbereich zwischen 640 KiB und 1 MiB (oberer Speicherbereich bzw. UMA), um per {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) ein sogenanntes „Speicherfenster“ einzublenden. Somit sind immer 64 KiB aus dem Erweiterungsspeicher einsehbar. Diese „Fenster in den Erweiterungsspeicher“ muss für den Zugriff auf weitere Daten jeweils verschoben werden. Das Problem von EMS-Speicher ist, dass er dadurch nur für Daten geeignet ist, ein Programm hingegen kann diesen Speichertyp nicht als Arbeitsspeicher nutzen.

Skriptfehler: Ein solches Modul „Vorlage:Siehe auch“ ist nicht vorhanden.

Mit dem Intel-80286-Prozessor des IBM PC/AT von 1984 konnte im 16-Bit-{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) bereits ein Adressraum von 16 MiB (16384 KiB) angesprochen werden. Um jedoch die Kompatibilität zur ursprünglichen mit dem IBM PC von 1981 begründeten Plattform nicht zu verlieren, musste das zu diesem Zeitpunkt bereits etablierte PC-kompatible DOS weiterhin die ursprüngliche Speicheraufteilung des nun retronym als {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) bezeichneten 8088/8086-kompatiblen Betriebsmodus beibehalten. Das bedeutete nicht nur, dass Speicher über 1 MiB („{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)“, 1988 per {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) standardisiert) nicht ohne Weiteres nutzbar war, sondern auch, dass vorhandener RAM im oberen Speicherbereich (UMA, über 640 KiB bis zur 1-MiB-Grenze) per Design brach liegt, da diese Speicheradressen weiterhin reserviert sind (für das BIOS und den Grafikspeicher, aber auch z. B. für EMS-Speichererweiterungskarten oder auch die Firmware diverser Controllerkarten u.d.gl.).

Nicht nur IBM war durchaus bewusst, dass das Speicherproblem von DOS auf dem IBM PC und dazu kompatiblen Computern auch mit allen Erweiterungen nicht gelöst werden könnte. Microsoft hatte mit Xenix 286 bereits ein PC-Unix für den Intel 80286 entwickelt, das von IBM als „IBM PC Xenix 1.0“ 1984 gemeinsam mit dem IBM PC/AT vorgestellt wurde.<ref>Michal Necasek: Forward Compatibility, Landmines. (Blog) In: OS/2 Museum. 20. September 2014, abgerufen am 30. April 2026 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), IBM Personal Computer XENIX 1.0): „The PC/AT and PC XENIX 1.0 were in fact announced on the same day.“</ref> Unter dem im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) laufenden Betriebssystem gibt es keinen limitierenden konventionellen Speicher, da alle Programme darauf ebenso im gleichen Modus laufen und linearen Speicherzugriff auf den vom Betriebssystem verwalteten gesamten adressierbaren Speicher haben. Den IBM PC/AT gab es damals mit maximal 4 MiB RAM in der Endausbaustufe (512 KiB in Speichermodulen und einer Speichererweiterungskarte mit maximal 3,5 MiB).

Auch unter PC-kompatiblem DOS ist der Zugriff auf den zusätzlichen Speicherbereich zwar im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) prinzipiell möglich, allerdings gibt es Fallstricke beim Wechsel in den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) und wieder zurück in den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value). Beispielsweise wird damit die Ausführung von Programmen im konventionellen Speicher und der Zugriff auf deren Funktionen (wie BIOS- oder DOS-Funktionen, aber auch Treiber und TSR-Programme im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) unterbrochen, sodass ein ständiger Wechsel zwischen beiden Modi nötig ist – der beim 80286 jedoch gar nicht vorgesehen ist und nur über den Umweg des Zurücksetzens des Prozessors möglich ist (ein Hack), der sehr zeitintensiv ist, sodass die Ausführungsgeschwindigkeit darunter leidet. Auf den ersten 80286-Systemen lag unter DOS daher vorerst jeglicher RAM oberhalb des konventionellen Speichers brach. Um nicht komplett ungenutzt zu sein, konnte der zusätzliche Speicher ab PC DOS 3.0 (das zusammen mit dem PC/AT veröffentlicht wurde) als RAM-Disk VDISK.SYS verwendet werden.

Das Limit war jedoch Mitte der 1980er Jahre noch eher theoretisch, denn obwohl kompatible PCs damals bereits mit mehr als 1 MiB Arbeitsspeicher ausgestattet werden konnten, wurden die meisten Systemen noch mit weniger als 640 KiB RAM verkauft: der PC/AT etwa wurde 1984 mit maximal 512 KiB RAM angeboten. Natürlich gab es Nischen für High-End-Systeme, und auch teure High-End-IBM-kompatible-PCs konnten mit entsprechender (ebenso High-End-)Software mehr RAM nutzen, wie eben z. B. PC-Unix-Systeme. Eine Speichererweiterungssteckkarte für den IBM PC/AT ermöglicht etwa bis zu 4 MiB RAM, der jedoch 1984 nur unter Xenix 286 überhaupt nutzbar war.

Währenddessen wurde MS-DOS zum dominierenden PC-Betriebssystem, für das die meisten Anwendungen und Programme geschrieben wurden. In dieser Situation setzten in der zweiten Hälfte der 1980er Jahre verschiedene Firmen den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) für DOS um, als sogenannten DOS-Extender, trotz aller Nachteile. Auf diese Weise waren DOS-Programme möglich, die im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) laufen und daher den erweiterten Speicher als Arbeitsspeicher nutzen können. Diese anfangs zueinander inkompatiblen DOS-Extender wurden erst Ende der 1980er Jahre standardisiert.

Skriptfehler: Ein solches Modul „Vorlage:Siehe auch“ ist nicht vorhanden.

Auch auf der Seite der Hardware gab es Anpassungen speziell für die PC-Plattform mit MS-DOS. So entwickelten beispielsweise einige Hersteller kompatibler PC-Systeme Chipsätze für IBM-PC-kompatible Hauptplatinen, die zumindest einen Teil des sonst brach liegenden Speichers auch unter DOS und im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) nutzbar machen können. Ein Beispiel dafür ist der C&T-NEAT-Chipsatz, der per {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) den RAM im reservierten oberen Speicherbereich zwischen Adresse Vorlage:Monospacehex und Vorlage:Monospacehex (der {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value), UMA) an einer höheren Adresse (über 1 MiB) einblenden kann. So werden die 384 KiB RAM, die normalerweise vom reservierten oberen Speicherbereich verdeckt sind, als (zusätzlicher) {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) nutzbar.

Auch bei der Entwicklung des Intel 80386 wurde die Situation unter DOS berücksichtigt, denn dem „386er“ wurde nicht nur eine Speicherverwaltungseinheit (MMU, für {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) spendiert, sondern auch der {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value). In diesem ist die virtuelle Speicherverwaltung in Hardware umgesetzt, sodass DOS-Programme in einem virtuellen {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) jeweils ihren vollkommen isolierten konventionellen Speicher erhalten. Auch kann mithilfe der Speicherverwaltungseinheit der ungenutzte Teil des oberen Speicherbereichs (UMA) auf RAM umgebogen werden, was aber erst ab DOS 5.0 (eingeführt in DR DOS 5.0, übernommen in MS-DOS/PC DOS 5.0) per UMBs ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) kontrolliert möglich ist.

Auf der Software-Seite wurde ein Programmiertrick entdeckt, der im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) ab dem 80286 die ersten 65520 Bytes über der 1-MiB-Grenze auf 80286-Systemen auch im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) ansprechbar macht. Dieser Speicherbereich ist jedoch nur durch Umschaltung der A20-Adressleitung nutzbar, was für Betriebssystem und Programme problematisch ist, da sowohl die Schaltung als auch der Status der A20-Leitung in DOS nicht standardisiert sind. Dennoch erlaubte dies die Nutzung dieses fast 64 KiB großen „hohen Speichers“ (HMA, für {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) für ausgewählte Software, beispielsweise Teile von Windows /386 und DOS 5.0 (gemeinsam mit UMBs eingeführt in DR DOS 5.0 und übernommen in MS-DOS/PC DOS 5.0).

Die ursprüngliche Speicheraufteilung des IBM Personal Computer Modell 5150 von 1981 bleibt somit auch im retronym als {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) bezeichneten Betriebsmodus, in dem das etablierte Betriebssystem MS-DOS der Kompatibilität geschuldet weiterhin läuft, erhalten. Anders als unter {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)-Betriebssystemen wie PC-Unix (wie Xenix) oder OS/2, die den Speicher linear ansprechen, ist unter DOS ein kompliziertes Speichermanagement und unterschiedliche Speichertypen nötig, um mehr als das ursprüngliche Limit von 640 KiB konventionellen Speicher nutzen zu können. Für DOS-Programme, die nicht per DOS-Extender im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) laufen, bleibt der konventionelle Speicher die praktische Einschränkung.

Speicheroptimierung

Da für DOS-Programme im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) der konventionelle Speicher den realen Arbeitsspeicher begrenzt, ist ein größtmöglich freier konventioneller Speicher unter DOS wesentlich. Im Laufe der Entwicklung wurde PC-kompatibles DOS daher auf Speicheroptimierung getrimmt. Während die ersten DOS-Versionen noch vollständig im konventionellen Speicher geladen werden, versuchen spätere Versionen – vorrangig ab DOS 5.0 – Teile der nötigen Software auszulagern. So kann sich ein Teil des DOS-Kernels und ausgesuchte Treiber (etwa der Treiber für das Tastaturlayout, Vorlage:Monospace, siehe Liste von DOS-Kommandozeilenbefehlen #K) in die {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) verlagern, was deswegen gut funktioniert, weil DOS selbst die Schaltung der A20-Leitung steuert. Auf 386-Systemen kann DOS die freien Teile des für Systemzwecke reservierten oberen Speicherbereichs (384 KiB UMA) in freie „{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)“ (UMBs) aufteilen und Programmen zur Verfügung stellen. Neben DOS-eigenen Systemprogrammen und Treibern nutzen vor allem TSR-Programme UMBs und können so aus dem konventionellen Speicher ausgelagert werden.

Die Speicheroptimierung ist nicht trivial und auf jedem IBM-PC-kompatiblen System anders. Daher wurde in späteren DOS-Versionen meist ein Systemprogramm mitgeliefert, das die Speicheroptimierung automatisiert vornimmt und somit für Benutzer vereinfacht, wie beispielsweise Vorlage:Monospace (siehe Liste von DOS-Kommandozeilenbefehlen #M) von MS-DOS ab Version 6.0, Vorlage:Monospace von PC DOS ab Version 6.1 und Vorlage:Monospace von DR DOS ab Version 6.0. Auch in Speichermanagern von Drittanbietern, wie QEMM386 oder 386Max, sind vergleichbare Programme enthalten, die auch frühere DOS-Versionen (denen diese Programme fehlen) unterstützen und zudem meist noch mehr konventionellen Speicher „freischaufeln“ können als die in den DOS-Versionen enthaltenen Varianten.

DOS-Extender

Mit Hilfe von so genannten DOS-Extendern lässt sich die 640-KiB-Speichergrenze komplett aufheben, wenn genügend erweiterter Speicher (über der 1-MiB-Grenze) vorhanden ist. Dies gilt jedoch nur für einzelne Programme, die für den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) angepasst oder neu programmiert werden mussten. Die Verbreitung begann bereits Ende der 1980er Jahre vor allem bei professionellen Anwendungen, wo etwa Lotus 1-2-3 R3.0 386 (1988) und AutoCAD R11 386 (1990) einen DOS-Extender verwenden, der auf VCPI basiert. Da diese Programme auf Systemen ohne (genügend) erweiterten Speicher nicht lauffähig sind, wurden anfangs zwei Versionen bereitgestellt: so gab es um 1990 nicht nur von Lotus 1-2-3 und AutoCAD in derselben Version beide Varianten, also auch eine klassische {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)-Version, die dann auch auf PCs mit weniger RAM oder mit EMS-Speichererweiterungskarte funktioniert.

Nach 1990 setzte sich das DOS Protected Mode Interface (DPMI) als Standard für DOS-Extender durch, weil es im Gegensatz zu VCPI mit Windows und OS/2 kompatibel ist. Die Verbreitung stieg auch dank der billiger werdenden Lizenzen für DOS-Extender stark an, und immer mehr Programme und auch Computerspiele setzten auf DPMI. Eines der ersten PC-Spiele, das diese Technik verwendet hat, war Doom von id Software.

Situation bei 32/64-Bit-Betriebssystemen

Windows 9x bootet nur, wenn genügend konventioneller Speicher frei ist, danach spielt er keine Rolle mehr, außer für DOS-Anwendungen, die direkt unter dem mitgelieferten MS-DOS gestartet werden – was für Programme, die in einem DOS-Fenster unter Windows laufen, nicht zutrifft. Bei modernen 32- und 64-Bit-Versionen von Windows NT hat die 640-KiB-Speichergrenze für Anwendungen keine Bedeutung mehr, da der Speicherzugriff grundsätzlich linear erfolgt (auf der x86-Architektur im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)).

Siehe auch

Einzelnachweise

<references />