Deutsch
Stammtisch & Café

Wie ein (alter) PC startet - stimmt das heute noch ??

 

p.specht

Die Installation des Betriebssystems auf einem Computer ist in der Regel eine einmalige Anfangsaktivität, im Gegensatz zum fast alltäglichen Systemstart:

Wie ein PC (Personal Computer) bootet
(Quelle: Diverseste Internet-Seiten + Gedächtnisrudimente)

Boots sind Stiefel, genau Reiterstiefel mit Schlaufen dran, sog. Boot-Straps. Wer erinnert sich nicht an die Münchhausen-Geschichte, als der sich an seinen eigenen Boot-Straps aus dem Sumpf zog! Ähnlich paradox verläuft der Start eines Computers, engl. abgekürzt "booten". Der ist zuerst einmal ein Haufen vollkommen dummer Elektronik.

Warum das Thema interssiert?
Ich hatte einen PC via eBay-Kleinanzeigen gekauft, der als "bootet nicht" ausgeschrieben war. Es stellte sich heraus, dass seine Bootdisk nicht okay war; mit einem neu erstellten USB-Stick hat es dann funktioniert. Nur: Bis ich da drauf kam, dauerte es lange! Was beim Booten eines PCs alles passiert, ist ganz schön komplex, und mein Wissen dazu stammte aus 1995 ...


PCs, damals und heute
"Alte" PCs starten mit dem BIOS (basic input/output system) im flash-Speicher (rewriteable read only memory) und im späteren Verlauf mit dem Bootloader aus MS-DOS-Zeiten.Heute läuft das mit UEFI (Unified Extensible Firmware Interface), ein grafisches "BIOS", in dem man die Reihenfolge der Bootmedien mit der Maus einrichtet.

Der Boot-Vorgang des Ur-PCs, des IBM PC 5150
Wie es mit de-facto-Standards so ist, haben ihn alle IBM-kompatiblen PCs übernommen, sodass man so ziemlich das gleiche Vorgehen bis in die Pentium-Generation hinein sehen kann. Das einzige, das wirklich anders ist, betrifft die physikalische Speicheradresse, an der die CPU mit der Abarbeitung beginnt.
Bei einem IBM-PC begann der Startvorgang mit der Betätigung des Power-Schalters, meist hinten rechts am Netzteil. Zit: "Aus Sicht des Informatikers sind Netzteile gruselige Orte, um aus der Spannung, die Menschen tot macht, die Spannungen zu erzeugen, die elektronische Bauteile antreiben."

Innerhalb des Netzteils gelten die Regeln der analogen Welt: Spannungen nähern sich ihren Sollwerten kontinuierlich an, Oszillatoren schwingen sich ein. Mit den aus digitaler Sicht undefinierten Zwischenwerten kann der Rest des PCs nicht viel anfangen, weshalb das Netzteil beim Starten etwas Vorsprung bekommt. Erst wenn die Spannungen stabil sind, darf der Rest des PCs loslaufen, gesteuert durch das Signal "Power Good" des Netzteils. Bei der altgedienten AT-Steckerbelegung befand sich dieses Signal auf Pin 1 des P8-Steckers und trägt dort meistens die Farbe orange.

Die CPU (Central Processing Unit) läuft los
Für den nächsten Schritt schauen wir uns die Intel-8088-CPU an, die bekanntlich den ersten PC angetrieben hat. Wenn diese mit Spannung versorgt wird (bzw. einen Reset durchläuft), beginnt sie die Ausführung von Code an der Adresse FFFF0H. Das ist der Anfang der höchsten 16 Byte des gesamten damaligen Adressbereichs, der sich von 00000H bis FFFFFH erstreckte (20 Bit => 1 MByte).

Warum ausgerechnet dort, anstatt vorne bei 0? Weil sich im Bereich von 0H bis 3FFh bei diesem Prozessortyp die Interrupt-Sprungtabelle befindet, also jene Sprünge die bei der Ausführung eines Interrupts benötigt werden. Wahrscheinlich wurde dadurch irgendetwas effizienter oder eleganter (kürzere Sprünge in den
Programmcode?). Und weil das Booten sehr viel seltener stattfindet als das Ausführen eines Interrupts zur Laufzeit, ergibt es Sinn, auf den häufigeren Fall zu optimieren.

Bei späteren CPUs mit größerem Adressbereich wurde das Schema beibehalten, die Ausführung beginnt in den letzten 16 Byte. Das heißt ein 80286 beginnt mit der Ausführung an Adresse FFFFF0H (24 Bit) und ein 80386 an Adresse FFFFFFF0H (32 Bit).

Aber was kann man mit 16 Byte anfangen? Nicht viel, daher steht dort nur ein Sprungbefehl zum Einstiegspunkt des BIOS-Programms, z.B. FE05Bh am Beispiel des IBM PCs mit 8088-CPU.

Für alle, die die Eleganz dieses Konzepts verstehen wollen:
* Die CPU beginnt an einer festen Adresse, die vom Prozessor-Hersteller in die CPU gebrannt wurde. Die CPU "weiß" da noch nicht, ob sie ein PC, eine Waschmaschine oder eine Ölpumpensteuerung wird.
* Der PC-Hersteller (OEM - Original Equipment Manufacturer) legt adressmäßig erst einmal einen ROM-Baustein dort hin, dessen Inhalt er selbst definiert. An der festen Adresse steht ein Sprungbefehl zum OEM-spezifischen Programmanfang.

Das BIOS und der Bootsektor
Das BIOS des Ur-PCs liegt im Bereich von FE000H bis FFFFFH (8192 Byte), wobei der Anfang nicht ausführbar ist und Dinge wie die Teilenummer und Copyright-Angaben enthält. Ab FE05BH geht der Programmcode los, der den PC erst einmal in einen arbeitsfähigen Zustand bringt. Dazu gehört z.B. das Initialisieren (= in einen definierten Zustand bringen) der internen und externen Hardware. Irgendwann später kommt der Moment, an dem die Kontrolle vom BIOS zum Betriebssystem übergeht. Doch wo befindet sich dieses?

Es folgt wieder eine Kombination nach dem Schema "fester Ort, dynamischer Sprung". Wir gehen davon aus, dass die Bootreihenfolge so eingestellt ist, dass vom ersten Laufwerk (Kennung drive0) gestartet werden soll. Das BIOS lädt den ersten Sektor (fester Ort auf der Platte) in den Speicher und führt ihn aus. Dabei ist es eine Konvention, dass der Code an die Adresse 7C00H geladen wird. Dies ist wichtig für Systementwickler, damit absolute Sprünge und Daten an der richtigen Stelle gesucht werden (Ähnlich das org 100h beim Assemblieren von alten .COM-Dateien).

Der erste Sektor der Disk, auch Bootsektor genannt, beginnt nun mit dem dynamischen Sprung. Warum das, wenn der Code doch komplett beliebig ist? Weil am Anfang der Disk auch noch dateisystemspezifische Informationen wie das Dateisystem selbst (Typ, Version), die Geometrie des Datenträgers (Einteilung in physische Sektoren und Abschnitte), Name des Mediums, usw. abgelegt sind. Dies muss nämlich auch jederzeit auffindbar sein und macht daher ebenfalls vom "fester Ort"-Prinzip Gebrauch.

Allgemeiner: Bei größeren Computern (einschließlich Großrechnern) lautet die entsprechende Bezeichnung für einen Boot-Vorgang auch Initial Program Load (IPL) und für einen Reboot re-IPL. Das Booten eines Betriebssystems beginnt mit einem sehr kleinen Programm. Sobald dieses in den Computer geladen wurde, gibt es die Programmsteuerung ab, sodaß das gesamte Betriebssystem nachgeladen wird und die Steuerung des Rechners übernimmt.

Also:
* Sobald der Computer eingeschaltet wird, wird das BIOS (Basic Input-Output System) auf dem System-ROM (Read-only Memory oder flash-Speicher) gestartet und übernimmt erstmal die Steuerung des Rechners.

* Das BIOS startet zunächst einen Power-On Self Test (POST), um sicherzustellen, dass alle Computerkomponenten betriebsbereit sind.

* Dann wird das Boot-Programm geladen, um das Betriebssystem in den Arbeitsspeicher laden zu können.

* Im nächsten Schritt sucht das Boot-Programm auf einem Laufwerk oder angeschlossenem USB-Gerät nach Boot-Dateien für das Betriebssystem. Sofern dort keine Boot-Dateien gefunden werden, wird die Suche auf der Festplatte fortgesetzt. Diese Boot-Reihenfolge kann im BIOS festgelegt werden.

* Nachdem das Boot-Laufwerk identifiziert wurde, überprüft das BIOS als nächstes den ersten Sektor und kopiert Daten in den RAM-Speicher des Computers. Diese Informationen und Daten werden auch als Boot Record oder Master Boot Record bezeichnet.

* Anschließend lädt das BIOS den Boot Record in den Arbeitsspeicher. Der Boot Record enthält ein Programm, das das BIOS nun nutzt und die Kontrolle über den Computer übernimmt.

* Der Boot Record lädt die anfängliche Systemdatei (für DOS-Systeme beispielsweise IO.SYS) von einem Laufwerk oder der Festplatte in den Arbeitsspeicher.

* Die ursprüngliche Datei (beispielsweise IO.SYS, die ein Programm namens SYSINIT enthält) lädt dann den Rest des Betriebssystems in den Arbeitsspeicher. An dieser Stelle wird der Boot Record nicht mehr benötigt und kann durch andere Daten überlagert werden.

* Die ursprüngliche Datei (beispielsweise SYSINIT) lädt eine Systemdatei (zB MSDOS.SYS), die auch mit dem BIOS arbeiten kann.

Der vom Anfang des Bootsektors angesprungene Code ist nun betriebssystemspezifisch und erledigt den Rest. Wie dieser Rest aussieht hängt natürlich stark vom Betriebssystem ab. Im Folgenden betrachte ich ein MS-DOS-Betriebssystem - das war damals noch am einfachsten:

MS-DOS startet
Anmerkung: Das konnte auch IBM PC-DOS heißen, die Unterschiede sind hier marginal und im Wesentlichen auf die Benennung der Dateien beschränkt. MS-DOS besteht aus mehreren Dateien. Direkt sichtbar für den Benutzer ist COMMAND.COM (Ab der 64bit-Generation als cmd.exe emuliert), das ist der Console-Befehlsinterpreter. Weiterhin gibt es noch Systemeigene Gerätetreiber analog zu IO.SYS und MSDOS.SYS (DOS-Kernel), die normalerweise versteckt sind (Datei-Attribute S, H und R). Der Code aus dem Bootsektor lädt die ersten drei Sektoren von IO.SYS in den Speicher und führt sie aus. Dieser Anfang von IO.SYS lädt den Rest nach, initialisiert die Geräte und fährt danach mit dem Laden und Ausführen von MSDOS.SYS fort. Danach sind die Funktionen für den "normalen" Zugriff auf das Dateisystem verfügbar und die Abarbeitung von CONFIG.SYS und schließlich der Command-Shell (Prompt C:>) erfolgen.

Auch hier war übrigens ein "fester Ort" am Werk: der Bootsektor-Code lädt die Datei IO.SYS und diese danach MSDOS.SYS von einem festen Ort: Sie mussten die beiden ersten Datei-Einträge des Stammverzeichnisses sein. Darüber hinaus dürfen sie nicht fragmentiert sein (d.h. alle ihre Sektoren müssen direkt aufeinander folgen). Das ist notwendig, weil der "richtige" Dateisystem-Treiber (FAT32, NTFS oder exFAT) erst in dem MSDOS.SYS-Analogon enthalten ist und der Boot-Code selbst noch viel primitiver (maschinen-näher) zu Werke geht.

Das Gleiche gilt übrigens auch für andere Installationen auf Festplatte, und erklärt auch die unbeweglichen Dateien, die man etwa in der Detailansicht von DEFRAG.EXE sehen kann. Weiterhin sollte an dieser Stelle auch nachvollziehbar sein, warum Bootmedien nicht einfach dadurch erzeugt werden können, dass man die notwendigen Dateien draufkopiert: Sie müssen zum einen an einem ganz bestimmten Ort liegen (- das ginge vielleicht noch durch das Kopieren in der richtigen Reihenfolge), zum anderen muss der Bootsektor den passenden Code enthalten. Unter MS-DOS erledigt das Programm SYS.COM genau diese Schritte.

Zusammenfassung
* Eine der ersten Betriebssystemdateien, die geladen wird, ist eine Systemkonfigurationsdatei (für DOS beispielsweise die Datei CONFIG.SYS). Informationen in der Konfigurationsdatei helfen dem Ladeprogramm beim Laden spezifischer Betriebssystemdateien, beispielsweise bestimmte Gerätetreiber.

* Eine weitere Datei die geladen werden muss enthält Informationen für spezifische Anwendungen oder Befehle, die der Benutzer festgelegt hat, damit sie nutzerspezifische Teile des Boot-Prozesses starten. In DOS wird diese Datei AUTOEXEC.BAT genannt. Unter Windows handelte es sich dabei früher um die Datei WIN.INI, nunmehr werden Einträge der Registry (der Systemdatenbank) abgearbeitet.

* Nachdem alle Betriebssystemdateien geladen wurden, erhält das Betriebssystem selbst die Steuerung des Computers, führt anfängliche Befehle durch und wartet auf die ersten Benutzereingaben.

Soweit mein Rückblick. Aber die Zeit ist natürlich nicht stehengeblieben...
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
20.06.2021  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.533 Betrachtungen

Unbenanntvor 0 min.
E.T. vor 5 Tagen
Jens-Arne Reumschüssel08.07.2022
p.specht01.04.2022
Stringray05.01.2022
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

p.specht (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie