# BIOS (DOS)

Das BIOS (IPA: [ˈbaɪɔs], Aussprache) ist eine einfache Hardwareabstraktionsschicht früher Betriebssysteme für Mikrocomputer. Sowohl für das Konzept als auch für den Begriff „BIOS“ für Basic Input/Output System gilt Gary Kildall, Entwickler des Betriebssystems CP/M (Control Program for Microcomputers), als Erfinder.
Ein BIOS als Abstraktionsschicht ist in fast allen PC-kompatiblen Disk Operating Systemen (DOS) zu finden. Dieses DOS-BIOS ist ein Teil vom Betriebssystem, das sich beim IBM-PC-kompatiblen Computer auf Routinen (Funktionsaufrufe) des PC-BIOS (auch „ROM-BIOS“, oft auch aus Hardwaresicht „BIOS-ROM“) stützt – es ist aber nicht dasselbe wie das im ROM befindliche BIOS mit gleichem Namen. Auch auf x86-PCs der frühen 1980er ohne BIOS – sog. „DOS-PCs“ – wird von CP/M und DOS das BIOS als Komponente des Betriebssystems verwendet, das sich in einer Systemdatei auf einem Bootmedium befindet. Die BIOS-Datei heißt unter MS-DOS üblicherweise IO.SYS, unter DR DOS bis Version 3.41 DRBIOS.SYS, ab DR DOS 5.0, bei frühen Versionen von MS-DOS und bei PC DOS IBMBIO.COM.

## Geschichte

In den frühen 1970er Jahren kamen zunehmend Mikrocomputer verschiedener Hersteller auf, auf denen meist das Betriebssystem CP/M lief. Da dieses System jedoch für jeden Computer jeweils speziell angepasst werden musste, verschob Gary Kildall mit jeder Version jene Teile des Quellcodes, die jeweils angepasst werden mussten, in das von ihm getaufte „BASIC I/O SYSTEM“ – „BIOS“, während der Betriebssystemkern BDOS auf die vom BIOS zur Verfügung gestellten Funktionsaufrufe zurückgriff. Die erste Version, in der das BIOS in dieser Form auftaucht, war CP/M 1.3 von 1975. Das Basis-System, bestehend aus BIOS und BDOS, bezeichnete Gary Kildall bei dieser frühen CP/M-Version als „Floppy Disk Operating System“, kurz FDOS.
Das BIOS als Systemdatei des Betriebssystems ist nicht mit dem Firmware-BIOS eines IBM-PC-kompatiblen Computers gleichzusetzen. Auch vor dem PC-BIOS gab es ähnliche Firmware mit jedem Computer, jedoch war diese nicht genormt, was eine Anpassung seitens des Betriebssystems für jedes einzelne Computersystem notwendig machte. Diese Anpassung wurde gekapselt im DOS-BIOS vorgenommen, um die Portierung des Betriebssystems zu erleichtern. Erst mit dem IBM PC von 1981 ist dieser Bestandteil des Betriebssystems für jeden kompatiblen PC gleich.

## Funktion

Das BIOS ist wesentlich für den Startvorgang auf Mikrocomputern der 1970er Jahre, den späteren Personal Computern, und dem IBM PC und dazu kompatiblen Computern mit PC-BIOS. Es ist nach dem Bootsektor der erste Betriebssystemteil von CP/M und PC-kompatiblem DOS (MS-DOS, PC DOS und dazu kompatibles DOS), der geladen wird, und stellt Funktionen bereit, um den zweiten Teil, den Kernel, und im Anschluss die Shell (auch Kommandointerpreter oder Kommandozeileninterpreter genannt) zu starten. Diese drei Teile wurden von Gary Kildall in CP/M als „drei Schalen“ bezeichnet: das BIOS als die erste, der Kernel als die zweite und die Shell (unter CP/M der „Console Command Processor“, kurz CCP) als die dritte Schale. Der Entwickler von 86-DOS, Tim Paterson, orientierte sich bei seinem Betriebssystem an CP/M und übernahm viele seiner Eigenschaften, darunter auch die Aufteilung in BIOS, Kernel und Kommandozeileninterpreter. Aus 86-DOS entwickelten Microsoft und IBM schließlich PC DOS und MS-DOS, die sich als Industriestandard für PCs etablierten.
Die Startfunktion eines Personal Computers lädt ein Startprogramm von einer vordefinierten Stelle eines Startmediums in den Speicher. Dieser Vorgang wird als „Bootstrapping“ bezeichnet. Bei vielen Systemen, darunter auch beim IBM PC, ist diese vordefinierte Stelle ein Sektor auf einer Diskette oder einer Festplatte: der sog. Bootsektor.
* Der Bootsektor enthält ein kleines Programm, „Bootcode“, das aber aufgrund der Größenlimitierung des Sektors von 512 Bytes weitere Teile nachladen muss: dieser lädt das BIOS in vordefinierter Art und Weise:
** entweder direkt (z. B. nächster Sektor), oder
** eine Datei, die in einem bestimmten Sektor auf dem Speichermedium sein muss, oder
** der Bootcode selbst kann bereits das Dateisystem (z. B. FAT12) verarbeiten und nach der Datei, die das BIOS enthält, suchen.
* Das Bootcode übergibt die Kontrolle an das geladene BIOS, das dann folgende Aktionen durchführt:
* Es lädt weitere Sektoren, den nicht in den ersten drei Sektoren des Bootdatenträgers gelegenen Rest von sich selbst, in den Speicher.
* Es initialisiert der Reihe nach die Standard-Gerätetreiber, wie die Systemkonsole CON, die Echtzeituhr CLOCK, Serielle Schnittstelle, Datenträger, und weitere. Ab diesem Zeitpunkt sind alle Standard-Geräte verfügbar.
* Es lädt den Kernel und ruft die Initialisierungsroutine auf. Bei PC-kompatiblem DOS ist der Kernel einer separaten Datei (meist IBMDOS.COM oder MSDOS.SYS) gespeichert.
* Ist der Kernel geladen, ist das Betriebssystem grundsätzlich bereit, allerdings ohne Shell nicht benutzbar. In weiterer Folge wird daher ein Kommandozeileninterpreter als Standard-Shell SHELL, bei DOS ist das COMMAND.COM, in den Speicher geladen und ausgeführt.
| Erscheinungsjahr | Hersteller / Entwickler | Betriebssystem | BIOS | Kernel | Standard-Shell | Anmerkungen |
| 1976 | Digital Research | CP/M 1.3 | BDOS, direkt $^1$ | BDOS, direkt $^1$ | CCP | das BIOS und der Kernel werden zusammengefasst |
| 1980 | SCP | 86-DOS | direkt $^1$ | 86DOS.SYS | COMMAND.COM | lief nicht auf dem IBM PC |
| 1981 | SCP, Microsoft, IBM | PC DOS | IBMBIO.COM | IBMDOS.COM | COMMAND.COM | bis Version 6.0 großteils identisch zu MS-DOS |
| 1982 | Microsoft | MS-DOS 1.x (OEM) | IOSYS.COM | MSDOS.COM | COMMAND.COM | bspw. COMPAQ MS-DOS 1.10 |
| 1982 | Microsoft (mit IBM) | MS-DOS (ab 2.0) | IO.SYS | MSDOS.SYS | COMMAND.COM | großteils identisch mit PC DOS; verwendete teilweise auch IBMBIO.COM/IBMDOS.COM |
| 1982 | Digital Research | CP/M-86 | BDOS, direkt $^1$ | BDOS, direkt $^1$ | CCP | BDOS-Version 2.2; erste Version für die x86-Architektur und den IBM PC |
| 1985 | Digital Research | DOS Plus (bis 2.01), DR DOS (ab 3.31) | IBMBIO.COM | IBMDOS.COM | COMMAND.COM | bis Version 5.0 intern CP/M-Strukturen, ab DR DOS 6.0 intern wie PC DOS/​MS-DOS |
| 1989 | Datalight (Tuxera) | ROM-DOS | IBMBIO.COM | IBMDOS.COM | COMMAND.COM | kann zwar auf Disketten und Festplatten installiert werden, lässt sich aber auch aus einem ROM betreiben; kompatibel zu MS-DOS |
| 1990 | Api Software | RxDOS | RXDOSBIO.SYS | RXDOS.SYS | RXDOSCMD.EXE | „Real Time DOS“ von Mike Podanoffsky |
| 1993 | PhysTechSoft, Paragon | PTS-DOS | PTSBIO.SYS | PTSDOS.SYS | COMMAND.COM | |
| 1994 | FreeDOS-Entwicklergemeinschaft | FreeDOS | KERNEL.SYS | KERNEL.SYS | COMMAND.COM | keine Trennung zwischen BIOS und Kernel; weiterentwickelter DOS-C-Kernel |
| 1995 | Pasquale Villani | DOS-C | IPS.SYS | KERNEL.EXE | COMMAND.COM | DOS-Kernel von Pasquale J. Villani für moderne Prozessoren (der späten 1990er Jahre) |
Bei CP/M und einigen Varianten von DOS sind BIOS und Kernel in einer Datei zusammengefasst, etwa bei FreeDOS als KERNEL.SYS.

## CP/M

CP/M hatte vor der Einführung des IBM PCs einen vergleichbaren Marktdurchdringungsgrad unter damaligen Kleinrechnern, wie später PC DOS bzw. MS-DOS auf IBM-kompatiblen PCs. Da jedoch vor der Etablierung IBM-kompatibler PCs kein über die Herstellergrenzen hinaus geltender Hardware-Standard existierte und jeder Hersteller von Kleinrechnern dabei völlig verschiedene Konzepte verfolgte, war es notwendig, die hardwarespezifischen Teile des Betriebssystems für jedes System speziell anzupassen.
Handelte es sich anfangs noch um eine gedankliche Untergliederung, so wurden die hardwarespezifischen Teile während der Entwicklung von CP/M 1.3 und 1.4 (1977) auch in der Architektur des Systems von den hardwareunabhängigen Teilen isoliert. Anregungen für eine Entwicklung in diese Richtung gehen auch auf Glenn Ewing, der das CP/M-BIOS für IMSAI an den IMSAI 8080 anpasste, zurück. Das BIOS wurde als Grundgerüst in Form einer Assemblerdatei als Vorschlag an Erstausrüster (OEMs) beigelegt und musste für das jeweilige Computersystem speziell angepasst werden. Die zwei übereinanderliegenden untersten Schichten, das hardwarespezifische BIOS und das darauf aufbauende, aber vollständig hardwareunabhängige BDOS (Basic Disk Operating System), konnten anschließend zusammengefügt werden und bilden so das Basis-System „Floppy Disk Operating System“ (FDOS). Um CP/M für ein neues Rechnersystem anzubieten, konnte der jeweilige Hersteller den Quelltext des BIOS-Grundgerüst von Digital Research lizenzieren und nach eigenen Vorstellungen anpassen. BDOS wurde in der Regel nur als Objektdatei ausgeliefert und passend dazugelinkt. Auf diese Weise wurde CP/M auf mehr als dreitausend verschiedene Systeme angepasst und in den jeweils passenden Adaptionen von den Hardware-Herstellern angeboten. Durch das mitgelieferte Grundgerüst für das BIOS wurde der Anpassungsprozess immens erleichtert, was dazu führte, dass CP/M in den Versionen 1.4 und 2.2 auch einzeln verkauft wurde.
Auf CP/M laufende Anwendungen nutzen Systemaufrufe, die ihnen durch BDOS zur Verfügung stehen, das wiederum zur Durchführung der verschiedenen Aufgaben nach unten die hardwarespezifischen Routinen des BIOS aufruft, das die Hardwareansteuerung übernimmt. Auf diese Weise bleiben CP/M-Anwendungen auf derselben Prozessorarchitektur über Systemgrenzen hinweg portabel, wenn sie die Hardware nicht direkt ansprechen. Im ROM selbst befand sich meist nur ein äußerst rudimentärer sog. Monitor und Bootloader, über den das erzeugte CP/M-Image von einem Medium wie einer Diskette oder Festplatte in den Speicher geladen und gestartet werden konnte. Einige CP/M-Abkömmlinge wie MP/M (Multi-tasking Program for Microcomputers), Concurrent CP/M 2.0-3.1 (CCP/M), Concurrent DOS 3.2-6.2 (CDOS), DOS Plus 1.2-2.1, FlexOS, Multiuser DOS 5.0-7.xx (MDOS), System Manager 7 und REAL/32 7.xx enthalten auch ein XIOS (Extended Input Output System).
Unter DR DOS ab Version 5 heißt die Datei mit dem BIOS IBMBIO.COM, bis Version 3.41 DRBIOS.SYS. Da es für den IBM PC geschrieben ist, entfällt ein aufwendig angepasstes BIOS als erste Schale. Doch finden sich hardwarenahe Funktionen weiterhin in dieser Datei, die im Wesentlichen IO.SYS von MS-DOS entspricht.

## PC DOS

Das von Microsoft und IBM gemeinsam entwickelte Betriebssystem MS-DOS bzw. PC DOS lehnte sich ursprünglich sehr stark an das Vorbild CP/M an, deshalb findet sich auch hier die Aufteilung in einen hardwarespezifischen Teil, das sog. DOS-BIOS, und in den hardwareunabhängigen DOS-Kernel. Anders als bei CP/M lagen die beiden Teile jedoch in getrennten Dateien vor, die bei MS-DOS und PC DOS hingegen IBMBIO.COM (BIOS) und IBMDOS.COM (Kernel) hießen, bei späteren Versionen von MS-DOS IO.SYS (BIOS) und MSDOS.SYS (Kernel). Die MS-DOS-Version mit einem an IBM PCs angepassten DOS-BIOS hieß PC DOS, andere MS-DOS-OEM-Versionen lagen jedoch – ganz ähnlich wie CP/M – auch für Dutzende nicht IBM-kompatible x86-Systeme vor, bei denen das DOS-BIOS erst an die jeweilige Zielplattform angepasst werden musste.
Auch bei der PC-DOS-kompatiblen Single-User-Betriebssystemlinie DR DOS, die Anfang 1988 von Digital Researchs CP/M-Abkömmling Concurrent DOS 6.0 abgespalten wurde, indem das System seiner Multitasking-Fähigkeiten beraubt und das XIOS durch ein IBM-kompatibles DOS-BIOS ersetzt wurde, findet sich die gleiche Aufteilung in DOS-BIOS (DRBIOS.SYS bzw. IBMBIO.COM) und den bis zuletzt BDOS genannten Kernel (DRBDOS.SYS bzw. IBMDOS.COM). Handelte es sich anfangs beim BDOS 6.0 von DR DOS 3.31 im Wesentlichen noch um einen CP/M-ähnlichen Kernel mit darübergestülptem DOS-Emulator PCMODE, wurde die interne Funktionsweise im Laufe der Zeit zunehmend – und endgültig ab BDOS 7.0 – auch intern an DOS-Standards angepasst. Das gilt auch für PalmDOS 1, Novell DOS 7, Caldera OpenDOS 7.01 und DR-DOS 7.02+.
Das DOS-BIOS von IBM-kompatiblen DOS-Ausgaben griff ausschließlich über das im ROM des Rechners eingebaute ROM-BIOS bzw. System-BIOS (System-Firmware) auf die Hardware zu. Dadurch konnten kleinere Unterschiede in der Hardware schon auf der Ebene des System-BIOS gekapselt werden, so dass in solchen Fällen keine Änderung am DOS-BIOS mehr notwendig war. Mit der Verbreitung von Anwendungen, die am Betriebssystem vorbei direkt auf die Hardware zugriffen (und in der Folge mit der von IBM-kompatiblen Clones), wurden Anpassungen am DOS-BIOS im Laufe der Jahre zunehmend seltener notwendig, so dass auch MS-DOS später nur noch in einer generischen Version angeboten wurde, die einige Sonderfälle behandelte und so auf den meisten IBM-kompatiblen Rechnern lief.

### IBMBIO.COM

IBMBIO.COM ist eine Systemdatei (mit dem „System“-Dateiattribut) in den Betriebssystemen PC DOS und DR-DOS. In DR DOS Version 3.31 bis 3.41 heißt die Datei DRBIOS.SYS. Sie entspricht der IO.SYS von MS-DOS.
Bei den ersten Versionen von MS-DOS kam ebenfalls die IBMBIO.COM zur Verwendung. Während Microsoft ab MS-DOS 7.0 die Funktionen von IO.SYS und MSDOS.SYS in der IO.SYS-Datei zusammenlegte, behielt IBM die Trennung bis zur letzten Version von PC-DOS bei. Auch die ersten Versionen von OS/2 verwendeten die IBMBIO.COM zum Start.

### IO.SYS

IO.SYS ist eine Systemdatei in den Betriebssystemen MS-DOS, DCP und Windows 9x. Unter PC DOS und DR-DOS heißt die entsprechende Datei IBMBIO.COM. Bei FreeDOS wird diese Funktionalität durch eine Datei bereitgestellt, die meist den Namen KERNEL.SYS trägt. IO.SYS ist ein Teil des Kernels und wird zum Booten des Betriebssystems benötigt. Es handelt sich um eine Datei, die im Normalfall schreibgeschützt und nicht anzeigt wird, da sie unsichtbar oder „versteckt“ ist. Zusammen mit MSDOS.SYS (MS-DOS) bildet sie die Kernkomponente des Betriebssystems DOS. Bei IBM PC DOS und DR DOS heißen die entsprechenden DOS-Dateien IBMBIO.COM und IBMDOS.SYS. Prinzipiell reichen diese beiden Dateien und ein geladenes Programm, wie COMMAND.COM, um ein funktionstüchtiges DOS zu haben, sofern man auf weitere Treiber wie Maus-, Tastaturlayout- oder CD-ROM-Treiber verzichtet.
Das Setup von Windows 9x extrahiert unter anderem WINBOOT.SYS aus den Cabinet-Archiven auf dem Installationsmedium und benennt diese Datei gegen Ende des Prozesses in IO.SYS um.
Während des Bootvorgangs wird der Bootsektor vom Bootdatenträger in den Speicher eingelesen und ausgeführt. Der DOS-Bootsektor lädt die ersten drei Sektoren der Datei IO.SYS / IBMBIO.COM.
Zu diesem Zeitpunkt ist der FAT-Dateisystem-Treiber noch nicht geladen, weshalb diese Datei erstens ganz am Anfang des Datenbereichs des Datenträgers, zweitens unfragmentiert und drittens die erste Datei im Hauptverzeichnis sein muss. Ab DOS 4.0 darf die Datei bis auf die ersten drei Sektoren fragmentiert sein. Mit DOS 5.0 darf die Datei auf einem beliebigen Ort des Datenträgers gespeichert sein, wobei hier auch die ersten drei Sektoren zusammenhängend (nicht fragmentiert) sein müssen; die entsprechenden Angaben sind im Bootsektor hinterlegt.
Nachdem die ersten drei Sektoren der Datei eingelesen und ausgeführt wurden, wird der Rest der Datei eingelesen und es werden folgende Schritte durchgeführt:
* es werden Standardgerätetreiber geladen und verfügbar gemacht
* der DOS-Kernel MSDOS.SYS (bei IBM: IBMDOS.COM) wird geladen und initialisiert (in Windows 9x ist dieser in IO.SYS integriert). Ab diesem Zeitpunkt ist der Dateisystemtreiber geladen und der normale Datenträgerzugriff ist gewährleistet.
* Bei Windows 9x wird die Konfigurationsdatei (WINBOOT.INI bzw. MSDOS.SYS) des DOS-Kernels verarbeitet. Enthält diese im Options-Abschnitt keinen Eintrag BootMulti=0 und sind die relevanten Systemdateien einer vorherigen DOS-Version (MS-DOS, PC-DOS 5 oder 6) vorhanden, kann auch das alte System gestartet werden („Dualboot“-Option). Bei Auswahl dieser Option werden zuerst die aktuellen relevanten DOS-Dateien umbenannt, indem die Dateiendung durch W40 ersetzt wird. Eine Ausnahme bildet die Datei IO.SYS, die zu WINBOOT.SYS (Windows 95) / JO.SYS (Windows 98/ME) umbenannt wird. Dann erhalten die alten DOS-Systemdateien mit der Dateiendung DOS wieder ihren ursprünglichen Namen, der alte DOS-Kernel wird geladen und die Verarbeitung wird wie oben beschrieben wieder aufgenommen.
* die CONFIG.SYS-Datei wird verarbeitet (ab DOS 2.0) außer im „abgesicherten Modus“. Während des Bootvorgangs, erkennbar an einer Meldung wie „Windows 95 wird gestartet“, kann normalerweise per Drücken der Funktionstaste F5 direkt in diesen Modus gewechselt werden. Oder im Startmenü, welches typischerweise beim Betätigen von F8 erscheint, lässt sich dieser Modus auswählen. Er wird auch gestartet, wenn MSDOS.SYS im Options-Abschnitt den Eintrag BootSafe=1 enthält.
* Sofern in CONFIG.SYS kein anderer Kommandozeileninterpreter oder ein anderes ausführbares Programm per shell-Direktive definiert worden ist, wird die COMMAND.COM-Datei, die sich im Hauptverzeichnis befindet, gestartet und somit der MS-DOS-Kommandozeileninterpreter geladen. Dieser führt dann normalerweise AUTOEXEC.BAT aus.
* Normalerweise wird beim Starten von Windows 9x ein Startlogo angezeigt, wenn dies nicht durch den Eintrag Logo=0 in der Konfigurationsdatei unterbunden wird. IO.SYS generiert dieses anhand der Grafikdatei LOGO.SYS. Fehlt diese, so wird das in IO.SYS enthaltene Logo benutzt.