Microsoft Disk Operating System
MS-DOS (Microsoft Disk Operating System) ist eines der ersten Betriebssysteme für x86-PCs. DOS war in den späten 1980ern das dominierende Betriebssystem für Ein-Benutzer-Rechner. Heute ist DOS nicht mehr erhältlich. Stattdessen gibt es Betriebssysteme wie FreeDOS oder andere Abstammungen von MS-DOS.
Die ursprüngiche Codebasis von Windows (Windows 1.x bis Windows ME) waren lediglich ein grafischer Betriebssystemaufsatz für MS-DOS, auch wenn MS-DOS seit Windows 95 (MS-DOS 7.0) nicht mehr einzeln verkauft wurde. Beim NT-Kernel, der von allen neueren Windows-Versionen benutzt wird, änderte sich das aber: Der NT-Kernel wurde komplett neu entwickelt und konnte DOS-Anwendungen nicht mehr oder nur mit Problemen starten. Ab diesem Zeitpunkt wurden immer häufiger Emulatoren wie z.B. DOS-Box eingesetzt, um diese Programme dennoch starten zu können.
Treiber und TSR-Programme
DOS ist zwar ein Single-Tasking-System, aber dennoch muss neben den aktuell laufenden Programm weiterer Code im Speicher liegen - neben dem Kernel selbst sind das vor allem zusätzliche Treiber. DOS kennt dazu das Konzept TSR, Terminate and Stay Resident. Ein TSR-Programm beendet sich anders als ein normales Programm über einen besonderen Systemaufruf, der einen Teil des Programms auch nach dem Programmende im Speicher belässt.
Der residente Teil des Programms bleibt anschließend solange inaktiv, bis er von anderer Stelle aufgerufen wird. In der Regel geschieht das dadurch, dass das TSR-Programm einen IVT-Eintrag auf seinen residenten Teil umbiegt, so dass es bei einem bestimmten Interruptaufruf zum Zug kommt. Das kann ein Hardwareinterrupt sein oder aber auch ein Softwareinterrupt, der die API des TSR-Programms anderen Anwendungen zur Verfügung stellt - Hardwaretreiber benötigen oft beides.
Es ist auch nicht unüblich, BIOS- oder DOS-Funktionen zu "überladen", indem der passende IVT-Eintrag auf eine Funktion des TSR-Programms geändert wird. Besonders in diesen Fällen wird das TSR-Programm sich den alten IVT-Eintrag merken und den ursprünglichen Interrupthandler aufrufen, sobald es seine Aufgabe erledigt hat (oder wenn es nur eine Unterfunktion des Interrupts ändert). Auf diese Weise können ganze Ketten von Interrupthandlern zu einem einzigen Interrupt entstehen.
Zugriff auf hohen Speicher
Da DOS ein Real-Mode-Betriebssystem ist, ist der direkt adressierbare Speicher auf etwa ein Megabyte beschränkt. Da der Bereich zwischen 640 kB und 1 MB für das BIOS und zum Einblenden von Hardware reserviert ist (die Upper Memory Area), bleiben für Treiber und Anwendungen 640 kB an konventionellem Speicher übrig. Weil das auf Dauer etwas zu wenig war, wurden Methoden eingesetzt, um auch auf die höheren Speicherbereiche zugreifen zu können.
Der Treiber himem.sys stellt gemäß der Extended Memory Specification 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.
- Je nach Hardware freie Speichbereiche in der Upper Memory Area zwischen 640 kB und 1 MB. Die Adressierung im Real Mode stellt hier kein Problem dar.
- Extended Memory Blocks beginnen nach dem Ende der HMA. Die API erlaubt es, im erweiterten Speicher Blöcke zu reservieren, freizugeben und 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 des Blocks in den konventionellen Speicher benutzt werden muss bevor mit dem Inhalt gearbeitet werden kann.
Mit dem Expanded Memory stellt emm386.exe einen anderen Mechanismus zur Verfügung, um auf hohen Speicher 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 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.