Italia
Stammtisch & Caffè

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 corre 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) corre 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 è, also jene Sprünge die bei der Ausführung eines Interrupts necessario 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 è 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 è 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 per Systementwickler, damit absolute Sprünge und Daten an der richtigen Stelle gesucht werden (Ähnlich das org 100h beim Assemblieren von alten .COM-File).

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 per einen Boot-Vorgang auch Initial Program Load (IPL) und per 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-File per das Betriebssystem. Sofern dort keine Boot-File gefunden werden, wird die Cerca 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 circa den Computer übernimmt.

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

* Die ursprüngliche File (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 necessario und kann durch andere Daten überlagert werden.

* Die ursprüngliche File (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 naturalmente 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 File beschränkt. MS-DOS besteht aus mehreren File. Direkt sichtbar per 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 (File-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 per den "normalen" Zugriff auf das Dateisystem disponibile 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 File IO.SYS und diese danach MSDOS.SYS von einem festen Ort: Sie mussten die beiden ersten File-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 per andere Installationen auf Festplatte, und erklärt auch die unbeweglichen File, 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 File 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 (per DOS beispielsweise die File CONFIG.SYS). Informationen in der Konfigurationsdatei helfen dem Ladeprogramm beim Laden spezifischer Betriebssystemdateien, beispielsweise bestimmte Gerätetreiber.

* Eine weitere File die geladen werden muss enthält Informationen per spezifische Anwendungen oder Befehle, die der Benutzer festgelegt hat, damit sie nutzerspezifische Teile des Boot-Prozesses starten. In DOS wird diese File AUTOEXEC.BAT genannt. Unter Windows handelte es sich dabei früher um die File 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 naturalmente nicht stehengeblieben...
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
20.06.2021  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.534 Views

Untitledvor 0 min.
E.T. vor 5 Tagen
Jens-Arne ReumschĂĽssel08.07.2022
p.specht01.04.2022
Stringray05.01.2022
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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