Expanded Memory Specification

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen (beispielsweise Einzelnachweisen) ausgestattet. Die fraglichen Angaben werden daher möglicherweise demnächst entfernt. Bitte hilf der Wikipedia, indem du die Angaben recherchierst und gute Belege einfügst. Näheres ist eventuell auf der Diskussionsseite oder in der Versionsgeschichte angegeben. Bitte entferne zuletzt diese Warnmarkierung.

Die Expanded Memory Specification (kurz: EMS genannt), ist eine Software-Schnittstelle zum Zugriff auf so genanntes expanded memory (oft unglücklich zu „Expansionsspeicher“ eingedeutscht) auf einem x86-kompatiblen PC im Real Mode.

Sie war für PC auf Basis von Prozessoren der Typen 8088, 8086, 80186 und ggf. auch 80286 gedacht. Mit den 8088, 8086 und 80186 stand nur ein Adressraum von maximal 1 MB in direkter Adressierung (also ohne Speicher-Management-Funktionen = sog. Real Mode) zur Verfügung. Diese Einschränkung galt auch noch für Nachfolgeprozessoren, wenn sie im Real Mode betrieben werden.

Mit EMS konnte die Begrenzung auf 1 MB physischen Speicher umgangen werden, indem weiterer Speicher in kleinen Seiten an einer bestimmten (normalerweise nicht mit RAM hinterlegten) Stelle im 1 MB Adressraum eingeblendet wurde.

Heutzutage hat EMS keine praktische Bedeutung mehr, da moderne Protected-Mode-Betriebssysteme auf diese Speichererweiterung nicht mehr angewiesen sind und weil moderne Prozessoren sowohl mehr Arbeitsspeicher nutzen können als auch den Protected-Mode-Betriebssystemen die notwendige Hardware-Unterstützung für flexibles Speichermanagement bieten. Virtueller Expansionspeicher, der mit den Speicherverwaltungsmethoden des Protected Mode emuliert wird erfreut sich allerdings eine großen Beliebtheit, da dieser einfacher zu Bedienen ist als andere Methoden (z.B. XMS, DPMIs oder selbst in den Protected Mode schalten) → siehe Abschnitt EMS ab dem 386er.

Entstehungsgeschichte[Bearbeiten]

Emulex Persyst 16 Bit ISA-Karte mit 4 MiB RAM

Mitte der 1980er Jahre, als das Betriebssystem MS-DOS den PC-Markt dominierte, reichten die 640 KB konventioneller Speicher, die es für Programme maximal zur Verfügung stellte, für viele größere Programme bereits nicht mehr aus. Es wurden verschiedene Lösungen realisiert, um auf mehr Arbeitsspeicher zuzugreifen. So wurden spezielle Steckkarten verkauft, die zusätzlichen Speicher enthielten. Diese Karten blendeten einen Teil ihres Speichers an einer bestimmten Stelle im 1-MB-Adressraum ein, so dass ein Programm darauf zugreifen konnte. Über spezielle Befehle konnte gesteuert werden, welcher Teil des Kartenspeichers (der oft zwischen 512 KB und 2 MB groß war) im Adressraum des Prozessors eingeblendet werden soll (Memory Bank Switching). Dadurch konnte ein Programm nie den gesamten Kartenspeicher auf einmal verwenden, sondern immer nur den Teil, der gerade eingeblendet war. Diese Karten wurden memory expander genannt, und der Speicher auf ihnen expanded memory.

Diese Karten waren inkompatibel zueinander und ein Programm, das diese memory expander nutzen wollte, musste für jede dieser Karten extra Programmfunktionen besitzen. So einigten sich im Jahre 1985 die Firmen Lotus (als Hersteller der Tabellenkalkulation Lotus 1-2-3), Intel und Microsoft auf einen Standard, der LIM-EMS genannt wurde. Meistens ist dieser Standard gemeint, wenn von expanded memory die Rede ist.

LIM-EMS[Bearbeiten]

LIM-EMS schreibt einen so genannten „expanded memory manager“ (EMM) vor. Dies ist ein Gerätetreiber, der seine Funktionen über einen Software-Interrupt zur Verfügung stellt. Der expanded memory wird in Seiten (engl: pages) zu je 16 KB aufgeteilt. Im Adressraum wird ein 64 KB großes Fenster (engl: page frame oder page window) reserviert, in dem dann jeweils 4 EMS-Speicherseiten eingeblendet werden. Das EMS-Fenster belegt meist die Adressen D0000hex bis DFFFFhex; die 4 eingeblendeten EMS-Seiten beginnen an den Adressen D0000hex, D4000hex, D8000hex und DC000hex.

Der vom Kartenhersteller mitgelieferte EMS-Treiber (oft emm.sys genannt) bietet einen genormten Satz an Funktionen an, etwa zur Abfrage der Größe des gesamten expanded memory, der Anzahl der noch freien Seiten, das Belegen und Freigeben von Speicherseiten und natürlich das Ein- und Ausblenden bestimmter Seiten in das EMS-Fenster.

Die Funktionen des EMS-Treibers stehen am Software-Interrupt 67hex zur Verfügung.

EMS ab dem 386er[Bearbeiten]

Die EMS-Speicherkarten erlangten keine allzu große Verbreitung, da sie recht teuer waren. Ab dem 80386er beherrschten die Prozessoren jedoch einen speziellen Betriebsmodus, der Virtual 8086 Mode genannt wird. Mit diesem Modus lässt sich eine Real-Mode-Umgebung (wie sie DOS benutzt) innerhalb einer Protected-Mode-Umgebung emulieren. Im Protected Mode beherrschen die x86-kompatiblen Prozessoren ab dem 80386er außerdem die so genannte Paging-Technik, mit der eine Abbildung der (virtuellen) Programmadressen auf davon verschiedene reale (physische) Speicheradressen möglich wird.

Diese beiden Techniken ermöglichen einen Speichertreiber, der ein EMS-Fenster bereitstellt, und die Zugriffe darauf auf andere Speicherbereiche (jenseits der 1-MB-Grenze) umlenkt. Der EMS-Treiber emm386.exe, der bei MS-DOS ab Version 4.00 dabei ist, oder entsprechende Pendants von Drittanbietern wie zum Beispiel qemm386.exe von Quarterdeck, ermöglicht so die Bereitstellung von EMS-Speicher, ohne dass eine EMS-Karte im Rechner vorhanden ist.

Siehe auch[Bearbeiten]