| Zeile 30: | Zeile 30: | ||
Der Treiber himem.sys stellt gemäß der ''Extended Memory Specification'' (XMS) den Zugriff auf verschiedene Arten von hohen Speicherbereichen zur Verfügung: | Der Treiber himem.sys stellt gemäß der ''Extended Memory Specification'' (XMS) den Zugriff auf verschiedene Arten von hohen Speicherbereichen zur Verfügung: | ||
| − | * Die ''High Memory Area'' (HMA) bezeichnet den 65520 Bytes großen Bereich ab 1 MB. Der Zugriff darauf wird ermöglicht, indem das [[A20-Gate]] aktiviert wird, so dass der Bereich innerhalb des im Real Mode adressierbaren Bereichs liegt. | + | * Die ''High Memory Area'' (HMA) bezeichnet den 65520 Bytes großen Bereich ab 1 MB (von 0x00100000 bis 0x0010FFEF). Der Zugriff darauf wird ermöglicht, indem das [[A20-Gate]] aktiviert wird, so dass der Bereich innerhalb des im Real Mode adressierbaren Bereichs liegt. |
| − | * Je nach Hardware freie Speicherbereiche in der ''Upper Memory Area'' zwischen 640 kB und 1 MB. Die Adressierung im Real Mode stellt hier kein Problem dar. | + | * Je nach Hardware freie Speicherbereiche in der ''Upper Memory Area'' zwischen 640 kB und 1 MB. Die Adressierung im Real Mode stellt hier kein Problem dar. Dieser Service wird aber nicht von himem.sys selber angeboten. Zusätzliche Speichermanager, wie emm386.exe oder umbpci.sys, stellen diesen Service zur Verfügung. |
| − | * ''Extended Memory Blocks'' beginnen nach dem Ende der HMA. Die API erlaubt es, im erweiterten Speicher Blöcke zu reservieren, freizugeben und Daten hinein/heraus zu kopieren (die Speicherverwaltung schaltet dazu kurzzeitig in den [[Protected Mode]]). Eine direkte Adressierung des Speichers ist im Real Mode nicht möglich, so dass die API-Funktion zum Kopieren der Daten in den konventionellen Speicher benutzt werden muss bevor mit dem Inhalt gearbeitet werden kann. Darüber hinaus kann so ein Extended Memory Block auch gelockt werden was ihn in seiner Größe unveränderlich macht aber dafür auch als nicht verschiebbar deklariert. Von einem gelockten EMB bekommt man auch die physische Adresse und kann ihn so für eigene Protected Mode Spielchen benutzen (alle DOS-Extender machen das so wenn sie auf einem DOS-System gestartet werden in dem nur himem.sys aber nicht emm386.exe läuft). | + | * ''Extended Memory Blocks'' beginnen nach dem Ende der HMA. Die API erlaubt es, im erweiterten Speicher Blöcke zu reservieren, freizugeben und Daten hinein/heraus zu kopieren (die Speicherverwaltung schaltet dazu kurzzeitig in den [[Protected Mode]]). Eine direkte Adressierung des Speichers ist im Real Mode nicht möglich, so dass die API-Funktion zum Kopieren der Daten in den konventionellen Speicher benutzt werden muss bevor mit dem Inhalt gearbeitet werden kann. Darüber hinaus kann so ein Extended Memory Block auch gelockt werden was ihn in seiner Größe unveränderlich macht aber dafür auch als nicht verschiebbar deklariert. Von einem gelockten EMB bekommt man auch die physische 32Bit-Adresse und kann ihn so für eigene Protected Mode Spielchen benutzen (alle DOS-Extender machen das so wenn sie auf einem DOS-System gestartet werden in dem nur himem.sys aber nicht emm386.exe läuft). |
| − | Mit dem ''Expanded Memory Specification'' (EMS) stellt emm386.exe einen anderen Mechanismus zur Verfügung, um auf | + | Mit dem ''Expanded Memory Specification'' (EMS) stellt emm386.exe einen anderen Mechanismus zur Verfügung, um auf Speicher außerhalb der 1 MB-Grenze zuzugreifen. Dazu wird mindestens ein 386er benötigt, denn der Prozessor wird dazu dauerhaft in den 32-Bit-Protected-Mode geschaltet, so dass [[Paging]] verfügbar ist und hoher Speicher pageweise in das erste Megabyte des virtuellen Adressraums eingeblendet werden kann. Dadurch wird das bei XMS nötige Kopieren vermieden. Das eigentliche System und alle Programme laufen mit emm386.exe im [[VM86]]-Modus.<br />EMS kann aber auch mit Hilfe spezieller Erweiterungskarten angeboten werden welche einen kleinen Teil ihres eigenen Speichers (der nicht direkt für die CPU erreichbar ist) in den Speicher unterhalb der 1 MB-Grenze einblenden. Diese Erweiterungskarten benötigen dafür einen eigenen Treiber (der das EMS-SW-Interface zur Verfügung stellt) der auf jeder 8086 CPU läuft (also keinen Protected Mode und kein Paging erfordert). |
==Weblinks== | ==Weblinks== | ||