# BIOS (IBM PC)

Das PC-BIOS, im Kontext von IBM-PC-kompatiblen Computern durchwegs kurz als BIOS bezeichnet (IPA: [ˈbaɪɔs], Aussprache, von englisch basic input/output system), ist die System-Firmware des von IBM 1981 vorgestellten IBM PC „Model 5150“ und in Folge aller dazu kompatiblen Computer, was nahezu alle x86-PCs der zweiten Hälfte der 1980er Jahre, der 1990er und der 2000er Jahre umfasst. Neben Personal Computern wurde es aber auch beispielsweise in Workstations und Servern der x86-Architektur verwendet, um „PC-kompatibel“ zu sein. Das BIOS ist in einem nichtflüchtigen Speicher auf der Hauptplatine abgelegt und wird wie jede System-Firmware unmittelbar nach dessen Einschalten ausgeführt. Aufgabe des BIOS ist es unter anderem, den PC zunächst funktionsfähig zu machen und im Anschluss das Starten eines Betriebssystems einzuleiten.
Aufgrund des großen Erfolgs und der großen Verbreitung von IBM-PC-kompatiblen Systemen steht der Begriff „BIOS“ spätestens seit den 1990er Jahren allgemein für die System-Firmware eines Computers.
Das PC-BIOS ist funktionell durch dessen designierten Nachfolger Extensible Firmware Interface, kurz EFI, abgelöst. Diese ursprünglich ab 1998 für den Itanium von Intel entwickelte Firmware wird seit 2006 als Unified Extensible Firmware Interface, kurz UEFI, von mehreren Firmen gemeinsam weiterentwickelt. UEFI löste das BIOS seit ca. 2010 schrittweise ab, stellte anfangs allerdings eine BIOS-Kompatibilitätsschicht bereit – das englisch Compatibility Support Module oder kurz CSM – womit es voll zum BIOS kompatibel bleibt. Aufgrund dieses fließenden Übergangs wird UEFI oft auch als UEFI-BIOS sowie dessen Firmware-Setup oft auch (weiterhin) als BIOS-Setup bezeichnet. Laut Intel sollte das CSM, also der BIOS-Modus und somit die Kompatibilität, spätestens ab 2020 von den Herstellern weggelassen werden, was diese auch taten. Moderne Weiterentwicklungen der IBM-PC-kompatiblen Computer, wie x64-PCs mit UEFI ohne CSM, können daher Betriebssysteme und Boot-Medien, die ein PC-BIOS erfordern, nicht mehr starten.

## Funktionen

Durch modernere Hardware hat das BIOS im Laufe der Zeit neue Funktionen hinzugewonnen. Nicht alle der im Folgenden genannten Punkte wurden schon vom Ur-BIOS auf dem ersten IBM PC ausgeführt. Die Weiterentwicklung der Hardware hat im Laufe der Zeit (mit dem BIOS-Ende um 2020 ist das Konzept bereits mindestens 45 Jahre alt) zu einer Reihe von iterativen, inkompatiblen Ergänzungen geführt, die zunehmend den Charakter von „Flickschusterei“ tragen und bei 64-Bit-Systemen an ihre Grenzen stoßen. Daher wurde in Form von Extensible Firmware Interface (EFI, bzw. UEFI) ein BIOS-Nachfolger entwickelt.
Im Wesentlichen führt das BIOS, bevor das Betriebssystem gestartet wird, die folgenden Funktionen aus:
* Power On Self-Test (POST)
* Initialisierung der Hardware
Wichtiger Bestandteil der Hardware-Initialisierung eines Plug-and-Play-BIOS ist die Konfiguration und Überprüfung von eingebauten Steckkarten.
Dazu werden in einem speziellen Speicherbereich des BIOS, dem Bereich Extended System Configuration Data (kurz ESCD), Informationen zu Zustand und Konfiguration von ISA-, PCI- und AGP-Steckkarten und die entsprechende Ressourcenzuteilung verzeichnet. Die Informationen im ESCD-Bereich werden beim Bootvorgang mit dem tatsächlichen Zustand des Systems verglichen und bei Änderungen gegebenenfalls aktualisiert. Das Betriebssystem greift auf die Informationen im ESCD-Bereich zurück und kann Änderungen der Plug-and-Play-Ressourcenzuordnung dort speichern, um Veränderungen durch das BIOS beim nächsten Start vorzubeugen.
* Aufforderung zur Eingabe eines BIOS-Passworts (falls konfiguriert)
* Aufforderung zur Eingabe eines Festplatten-Passworts (falls konfiguriert)
* Darstellung eines Startbildschirms
* Möglichkeit, ein BIOS-Konfigurationsmenü aufzurufen: das „BIOS-Setup“
* Aufrufen von BIOS-Erweiterungen einzelner Subsysteme, die entweder auf Steckkarten untergebracht sind oder direkt auf dem Mainboard integriert sind, z. B.:
** Grafikchip
** Netzwerkchip
** SCSI-Controller
** RAID-Controller
* Festlegen einer Bootreihenfolge, also von welchem Datenträger als erstes in einer festgelegten Abfolge gestartet werden soll; dies beschränkt sich im Allgemeinen, wie schon beim ersten BIOS des IBM PC 5150 von 1981, darauf, den ersten Datenblock (Bootsektor) des gewählten Datenträgers zu laden, der einen Bootloader enthalten muss.
Danach übernimmt das Programm im geladenen Bootsektor die Kontrolle über den Rechner. Meistens lädt und startet ein Bootloader entweder (stufenweise) ein auf dem Datenträger installiertes Betriebssystem oder einen Bootmanager, der ein Menü zur Auswahl eines Betriebssystems anbietet. Bei klassischen im Real Mode laufenden Betriebssystemen wie MS-DOS bzw. dazu kompatibles DOS o. ä. wird das BIOS auch im weiteren Betrieb genutzt. Es übernimmt für das Betriebssystem die Kommunikation mit diverser Hardware, z. B.:
* Tastatur
* Serielle und parallele Schnittstellen
* Systemlautsprecher
* Grafikkarte
* Diskettenlaufwerke
* Festplattenlaufwerke
Andere, moderne Arten von Hardware werden vom BIOS nicht bedient. Zur Ansteuerung beispielsweise einer Maus ist unter DOS ein spezieller Hardwaretreiber nötig.
Neuere, treiberbasierte Betriebssysteme wie beispielsweise Linux oder Windows nutzen diese BIOS-Funktionen nicht. Sie laden für jede Art von Hardware einen speziellen Treiber. Jedoch müssen sie am Anfang ihres Startvorgangs über den Bootloader noch kurz auf die BIOS-Funktionen zur Ansteuerung der Festplatten zurückgreifen, um ihren Festplattentreiber zu laden. Einer der wesentlichen Gründe warum moderne Betriebssysteme das BIOS nicht mehr nutzen ist unter anderem die Tatsache, dass das BIOS nicht vom Protected Mode aus benutzt werden kann. Die CPU müsste vorher in den Real Mode versetzt werden, was Zeit und somit Performance kostet und unter modernen Systemen auch eine Schwachstelle sein kann, da im Real Mode kein Speicherschutz gewährleistet werden kann. Außerdem ist der Real Mode auf einen maximalen Adressraum von 1 MiB begrenzt, was insbesondere beim Einblenden von Video RAM und dessen Zugriff auf diesem ein spürbarer Nachteil wäre.

## BIOS-Einstellungen

Um in das Setup-Programm des BIOS zu gelangen, muss beim Einschalten des Rechners eine bestimmte Taste oder Tastenkombination betätigt werden. Bei einigen wenigen Mainboards muss ein bestimmter Jumper gesetzt werden.
Die Einstellungen werden in einem CMOS-Speicher gespeichert, der über die Mainboard-Batterie auch ohne Netzanschluss mit Strom versorgt wird. Oft ist dieser Speicher mit der Echtzeituhr des Systems kombiniert, da auch diese immer mit Strom versorgt werden muss. Bei Schwierigkeiten bietet das BIOS meist die Möglichkeit, die Standardeinstellungen des Rechner- oder des BIOS-Herstellers zu setzen. Wenn es nicht mehr möglich ist, ins Setup-Programm zu kommen (etwa, weil der Rechner gar nicht mehr bootet), lassen sich die Einstellungen meist über einen Jumper am Mainboard zurückstellen (bei allen neueren Mainboards muss dafür das Netzteil ganz abgeschaltet werden). Wenn das nicht möglich ist, kann der CMOS-Speicher durch das Entfernen der Batterie gelöscht werden. Letzteres benötigt aber einige Zeit, bis auch die Kondensatoren entladen sind.

### Sicherheit

Das BIOS ist die zweite Sicherheitsstufe, die unberechtigten Zugriff auf einen Computer verhindern kann, nach einer physischen Sicherung mit Schlössern oder Ähnlichem. Bei fast allen BIOS-Implementierungen kann im BIOS-Setup eine Passwortabfrage vor dem Starten des Rechners eingerichtet werden. Das stellt keine vollständige Sicherung des Systems dar, da die Einstellungen bei physischem Zugang zum Computer mehr oder weniger leicht durch ein Löschen des Inhalts im CMOS-RAM ausgehebelt werden können, was entweder durch Setzen eines Jumpers oder durch das Entfernen der CMOS-Batterie auf der Hauptplatine geschehen kann. Die Passwortsicherung wirkt klarer Weise jeweils nur auf der Hauptplatine, auf der sich das BIOS enthaltende ROM befindet. Wird diese ausgetauscht oder die Festplatte(n) des Systems in einen anderen Rechner eingebaut, kann problemlos auf diese zugegriffen werden, wenn keine zusätzliche Sicherung (wie Verschlüsselung) vorhanden ist. Zudem haben die Hersteller meist ein sogenanntes Recovery-, Master- oder Supervisor-Passwort eingerichtet, um den Zugang wiederherstellen zu können, wenn der Benutzer sein eigenes Passwort vergessen hat. Diese Master-Passwörter sind jedoch meist unveränderbar und oftmals auch geleakt, sodass teils eine einfache Umgehung des Passwortschutzes möglich ist.

## Aktualisieren des BIOS

Bei alten Mainboards (mit 286 bis 486er Prozessor) ist im BIOS die Option „SHADOW BIOS MEMORY“ vorhanden. Dabei wird das BIOS in eigener Prozedur in das zugriffschnellere RAM kopiert (temporäre Schattenkopie bis zum Ausschalten des Computers). Seitdem (ab spätere 486er / Pentium1) der überwiegende Teil des BIOS gepackt abgelegt ist und damit ein günstigerer BIOS-Chip genügt, steht diese Option nicht mehr zur Verfügung, da das BIOS auf jeden Fall ins RAM entpackt werden muss. Hersteller wie Award verwendeten zum Packen von ihrem BIOS das LHA-Format.
Auf modernen Hauptplatinen ist das BIOS in einem wiederbeschreibbaren Speicher (genauer EEPROM, meist Flash-Speicher) abgelegt. Daher kann es ohne Ausbau dieses Chips durch neuere Versionen ersetzt werden („Flashen“). Da ein Rechner ohne vollständiges BIOS jedoch nicht funktionsfähig ist, stellt dieser Vorgang immer ein gewisses Risiko dar. Wird er unterbrochen, beispielsweise durch einen Stromausfall, muss der Chip, auf dem das BIOS gespeichert ist, normalerweise ausgetauscht werden. Als Alternative wird im Internet von verschiedenen Institutionen auch das Neuprogrammieren des Chips angeboten. Selbst aufgelötete Flash-Speicher stellen für Fachpersonal nur ein geringfügiges Problem dar. Auf neuen Boards werden immer häufiger sogenannte serielle Flashspeicher verwendet, die es im Fehlerfall teilweise ermöglichen, per SPI-BUS auf dem Board neu programmiert zu werden.

### Bootblock

Mit der Zeit entwickelten American Megatrends, Award Software, Phoenix und andere Hersteller „BootBlock“/Wiederherstellungs-BIOS-Bereiche, die bei einem Flash-Vorgang dann normalerweise nicht mehr überschrieben werden. Schlug der Flash-Vorgang fehl, startet das „BootBlock“/Wiederherstellungs-BIOS und ermöglicht es, von Diskette zu booten. Bei einigen BIOS-Varianten kann sogar eine spezielle Wiederherstellungs-CD/-Diskette erstellt werden, die auch bei einem defekten BIOS durch Setzen eines Jumpers automatisch das BIOS wiederherstellt. Dazu sind keinerlei Benutzereingaben und keine grafische Ausgabe nötig, da diese bei defektem BIOS meist ohnehin nicht mehr funktionieren.
Einige Hauptplatinen bieten ein sogenanntes DualBIOS an. Im Fehlerfall kann das zweite (noch intakte) BIOS den Startvorgang übernehmen und die Änderung rückgängig gemacht werden. Das kann beim Flashen des BIOS ein Rettungsanker sein, sollte die neu aufgespielte BIOS-Version nicht funktionieren. Des Weiteren können mit einem DualBIOS verschiedene BIOS-Einstellungen geladen werden.
Da das Aktualisieren eines Flash-BIOS heute schon unter einem laufenden Windows möglich ist, eröffnen sich damit neue Einfallswege für Viren-Befall. Wenn auf diesem Wege beispielsweise ein Rootkit installiert würde, könnte es sich noch einmal wesentlich effizienter gegen Entdeckung und Löschung abschotten. Außerdem kann ein Absturz des Betriebssystems während des Flashens den PC eventuell unbootbar machen (siehe oben).

## BIOS-Hersteller

Eine Auswahl von Herstellern von BIOSen für IBM-kompatible PCs:
* American Megatrends, abgekürzt AMI
* Phoenix/Award – Award und Phoenix haben 1998 fusioniert. Award wird von dem Unternehmen als Desktop-Produkt geliefert. Die Phoenix-Produktreihe wird hingegen bei Servern und Laptops eingesetzt.
* MR BIOS
* ATI Technologies
* IBM
* Insyde

## Nachfolge

Bis UEFI System Class 2 enthalten UEFI-Implementierungen auf der x86-Architektur ein Compatibility Support Module oder kurz CSM, das vollständige BIOS-Kompatibilität herstellt. Zur eindeutigen Kennzeichnung wurde das PC-BIOS im Kontext von UEFI als „Legacy BIOS“ bezeichnet – englisch legacy für Altlast: das BIOS als altes, überholtes bzw. abgekündigtes System, für das UEFI der moderne Nachfolger ist.
Der Übergang vom BIOS hin zu UEFI wurde in vier Klassen (englisch Class) eingeteilt.
* UEFI System Class 0 ist kein (U)EFI, sondern ein „Legacy BIOS“.
* UEFI System Class 1 nutzt UEFI, gibt aber mithilfe des CSM vor, ein BIOS zu sein. Es stehen keine (U)EFI-Funktionen für Betriebssysteme oder Programme zur Verfügung.
* UEFI System Class 2 ist ein UEFI, bietet aber sowohl (U)EFI- als auch BIOS-Funktionen, sodass Betriebssysteme für beide Firmwares starten können.
* UEFI System Class 3 ist ein UEFI ohne „Legacy BIOS“-Funktionen – das CSM ist nicht mehr implementiert.
Das erste PC-Betriebssystem mit EFI-Unterstützung war Linux, allerdings auf der Itanium-Architektur. Auf x86 kann Linux, seit Kernel 2.6.25 von 2008, sowohl in der 32- als auch der 64-Bit-Variante mit (U)EFI gestartet werden.
2006 war Apple einer der ersten Hersteller von Desktop-PCs und Notebooks, der EFI einsetzte. So ist auf Intel-Macs eine Apple-Variante von EFI 1.1 für macOS, jedoch mit einem CSM für Boot Camp bzw. für Kompatibilität zu Windows vorhanden.
Auch auf x86-PCs anderer Hersteller wurde UEFI nach und nach eingeführt, allerdings unterstützten anfangs wichtige Betriebssysteme UEFI noch nicht, weshalb UEFI-CSM im BIOS-Setup als Voreinstellung (englisch default) bis in die erste Hälfte der 2010er Jahre stets aktiv war. Betriebssysteme, die ein BIOS voraussetzen, beispielsweise Windows XP und Windows Vista, blieben somit Out-of-the-box kompatibel. Mit Windows Vista Service Pack 1 von 2008 begann schließlich auch Microsoft UEFI für 64-Bit-Windows zu unterstützen, allerdings wird UEFI 2.0 oder höher vorausgesetzt, da EFI 1.1 noch eine 32-Bit-Implementierung (IA-32) war – erst UEFI 2.0 wurde vollständig auf x86-64 portiert. Bis Windows 7, wie Vista SP1 grundsätzlich UEFI-fähig, benötigte Windows auf der 64-Bit-x86-Architektur BIOS-Kompatibilität für den Grafiktreiber (ein VBIOS mit Interrupt 10h), wofür ein geladenes CSM unter UEFI die Voraussetzung ist. Alle 32-Bit-PC-Versionen von Windows benötigen weiterhin ein BIOS oder (U)EFI-CSM; Windows 10 ist die letzte Windows-Version, die für IA-32 und somit BIOS-kompatibel verfügbar ist.
Auch Intel-Macs ab ca. 2013 (x64-Architektur) sind zu UEFI 2.0 kompatibel, obwohl sich das Apple-EFI oft noch als Version 1.1 identifiziert. Auf Arm-Macs, die als „Apple Silicon“ zwischen 2020 und 2023 die Intel-Macs schrittweise ablösten, implementiert Apple eine eigene (proprietäre) Firmware im Secure Enclave Processor. Auf der Arm-Architektur mit Windows RT verwendet Microsoft weiterhin UEFI, beispielsweise auf dem Surface-Tablet (da es sich bei Arm um keine x86-kompatible Architektur handelt, gibt es dort auch kein BIOS-kompatibles CSM).
Mit Windows 8 hat sich UEFI auf dem (ehemals IBM-kompatiblen) PC durchgesetzt. Die meisten x86-Systeme dieser Zeit haben ein Class-2-UEFI, teils mit aktiviertem CSM, teils mit deaktiviertem CSM als Voreinstellung. Da bei aktiviertem Secure Boot das CSM nicht mehr geladen werden darf, hat sich die Voreinstellung bis Windows 10 gänzlich in Richtung UEFI, ohne Kompatibilität zum PC-BIOS („Legacy BIOS“), verschoben. Seit rund 2020 werden Systeme durchwegs mit einem Class-3-UEFI ausgeliefert, womit der Übergang zum BIOS-Nachfolger als abgeschlossen zu betrachten ist.

## Kritik

Firmware-Schnittstellen wie das PC-BIOS sind sehr tief im System verankert und daher potenziell sicherheitskritische Komponenten.
Punkte, die zu einer kritischen Betrachtung eines herstellerabhängigen BIOS führen:
* Proprietärer Code: Absichtliche oder unabsichtliche Sicherheitslücken entziehen sich der öffentlichen Kontrolle (Möglichkeit der Ausspähung, Manipulation und Industriespionage) – die NSA erarbeitete 2010 dazu eine Durchführbarkeitsstudie.
* Es gibt nur wenige BIOS-Produzenten – diese residieren in den USA und unterliegen deren Bestimmungen.

## Freie BIOS-Alternativen

Die verschiedenen BIOS-Implementierungen der IBM-kompatiblen PCs sind im Regelfall proprietäre Software, was Unsicherheiten bergen kann: da der Quelltext nicht frei zugänglich ist, werden Sicherheitslücken teilweise nicht rechtzeitig erkannt. Auch kann ein proprietäres BIOS den Benutzer an Tätigkeiten hindern, die von der Hardware des Gerätes her kein Problem darstellen würden: so erlaubt beispielsweise das BIOS der Xbox es nicht, andere Software als die von Microsoft zugelassene zu starten.
Alternative BIOS-Implementierungen gibt es zwar, eine Installation ist jedoch nicht einfach möglich. So ist es zwar teilweise möglich, den Flash-ROM-Baustein (früher: EPROM), auf dem das BIOS abgelegt ist, zu ersetzen oder zu überschreiben, um so beispielsweise den Linux-Kernel direkt aus dem Flash heraus zu starten, ohne BIOS. Die Vorgehensweise ist jedoch von der jeweiligen Hauptplatine abhängig und wird überwiegend in Industriecomputern eingesetzt. Projekte mit diesem Ziel sind etwa Coreboot (ehemals LinuxBIOS) oder der Fork Libreboot, der ohne BLOBs auskommt. Die freie BIOS-Implementierung von Coreboot, SeaBIOS, wird auch unter diversen Emulatoren und Virtualisierungssoftware eingesetzt, etwa QEMU und KVM. Das OpenBIOS ist übrigens keine Implementierung des PC-BIOS, sondern der dazu nicht kompatiblen Open Firmware.

## Normen, Standards, Richtlinien
### Standard über das Zusammenwirken von BIOS-Systemstart, Initial Program Load und BIOS-Funktionsergänzungen

Das Zusammenwirken von BIOS-Systemstart, Initial Program Load und BIOS-Funktionsergänzungen wurde von einem Firmenkonsortium bestehend aus Hardware- und BIOS-Herstellern ausgearbeiteten und am 11. Januar 1996 standardisiert: Die BIOS Boot Specification (kurz: „BBS“) fixiert insbesondere, auf welche Art und Weise Initial-Program-Load- (Bootstrapload-)Komponenten, die (den BIOS-Systemstart fortsetzend) das Hochlaufen der jeweiligen Betriebssysteme herbeiführen, vom BIOS identifiziert werden und wie unter Vorgabe der durch den Computerbenutzer festgelegten Priorität (entsprechend der sogenannten Bootsequenz) versucht wird, eine oder mehrere der jeweiligen Komponenten zur Ausführung zu bringen.
Direkt oder indirekt legt dieser Standard auch fest, wie etwa ein Initial Program Loader (Bootstraploader) ein auf das BIOS abgestimmtes Verhalten zustande zu bringen hat und wie das BIOS das jeweils gerade verwendete Bootmedium (Festplatte, optische Laufwerk-Disk, USB-Stick, PCMCIA-Netzwerkkarte, Ethernetkarte oder dergleichen) für den Loader handhabt.
Für die Bereitstellung von Bootmechanismen spielt die Programmierschnittstelle zwischen BIOS-Verwaltung und Bootverwaltung, das sogenannte „BIOS Boot Specification API“, eine Rolle, wobei die Implementierung dieser Mechanismen in der Regel sowohl hardware- als auch softwaremäßig erfolgt (sofern man jeweils ganze Bootmechanismen ins Auge fasst). Hardwaremäßig kann eine solche Implementierung durch BIOS-Funktionsergänzungen bewerkstelligt werden, etwa wenn das Motherboard-BIOS durch ergänzende Add-In-Firmware-BIOSe von Netzwerk-, SCSI- oder RAID-Adaptern erweitert und/oder partiell ausgetauscht wird. Softwaremäßig kann eine solche Implementierung durch Programmierung entsprechender Routinen bzw. Treiber geschehen, sofern diese speicherresident untergebracht werden können; unter gewissen Voraussetzungen können auch Initial Program Loader bzw. Bootstraploader bei der Bereitstellung von unkonventionellen Bootmechanismen besondere Funktionen einnehmen bzw. eine besondere Rolle spielen. Beim Rechnerhochlauf via Netzwerkkarte sind die meisten Bootmechanismen weit komplizierter als beim klassischen (einfachen) Initial Program Load. In diese Kategorie gehört beispielsweise der Fall, dass der Rechnerhochlauf von einem außenstehenden Rechner über das Netzwerk (etwa via Fast-Ethernetadapter) angestoßen wird (siehe auch Wake on LAN). Das Motherboard-BIOS, das im Regelfall keinen Treibercode für das Booten über eine bestimmte Netzwerkkarte besitzt, wird durch Add-In-Firmware auf der Netzwerkkarte unter Beachtung der Vorgaben des BIOS Boot Specification APIs ergänzt, so dass eine speicherresidente Routine im Dienste der Netzwerkkarte den Bootmechanismus umlenken und die Netzwerkkarte als wählbares Bootmedium am System anmelden kann. Nach erfolgter Auswahl der Netzwerkkarten-Bootoption im BIOS geht dann der BIOS-Systemstart in eine Netzwerkkommunikation über, in der Auskünfte über Bootserveradressen eingeholt werden und Abfragevorgänge stattfinden. Das beinhaltet eine Art „Bereitschaftszustand“ des Rechners, der durch Auslösung übers Netzwerk jederzeit hochfahrbar wird. Auf die richtige Meldung hin wird der Bootstraploader in den RAM-Speicher heruntergeladen und ausgeführt.