Speicherverwaltung. RAM, XMS und EMS leicht erklärt.


Dieses Tutorial basiert auf einer Recherche die ich schon vor einigen Jahren durchgeführt habe. In unserer schnelllebigen Zeit, insbesondere auf dem Computersektor, klingen die hier gemachten Aussagen zum Teil wohl etwas lustig. Sie sind jedoch für QuickBasic Programmierer die noch auf Windows 9x Plattformen, oder vielleicht sogar noch auf DOS-Plattformen arbeiten, immer noch interessant und hilfreich. Nicht zuletzt soll dieses Tutorial nur eine grundsätzliche Einführung in diese Thematik sein. Ausführlichere, weiterführende, präzisere und vor allem aktuellere Informationen sollten in diversen Fachbüchern nachgeschlagen werden.


Der Speicheraufbau (RAM)

Der PC kam zunächst mit einer Speicherausstattung von 16 KByte auf den Markt, die man auf der Hauptplatine bis zu 64 KByte ausbauen konnte. Außerdem vertrieb IBM-Speichererweiterungskarten, die jeweils 64 KByte faßten und in einem der fünf Erweiterungssteckplätze plaziert wurden. Maximal drei dieser Karten konnten installiert werden, um den PC auf die damals gigantische Speichermenge von 256 KByte aufzurüsten.

Die Entwickler des PCs wußten jedoch, daß das nicht das Ende der Entwicklung sein würde und legten deshalb ein Speicher-Layout fest, daß den Ausbau des RAM-Speichers bis zu einer Marke von 640 KByte erlaubte. Sie wähnten sich dabei zukunftsweisend, wurden von der Zukunft aber nur allzu schnell überholt, wie jeder DOS-Anwender heute weiß.

Neben dem RAM planten sie in dem 1 MByte umfassenden Adreßraum der 8088-CPU Raum für den RAM-Bereich der Video-Karten (den sg. Video-RAM), für das ROM-BIOS und einige ROM-Erweiterungen ein. Ob sich hinter einer Speicherstelle RAM oder ROM befindet, ist für den Prozessor gleichgültig, mit dem einzigen Unterschied, daß sich Speicherbereiche im ROM nun einmal nicht beschreiben lassen. Der Prozessor lehnt auch nicht ab, Speicherstellen anzusprechen, die physikalisch gar nicht vorhanden sind. Denn die Tatsache, daß der Prozessor bis zu 1 MByte Speicher verwalten kann, bedeutet noch lange nicht, daß sich hinter jeder Speicheradresse auch wirklich ein RAM- oder ROM-Baustein verbirgt.

Wie die folgende Tabelle zeigt, erfolgte die Planung des Speicherlayouts auf Basis von 64-KByte-Segmente, denn der 8088 und seine Nachfolger verwalten den Speicher in Blöcken dieser Größe. 16 dieser Blöcke faßt der Adreßraum von 1 MByte.

Die ersten zehn Speichersegmente sind für das Hauptspeicher-RAM reserviert, wodurch es in seiner Größe auf maximal 640 KByte beschränkt ist. Dem Speichersegment 0 kommt dabei eine besondere Rolle zu, da es wichtige Daten und Routinen des Betriebssystems aufnimmt.

klicke hier um die Tabelle einzublenden

Auf den RAM-Speicher folgt das Speichersegment A, das mit einer EGA- und VGA-Grafik-Karte installiert wird. Es dient als Speicher für den Bildschirmaufbau in den verschiedenen Grafikmodi dieser Karten.

Das Speichersegment B ist den monochromen Videokarten MDA und Hercules sowie der Farbgrafikkarte CGA zugeordnet. Beide teilen sich dieses Segment als Speicher für den Bildschirmaufbau, wobei die monochrome Karte die unteren 32 KByte und die Color-Karte die oberen 32 KByte dieses Segments in Anspruch nimmt. Jede Karte installiert dabei allerdings nur soviel Speicher, wie für den Bildschirmspeicher erforderlich ist. Bei der monochromen Karte sind es z.B. nur vier KByte und bei der CGA-Karte auch nicht mehr als 16 KByte.

Die Speichersegmente hinter dem Video-RAM werden nicht mehr mit RAM, sondern mit ROM belegt, wobei das C-Segment den Anfang macht. In diesem Segment sind bei einigen Rechnern BIOS-Routinen untergebracht, die nicht Teil des ursprünglichen BIOS-Kerns sind. Beim XT sind dies zum Beispiel die Routinen zur Unterstützung der mit ihm eingeführten Festplatte.

Die Segmente D und E waren ursprünglich für ROM-Cartridges vorgesehen, wie man sie bei Homecomputer- und Telespielen zur Einbringung von Software in das System nutzt. Davon wurde allerdings nie richtig Gebrauch gemacht, so daß dieser Bereich fast immer ungenutzt blieb und heutzutage als zusätzlicher RAM oder für die Einblendung von EMS-Speicher verwandt wird.

Das Segment F enthält schließlich die eigentlichen BIOS-Routinen, den Ur-Lader des Systems, sowie das nur noch bei alten Rechnern vorhandene ROM-BASIC.


Einhaltung dieses Speicherlayouts

Die Hardware des PCs ist nicht an ein bestimmtes Speicherlayout gebunden, schon gar nicht an das von IBM, und trotzdem setzte IBM bereits mit dem ersten PC den Maßstab, der bis heute von allen Anbietern eingehalten wird. Das ist jedoch hauptsächlich eine Frage der Software, denn es sind das BIOS und das DOS, die sich auf die Lage bestimmter Speicherbereiche (z.B. des Video-RAM) eingestellt haben. Zementiert wurde dieses Layout zusätzlich durch jedes Programm, das auf den Markt kam, denn auch Programme gehen oft von bestimmten Voraussetzungen über den Aufbau des Speichers aus und arbeiten nicht einwandfrei, wenn diese sich als falsch erweisen.


Der Erweiterungsspeicher

Als der Urvater aller PCs um das Jahr 1980 herum in den Entwicklungslabors der IBM das Licht der Welt erblickte, waren seine Möglichkeiten der Zeit noch weit voraus. Das galt auch für die Größe des Hauptspeichers, die mit maximal 640 KByte so groß ausgefallen war, daß sich wohl noch niemand so recht vorstellen konnte, was man damit anfangen sollte. Dementsprechend wurden die ersten PCs noch gar nicht voll bestückt, sondern zunächst nur mit 64, später mit 128 und schließlich mit 256 KByte Hauptspeicher ausgestattet. Das aber ist angesichts der Schnellebigkeit der Computer-Branche schon fast eine Ewigkeit her, und längst haben wir uns an Begriffe wie "RAM-Krise" oder die "640-KByte-Barriere" gewöhnt, die allesamt nichts Gutes verheißen. Ist hier etwa schon das Ende des Fortschritts auf dem Software-Sektor abzusehen, weil immer leistungsfähigere Programme naturgemäß auch immer mehr Speicher verschlingen, der aber gar nicht mehr zur Verfügung gestellt werden kann? Wo also liegt das Problem?

Das Stichwort heißt wieder einmal Kompatibilität. Damit alle Programme vom einfachsten XT bis hin zum superschnellen Rechner ablaufen können, müssen nicht nur die Prozessoren kompatibel sein, sondern auch gewisse andere Richtlinien erfüllt werden, und das bezieht eben auch den Aufbau und die Struktur des Speichers mit ein. Das wäre nicht weiter schlimm, wenn man sich hier an den Anforderungen moderner Applikationen orientieren würde, doch auch hier definiert noch der Standard aus dem Jahre 1980 die Grenzen des Machbaren.

klicke hier um die Tabelle einzublenden

Wie die obige Abildung zeigt, ist das Korsett ziemlich eng, denn nur die ersten 640 KByte können für RAM-Speicher genutzt werden. Alles, was danach folgt, ist für das Video-RAM, Hardware-Erweiterungen und das BIOS reserviert.

Zwar läßt sich der Speicher leicht über die 1-MByte-Grenze hinaus erweitern doch läßt sich dieser Speicher unter DOS nicht ansprechen. DOS nämlich arbeitet im sogenannten Real Mode des Prozessors, der keinen Zugriff auf Speicher jenseits der 1 MByte möglich macht.

Erweitern läßt sich der Speicher mit sogenanntem Expanded (EMS) und Extended Memory (XMS), die aufgrund ihrer phonetischen Ähnlichkeit oft verwechselt werden, aber grundsätzlich verschiedene Technologien darstellen.

Um viele MByte läßt sich der Speicher mit ihrer Hilfe aufstocken, doch kann dieser Speicher nur dann sinnvoll eingesetzt werden, wenn die Software speziell auf seine Nutzung abgestellt ist.

Expanded Memory nach dem EMS-Standard

Extended Memory (XMS)