Zum Inhalt springen

Upper Memory Area

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Upper Memory Block)

Die Upper Memory Area (UMA), auf Deutsch oberer Speicherbereich, ist ein Speichertyp von MS-DOS und dazu kompatiblem DOS und wurde im ursprünglichen Design des IBM Personal Computer mit 384 KiB (= 393.216 Bytes) festgelegt. Dabei wurde der Speicherbereich des IBM PC, der mit dem 16-Bit-Prozessor Intel 8088 maximal 1 MiB (genau 1.048.576 Bytes) adressieren kann, in zwei Bereiche unterteilt: einerseits den Arbeitsspeicher bis 640 KiB (= 655.360 Bytes), retronym als Konventioneller Speicher bezeichnet, für Betriebssystem und Programme, und zwischen 640 KiB bis zur 1-MiB-Grenze andererseits den reservierten Speicherbereich, der u. a. für diverse ROMs und den Grafikspeicher genutzt wird. Weil dieser obere Speicherbereich (UMA) in den meisten Fällen jedoch nicht vollständig genutzt wird, können ab dem i386, der eine Speicherverwaltungseinheit (MMU) besitzt, sowie bei 80286-PCs mit speziellem Chipsatz, freie Bereiche daraus in zusammenhängenden Böcken, den UMBs (englisch Upper Memory Blocks“), für das Betriebssystem und Programme genutzt werden.[1]

Üblich ist die Benennung nach den englischen Begriffen: UMA für den Speicherbereich, daraus nutzbar sind einzelne UMBs. Die deutschen Begriffe „oberer Speicherblock“ (für Upper Memory Block) wie auch „oberer Speicherbereich“ (für Upper Memory Area) finden sich in der Speicherverwaltung von DOS kaum, weil diese oft mit dem „hohen Speicherbereich“ (englisch High Memory Area, HMA) verwechselt wurden.

UMBs wurden Ende der 1980er Jahre zuerst nur von speziellen, meist mit der Hardware mitgelieferten Treibern genutzt und nutzbar. Unter DOS wurde die Unterstützung und Nutzung von UMBs zuerst von Digital Research im Mai 1990 mit DR DOS 5.0 eingeführt, Microsoft zog im Juni 1991 mit MS-DOS 5.0 nach.

Der Adressraum oberhalb der Speicheradresse A0000hex (entspricht 640 KiB) ist für Zusatzhardware (Grafikkarten, SCSI-Controller und Ähnliches) und für das BIOS reserviert. Die Speicheradressen sind mit den spezifischen ROMs und Geräte-RAMs der Erweiterungskarten gleichgesetzt. Es handelt sich also nicht um Arbeitsspeicher, denn auch auf einem IBM PC Modell 5150 mit nur 64 KiB RAM ist an Adresse B0000hex der 4 KiB große MDA- oder der 16 KiB große CGA-Grafikspeicher, wenn ein Schwarz-Weiß-Monitor angeschlossen ist, oder an Adresse B8000hex der 16 KiB große CGA-Grafikspeicher, wenn ein Farbmonitor angeschlossen ist[2] – Adressen über 640 KiB und im geschützten oberen Speicherbereich (UMA). Auf den frühen IBM PCs, und dazu kompatible PCs, gab es gar nicht die Möglichkeit, die vollen 640 KiB in den auf der Hauptplatine dafür vorgesehenen Steckplätzen für Speichermodule unterzubringen. Beispielsweise konnte damals im IBM PC XT nur 256 KiB RAM in Form von vier Speicherbänken à 8 × 8 KiB DRAM-Chips plus ein Paritäts-Chip verbaut werden (4 × 64 KiB = 256 KiB).[3] Beim IBM PC/AT sind bereits 512 KiB „on-board“-RAM möglich. Mit Speicher-Steckkarten kann der RAM allerdings erweitert werden, beispielsweise dem IBM Memory Expansion Adapter für den PC/AT.[4][5]

Beim Begründer der IBM-kompatiblen PCs, dem ersten IBM Personal Computer Modell 5150, der gerade einmal mit 64 KiB RAM ausgestattet war, bedeutete dies keine nennenswerte Einschränkung. Ist jedoch (mit oder ohne Speichererweiterungskarte) mehr als 640 KiB im System verbaut, so sind die RAM-Adressen zwischen A0000hex und FFFFFhex vom reservierten oberen Speicherbereich verdeckt, oder anders ausgedrückt: die Speicheradressen zeigen nicht auf den RAM, sondern auf die reservierten Bereiche. Der obere Speicherbereich (UMA) ist daher nicht automatisch nutzbar, denn auch die nicht verwendeten Bereiche daraus sind entweder nicht zugeordnet oder schreibgeschützt.

Im Laufe der 1980er Jahre kamen IBM-PC-kompatible Computer mit immer mehr RAM in mehreren und größeren SIMMs auf den Markt, während gleichzeitig die Programme immer größer, umfangreicher und speicherhungriger wurden: viele Programme der frühen 1990er Jahre verlangen, dass ein sehr großer Teil des Konventionellen Speichers (unterhalb von A0000hex) verfügbar ist. Dies stellt dann ein Problem dar, wenn auch noch diverse Treiber und TSR-Programme in den Konventionellen Speicher geladen werden – der verbleibende Speicher ist dann letztlich für zahlreiche Programme zu klein. Zugleich wird der Adressraum oberhalb von A0000hex aber nur in den seltensten Fällen von Zusatzhardware und dem BIOS komplett belegt; meist blieben hier zwischen 128 und 256 KiB ungenutzt, allerdings nicht als zusammenhängender Speicherbereich, sondern in verstreuten Blöcken. Direkt auf das obere Ende des Arbeitsspeichers (des „Konventionellen Speichers“ bis 640 KiB, bei Speicheradresse A0000hex) folgt traditionell der Grafikspeicher der Grafikkarte, am Ende des gesamten Speicherbereichs im Real Mode vor der 1-MiB-Grenze befindet sich das BIOS. Freie, ungenützte Speicheradressen finden sich daher in der Regel in der Mitte des reservierten oberen Speicherbereiches, zwischen C8000hex und F8000hex. Zusammenhängende Speicherblöcke innerhalb des oberen Speicherbereichs (UMA), die nicht bereits verwendet werden, können unter bestimmten Voraussetzungen als Upper Memory Blocks bzw. kurz UMBs nutzbar gemacht werden.

Um Software – Teile von Programmen, Treibern oder TSR-Programmen – nicht in den Konventionellen Speicher laden zu müssen, sondern dafür UMBs zu nutzen, müssen sowohl das Betriebssystem als auch die Software selbst UMBs unterstützen. Seitens der Hardware muss der jeweilige Adressraum als RAM angesprochen werden können, was auf 8088/8086- bis 80286-basierten PCs nur eingeschränkt möglich ist. Einige Mainboards mit speziellen 286-Chipsätzen erlauben per Adressspeicherumschaltung (englisch bank switching) die Nutzung einzelner freier UMBs als RAM. Generell auf PCs können UMBs erst mit x86-Prozessoren ab dem 80386 bzw. „i386“, die eine Speicherverwaltungseinheit (MMU) besitzen, als Erweiterung des Arbeitsspeichers (UMBs) nutzbar gemacht werden, allerdings mit Adressspeicherumschaltung in Software, was im direkten Vergleich langsamer ist als die Umschaltung durch einen Chipsatz. Dadurch wurden die speziellen Chipsätze, die allerdings eigene Treiber unter DOS erfordern, auch in der 386SX-PC-Generation weitergeführt. Ab dem i486 ist der Vorgang in Software bereits schnell genug, dass sich ein eigener Chipsatz nicht mehr lohnte.

Die Nutzung von Arbeitsspeicher an Adressen im oberen Speicherbereich in Form von UMBs erfordert zusätzlich zur Hardware auch Software. Erst ab DOS 5.0 werden UMBs hinreichend unterstützt. Konventionelle DOS-Programme können auf allen IBM-PC-kompatiblen Computern den reservierten oberen Adressraum (die UMA) zwar problemlos adressieren, allerdings befindet sich dort kein Arbeitsspeicher. Stattdessen kann an diesen Speicheradressen ROM und RAM von Zusatzhardware angesprochen und genutzt werden, neben dem Grafikspeicher u. a. auch ROM von Erweiterungskarten oder Speicher (RAM) von EMS-Speicherkarten. Praktisch möglich ist die Nutzung von UMBs nur in vorhandenen, als RAM abgebildeten Adressen innerhalb der UMA. So können prinzipiell auch ohne Adressumschaltung bestehende Bereiche, die als RAM ansprechbar sind, als UMBs verwendet werden – etwa Teile des Grafikspeichers[6] oder, wenn eine EMS-Speicherkarte vorhanden ist, das EMS-Speicherfenster. Eine derartige Änderung der Nutzung dieses Teils des oberen Speicherbereichs führt allerdings zum Verlust deren eigentlichen Funktion – der Grafikspeicher (bzw. der als UMB verwendete Teil davon) kann nicht mehr als Grafikspeicher verwendet werden, und das EMS-Speicherfenster kann nicht mehr als EMS-Speichererweiterung dienen. Die Einrichtung von UMBs ohne dafür vorgesehene Hardware (spezielle 286-Chipsätze oder ab i386) und ohne eine passende Version von DOS ist generell nur mit erhöhtem Aufwand möglich – und auch nur, sofern spezielle Treiber vorhanden sind.[7] Mit einer für die Retrocomputing-Szene entwickelten 8-Bit-ISA-Speicherkarte[8] und einem generischen, aber manuell zu konfigurierenden DOS-UMB-Treiber[9] können sogar auf einem originalen IBM PC (oder einem kompatiblen Nachbau bis zum PC/AT) UMBs konfiguriert und diese von einem kompatiblen DOS, wenn dieses UMBs verwalten kann, für Treiber und TSRs genutzt werden.[10]

Ab dem i386 kann per MMU gewöhnlicher RAM von höheren Adressen jenseits der 1-MiB-Grenze (englisch Extended Memory) mithilfe eines Extended Memory Managers (XMM) wie HIMEM.SYS in den Adressraum der UMA „verlegt“ werden. Dafür gibt es generische Treiber wie beispielsweise EMM386 oder UMBPCI.SYS. Diese sorgen dafür, dass RAM in den UMBs sichtbar wird. Gleichzeitig ermöglicht der Expanded Memory Manager (wofür das „EMM“ in EMM386 steht) auch die Emulation von Speicher des Typs EMS (Expanded Memory), was konfiguriert werden kann. Dafür muss jedoch die Adressumschaltung ständig zwischen Real Mode (der auch von DOS genutzt wird, mit Speicherzugriff bis zur 1-MiB-Grenze) und Protected Mode (in dem Extended Memory bzw. der „Erweiterte Speicher“ erreichbar ist, aber mit dem DOS nicht kompatibel ist) wechseln, was auf frühen 386-Systemen meist länger dauert als die Umschaltung durch einen Chipsatz, bei dem der Prozessor im Real Mode verleibt. Die Chipsätze, die zueinander nicht kompatibel sind, bieten eigene Treiber für DOS, um ebenfalls sowohl UMBs als auch EMS-Speicher zur Verfügung zu stellen. Durch diese EMS-Emulation können viele bereits bestehende Programme, die zusätzlich zum Konventionellen Speicher nur EMS-Erweiterungsspeicher unterstützen, auch auf späteren Systemen mit mehr RAM weiterhin laufen, ohne dass physisch eine teure EMS-Speichererweiterungskarte im PC eingebaut sein muss.

Da eine breite Unterstützung für UMBs erst ab i386-PCs möglich ist und sich 386-Systeme erst bis Ende der 1980er Jahre durchsetzen konnten, wurde erst 1990 in DOS 5.0 Unterstützung für UMBs integriert – beginnend mit DR DOS 5.0, gefolgt von MS-DOS und PC DOS 5.0.

Der Konventionelle Speicher muss unter DOS ein einziger zusammenhängender Adressraum sein, daher sind die UMBs nicht direkt als Teil des Arbeitsspeichers für Programme verwendbar. Auch muss die Verwaltung der Nutzung einzelner UMBs ein zentraler Speichermanager übernehmen, da einzelne Programme, die unabhängig von einander und ohne Koordination dieselben UMBs nutzen, sonst instabil würden oder abstürzen.

Ebenso verhält es sich mit jenen Bereichen der UMA, die eigentlich für andere Zwecke gedacht sind. Diese können zwar mit Treibern in UMBs umgewandelt werden, stehen dann aber nicht mehr für die ursprüngliche Funktion zur Verfügung. So kann beispielsweise Adressraum für den Grafikspeicher, der mit einem spezifischen Treiber in eine oder mehrere UMBs umgewandelt wurde, nicht mehr für die Grafikausgabe genutzt werden. Je nach Implementierung fehlen ausgewählte Grafikmodi oder es steht zur Gänze nur noch der Textmodus zur Verfügung – bei Verwendung des Grafikmodus würde derselbe Speicherbereich für UMBs und den Grafikspeicher verwendet, was in jedem Fall die Bildausgabe auf dem Monitor unbrauchbar macht und sehr wahrscheinlich das jeweilige Programm bis zum Absturz beeinträchtigt. Da unter DOS kein Schutz vor derlei Doppelbelegung vorhanden ist, muss der Benutzer selbst dafür sorgen, dass er kein Programm startet, das eine der nicht mehr nutzbaren Funktionen verwenden würde.

Je nach PC sind unterschiedliche Blöcke im oberen Speicherbereich von Firmware, ROM und RAM von Erweiterungskarten belegt. In den frühen Versionen der Treiber und Speichermanager müssen die zu nutzenden Speicherbereiche manuell angegeben werden, allerdings ist die Suche nach freien Blöcken (benutzbaren UMBs) nicht trivial. Wenn der Benutzer dabei fehlerhafte Angaben an die Software übergibt, führt dies zu Instabilitäten und Abstürzen.

Damit Treiber und TSR-Programme in diesen Speichertyp geladen werden können, muss ein DOS-Speichermanager die Verwaltung der UMBs übernehmen. In DOS werden auf 386-Systemen (und deren Nachfolger, i486 und neuer) UMBs von EMM386 zur Verfügung gestellt und das Betriebssystem selbst übernimmt dann die Verwaltung, wenn dies mit der Anweisung DOS=UMB in der CONFIG.SYS aktiviert ist.[11] Auf 80286- und früheren Systemen müssen andere Speichermanager geladen werden, oft vom jeweiligen Chipsatz-Hersteller (wie z. B. C&T mit dem NEAT-Chipsatz).[12] Auch gibt es Speichermanager von Drittanbietern, allen voran QEMM und 386Max, die meist besser darin sind, verfügbare Blöcke der UMA zu finden und als UMBs nutzbar zu machen.

Die in MS-DOS und PC DOS ab Version 5.0 dafür verwendeten Befehle sind DEVICEHIGH in der CONFIG.SYS für Treiber und LOADHIGH bzw. kurz LH auf dem Kommandozeileninterpreter COMMAND.COM, die zumeist in der AUTOEXEC.BAT zum Laden von TSR-Programmen genutzt werden. Eingeführt wurde die Unterstützung für die Verwaltung von UMBs mit DR DOS 5.0, wo die Befehle mit HIDEVICE in der CONFIG.SYS und HILOAD auf der Kommandozeile ähnlich heißen. DR DOS 6.0 unterstützt beide Varianten. Ziel dieser Kommandos ist jeweils, die jeweilge Software in freie UMBs zu laden.

Zusätzlich wurden in MS-DOS 5.0 neue Systemaufrufe (via Interrupt 21hex, Funktionen 5802hex und 5803hex) eingeführt, mit denen ein Programm UMBs vom Betriebssystem anfordern kann. Damit weiß DOS, dass das Programme Speicheranforderungen aus dem oberen Speicherbereich (UMA) akzeptiert.[13] Alternativ kann der XMS-Treiber (z.B. HIMEM.SYS) explizit angesprochen werden, um über die API-Funktion 10hex Speicherbereiche in der UMA zu reservieren[14].

Um mehr freie obere Speicherblöcke (UMBs) zu lokalisieren, wurde in MS-DOS 6.0 MemMaker[15] und DR DOS 6.0 MemMax integriert, die den oberen Speicherbereich (UMA) durchsuchen und die Nutzung freier Blöcke (UMBs) in den DOS-Startdateien CONFIG.SYS und AUTOEXEC.BAT konfigurieren. Auf diese Weise kann die Menge an frei bleibendem Konventionellen Speicher erhöht werden, so dass für gewöhnliche Anwendungsprogramme und Spiele mehr Speicher übrig bleibt. Externe DOS-Speichermanager wie 386Max und QEMM bieten ebenfalls Dienstprogramme zur Suche und Optimierung, sind auch für frühere DOS-Versionen verfügbar, und sind fast immer besser darin, noch mehr Konventionellen Speicher „freizuschaufeln“.

Bezeichnung in MS-DOS

[Bearbeiten | Quelltext bearbeiten]

In den deutschsprachigen MS-DOS-Versionen, die dank HIMEM.SYS (ursprünglich mit Windows mitgeliefert) die High Memory Area (HMA) schon unterstützten, war diese bereits mit „oberer Speicherbereich“ übersetzt. Als die Unterstützung für UMBs in MS-DOS 5.0 hinzukam, wurde die Upper Memory Area (UMA) daher anderslautend mit „hoher Speicherbereich“ übersetzt – die Benennung ist damit unter diesen DOS-Versionen, und damit auch unter PC DOS von IBM, leider im Deutschen genau umgekehrt wie im Englischen, was zusammen mit der insgesamt komplizierten und schwer verständlichen DOS-Speicherverwaltung zu viel Verwirrung bei den Anwendern führte. DR DOS übersetzte indes die Begriffe korrekt mit „high memory (area)“ (HMA) als hohen und „upper memory (area)“ (UMA) als oberen Speicher(bereich). Erst mit Windows 95 bzw. MS-DOS 7.0 wurden die Begriffe im Deutschen getauscht und entsprechen damit ebenfalls der direkten englischen Übersetzung.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Van Wolverton: MS-DOS Version 5 – Das optimale Benutzerhandbuch von Microsoft. 5. Auflage. Friedrich Vieweg & Sohn Verlagsgesellschaft mbH, Braunschweig, Wiesbaden 1991, ISBN 978-3-528-44378-8, 17: Individuelles Anpassen Ihres Systems, S. 503, Konventioneller Speicher (englisch: Running MSDOS – The Definitive Guide to MS-DOS and PC-DOS, Now Completely Revised to Include Version 4 and the New Dos Shell. Redmond, Washington 1991. Übersetzt von Translingua Übersetzungsdienst GmbH, Bonn): „Alle Computerprogramme können konventionellen Speicher nutzen, doch sind IBM und kompatible Computer unter MS-DOS auf maximal 1 MB (1024 KB) dieses Speichertyps beschränkt. Selbst wenn Ihr Computer 1 MB konventionellen Speicher besitzt, steht dieser nicht vollständig für Anwendungsprogramme, Daten oder sogar DOS zur Verfügung. In Wirklichkeit verwendet DOS normalerweise nur die ersten 640 KB für Anwendungen und Daten. Die restlichen 384 KB des konventionellen Speichers werden als reservierter Speicher oder hoher Speicherbereich (Upper Memory Area) bezeichnet. Er wird für spezielle Zwecke, wie z. B. Hardwaresteuerung und Bildschirmspeicher, verwendet. Dieser reservierte Speicherbereich wird von Software zur Speicherverwaltung in Einheiten, Upper Memory Blocks (UMB) genannt, verwendet.“
  2. StackExchange – Retrocomputing: Who decides what is the memory address that the CGA video buffer will be mapped to?, englisch
  3. IBM PC/XT / 5160 // retrocmp / retro computing – (64-256) (Blog), englisch
  4. Tom Moran: IBM Adds Snap-On Memory Expansion Cart to PC AT. In: InfoWorld. Band 8, Nr. 33, 18. August 1986, S. 10 (englisch, eingeschränkte Vorschau in der Google-Buchsuche): “IBM … introduced the Memory Expansion Adapter (MEA), an add-on memory card for the PC AT. … …users can install up to five MEAs in an AT, providing up to 15 megabytes of expanded RAM. … The MEA uses slit-memory addressing that can add memory to the base system memory (up to the 640K limit) and to the expansion memory of an AT.”
  5. IBM 5150/5160 – Some IBM Expansion Cards and Options, englisch
  6. Beispiel für einen UMB-Treiber, der Grafikspeicher der UMA „umwidmet“: UMBHERC.SYS kann 60 KiB des 64 KiB großen Videospeichers einer Hercules-Grafikkarte als UMB zur Verfügung stellen.
  7. Eric Auer: freedos/news/technote/202.txt. freedos.org, 2002, archiviert vom Original (nicht mehr online verfügbar) am 2. September 2005 (englisch): „This document combines several mails that wandered around in fd-dev … during October 2002. … Matthias Paul and yet another technical mail … Sat, 26 Oct 2002 … Subject: Re: [fd-dev] Memory management FAQ … Matthias also points out that DR-DOS HIMEM.SYS has RDOSUMB/URAM like features for several 286/386 chipsets. This will give you XMSUMB or UMB. It can even use EMS to create UMB. Not practical if you ask me: Normally, you load the XMS driver FIRST, and normally, EMS drivers provide UMB already. Matthias mentions EMMXMA of DR-DOS: This one uses PS/2 XMA memory extension cards to offer EMS. DR-DOS HIMEM.SYS can also – like RDOSUMB/URAM – detect existing RAM in the UMB area and turn it into UMB/XMSUMB. Useful if you can enable some RAM though your CMOS setup. I remember I could do this with a NeAT 386SX chipset…“
  8. Adrian Black: 8-bit ISA RAM expansion board with UMB support. In: GitHub. Abgerufen am 8. Juli 2025 (englisch): „This card only supports conventional memory, no EMS. Extra RAM can be mapped into the high memory space (above 640k) allowing for UMB on XT machines.“
  9. Der Treiber USE!UMBS.SYS wurde von Marco van Zwetsalaar um 1991 geschrieben und ist Public Domain. Der Treiber stellt auf 8088/8086- bis 80286-PCs verfügbare und beschreibbare Speicherbereiche („RAM“) der 384 KB großen UMA in Form von MS-DOS-kompatiblen UMBs (ab MS-DOS 5.0) bereit.
  10. Detlef Grell: Retro-Plattform Monotech NuXT: IBM-XT-Nachbau mit 8088-CPU im Test. In: Heise online. 10. November 2020. Abgerufen am 8. Juli 2025.
  11. Everett E. Murdock: DOS (internal). In: DOS the Easy Way – DOS Command Index. 2008, abgerufen am 9. Mai 2026 (englisch): umb|noumb Tells DOS whether or not it should manage upper memory blocks (umb) created by an UMB provider such as EMM386.EXE. The default is noumb (no umb).“
  12. Eric Auer, W. Spiegl: The DOS memory management. In: FreeDOS Spec Command HOWTO. 2024, abgerufen am 9. Mai 2026 (englisch): „Drivers like RDOSUMB, HIRAM or URAM can activate normal RAM in unused areas between those in chipset-dependent ways on various mainboards and all sorts of EMM386 style drivers can make RAM visible in those areas if you have 386 or newer CPU.“
  13. Q95555: Overview of Memory‐Management Functionality in MS‐DOS
  14. http://www.phatcode.net/res/219/files/xms30.txt
  15. Rick Ayre: DOS 6 – The Ultimate Software Bundle? In: PC Magazine. Band 12, Nr. 7. Ziff Davis, 13. April 1993, S. 119, Memory Management (englisch, eingeschränkte Vorschau in der Google-Buchsuche): “While DoubleSpace may be the novelty of DOS 6, MemMaker, a program that automatically optimizes memory on 386 and higher computers, is equally appreciated. DOS 5 made it possible to use memory more efficiently. Now, DOS 6 makes it easy, safe, and automatic.”