Wie der Server startet


Das Starten eines Servers ist eine lange und komplexe Abfolge von Aktionen, abhängig von der Hardwarekomponente, den Einstellungen und der verwendeten Software. Viele, selbst erfahrene und qualifizierte Systemadministratoren, haben eine schlechte Vorstellung davon, was genau passiert, wenn der Server gestartet wird. Daher haben wir uns entschlossen, diesen Prozess im Detail zu analysieren.

Um nicht alle möglichen Fälle zu zerlegen, werden wir das Laden unter den folgenden Bedingungen in Betracht ziehen:

  • 64-Bit-Intel-Prozessor;
  • Legacy-Startmodus
  • Festplattenpartitionierung MBR;
  • Bootloader GRUB2.

Wach auf und singe


Das Einschalten des Servers wird auf verschiedene Arten eingeleitet, wobei das Drücken der Einschalttaste am häufigsten, aber nicht die einzige ist. Eine weitere Option ist ein Befehl über das Netzwerk ( Wake-on-LAN ) oder Befehle von externen Geräten ( Wake-on-PCIe , Wake-on-Keyboard , Wake-on-Mouse ). Befehle werden nur ausgeführt, wenn die entsprechenden Parameter im BIOS-Setup-Dienstprogramm aktiviert sind, worauf wir später noch eingehen werden.

Ein separates Gerät ist das BMC-Modul, das erweiterte Serververwaltungsfunktionen bietet. Lesen Sie mehr über diese Technologie in unserem Blog .

Die vorherigen Methoden sind intelligent und erfordern das Senden eines speziell geformten Befehls auf den Datenbussen. Einfacher: Einschalten, wenn das Netzteil mit Strom versorgt wird. In den BIOS-Einstellungen wird dieser Parameter als AC Power Loss bezeichnet und hat einen von drei Zuständen:

  • Ausschalten - Der Server bleibt ausgeschaltet.
  • Einschalten - Der Server wird eingeschaltet.
  • Letzter Status - Der Server wird nur eingeschaltet, wenn er zum Zeitpunkt des Stromausfalls eingeschaltet war.

Die Verwendung dieser Methoden führt gleichermaßen dazu, dass dem Prozessor ein Rücksetzsignal gesendet wird und der Startvorgang gestartet wird.

Laden Sie das erste Programm herunter


Der erste Schritt beim Starten des Servers besteht darin, die Stromversorgung einzuschalten und das Rücksetzsignal für den Prozessor einzustellen. Wenn ein Rücksetzsignal vorliegt, funktioniert der Prozessorfrequenzgenerator nicht und die Prozessorregister werden auf die vom Prozessorhersteller festgelegten Werte zurückgesetzt.

Beim Starten in der Stromversorgung treten Transienten auf, aufgrund derer die Ausgangsspannung außerhalb der zulässigen Grenzen liegen kann, was sich negativ auf den Arbeitsprozessor auswirkt. Daher wird das Rücksetzsignal erst entfernt, wenn die eingehende Leistung vollständig stabilisiert ist.

Nach dem Stabilisieren der Spannung setzt das Netzteil das Power Good- Signal. Dieses Signal bedeutet, dass das Motherboard alle Serverkomponenten starten kann. Als nächstes ordnet der Chipsatz dem Adressraum alle angeschlossenen Geräte zu, einschließlich des ROM (Nur-Lese-Speicher) mit dem BIOS-Code ( Basic Input / Output System ). Als nächstes wird das Rücksetzsignal entfernt und der Prozessorfrequenzgenerator gestartet.

BIOS - ein System, das eine API für die Arbeit mit Geräten und verbundenen Geräten bereitstellt. Eines der wichtigsten Ziele des BIOS ist das Initialisieren und Testen der Hardware beim Start.


Unabhängig von der Anzahl der Prozessoren im System wird beim Starten des Servers nur ein Kern eines Prozessors aktiviert, und die verbleibenden Kerne verbleiben im Ruhemodus. Der erwachte Kern wird durch den Bootstrap-Prozessor (BSP, nachstehend als Prozessor bezeichnet) bezeichnet. Nachdem das Reset- Signal verschwunden ist, werden die Prozessorregister so gefüllt, dass der Prozessor in einem speziellen 32-Bit-Modus arbeitet, der als Initial Processor Mode bezeichnet wird .

Anfänglicher Prozessormodus - Ein Betriebsmodus, in dem ein 64-Bit-Prozessor erst nach einem Reset abgerufen wird. In diesem Modus kann der Prozessor 32-Bit-Befehle ausführen, und der Adressraum beträgt 4 GiB.

Nachdem das Reset- Signal verschwunden ist, zeigt der Prozessorbefehlszähler auf die Adresse 0xFFFFFFF0 , die als Reset-Vektor bezeichnet wird . An dieser Adresse liegt der erste Befehl, den der Prozessor dekodiert und ausführt.
Das Platzieren der ersten Anweisung am Ende des Adressraums hat eine historische Rechtfertigung. Bei der Entwicklung des Intel 8086-Prozessors befand sich am Anfang des Adressraums ein Interrupt-Vektor, gefolgt von RAM, dessen Größe beliebig sein kann. Um Schnittpunkte mit dem RAM zu vermeiden, wurde die Adresse des ersten Befehls am Ende des Adressraums übernommen.

Später, mit dem Aufkommen von Intel 80286, konnte der Interrupt-Vektor überall hin verschoben werden. Selbst moderne Prozessoren laufen jedoch im Kompatibilitätsmodus mit 8086 und dem Interrupt-Vektor bei 0x0.
Beim Zugriff auf die Adresse 0xFFFFFFF0 empfängt der Prozessor den ersten Befehl vom ROM. Im Legacy-Modus ist dieser Befehl ein Weitsprung oder ein Weitsprung in ein Speichersegment mit einem BIOS-Code. Nach Abschluss des ersten Weitsprungs wechselt der Prozessor in den 16-Bit- Real-Modus und führt den BIOS-Code aus.

Real Mode - Kompatibilitätsmodus mit veralteten 16-Bit-Prozessoren. In diesem Modus sind nur 16-Bit-Befehle verfügbar, und der Adressraum, der als "unterer Speicher" bezeichnet wird, enthält nur 1 MiB.

Wie bereits erwähnt, wird der ausführbare BIOS-Code auf einem externen Gerät gespeichert, dessen Arbeit nicht sehr schnell ist. Das BIOS initialisiert also zunächst den RAM und kopiert seinen eigenen Code aus dem ROM in das Gerät. Das BIOS ist weiterhin mit veralteten Prozessoren kompatibel und führt daher alle Aktionen im 16-Bit-Modus aus.

Selbsttest beim Einschalten


Der Selbsttest beim Einschalten (POST) ist ein wichtiger Schritt im BIOS. POST ist abgekürzt und vollständig. Der vollständige POST überprüft alle verfügbaren Controller und testet den gesamten verfügbaren RAM, was zeitaufwändig sein kann.

Der abgekürzte POST beschleunigt den Startvorgang und enthält die minimal erforderlichen Aktionen:

  • Überprüfen der Integrität von BIOS-Programmen im ROM unter Verwendung des Prüfsummenüberprüfungsmechanismus;
  • Erkennung und Initialisierung der Hauptsteuerungen, Systembusse und angeschlossenen Geräte;
  • Bestimmen der Größe des RAM und Testen des ersten Segments (64 Kilobyte);
  • Übertragung der Kontrolle an den Bootloader.

Beim Bestehen des POST verwendet der Server verschiedene Möglichkeiten, um Informationen über den Durchgang der Tests wiederzugeben. Die gebräuchlichsten Wege:

  • Anzeigen der Testkennung, des POST-Codes auf dem Bildschirm oder Verwenden von Sieben-Segment-Anzeigen auf dem Motherboard;
  • Tonanzeige;
  • Lichtalarm mit einer Kombination von LEDs.


Der informativste Weg, um Informationen über mögliche Fehlfunktionen zu erhalten, ist die Anzeige des aktuellen POST-Codes. Nach erfolgreichem Abschluss der Tests ersetzen sich die Codes schnell gegenseitig. Im Falle einer Fehlfunktion stoppt der POST und Sie können die Kennung des fehlgeschlagenen Tests sehen. Motherboard-Hersteller fügen immer eine Dekodierung bei, was einen bestimmten Code bedeutet.


Auf modernen Motherboards gibt es eine LED-Anzeige, mit der Sie eine fehlerhafte Komponente identifizieren können. Wenn der Server erfolgreich gestartet wurde, ertönt ein Piepton, der anzeigt, dass der POST erfolgreich war. Anhand der Dauer und Anzahl der Tonsignale kann auch eine ausgefallene Komponente ermittelt werden.


In einigen Fällen, wenn für die Diagnose maximale Genauigkeit erforderlich ist, können Sie ein externes Gerät verwenden, das als POST-Karte bezeichnet wird. Motherboards senden Informationen zu POST-Tests auf Datenbussen, und eine POST-Karte verarbeitet diese Informationen und zeigt sie anhand der verfügbaren Indikatoren an.

BIOS-Setup-Dienstprogramm


Das BIOS verfügt über ein spezielles Setup-Menü namens BIOS Setup Utility . Sie können es eingeben, indem Sie eine Sondertaste drücken, während Sie POST übergeben. Meistens sind die Tasten zum Aufrufen des BIOS Del und F2 . Beim Laden wird jedoch immer angezeigt, mit welcher Taste die BIOS-Einstellungen geöffnet werden.


Das BIOS-Setup-Dienstprogramm bietet eine Schnittstelle für die Konfiguration, für deren Kommunikation nur eine Tastatur erforderlich ist. Das BIOS-Setup-Dienstprogramm bietet Informationen zur installierten Hardware und ermöglicht es Ihnen, die Betriebsparameter des Motherboards und der angeschlossenen Geräte zu ändern.

Mögliche Namen und Optionen dieses oder jenes Parameters hängen von vielen Faktoren ab, darunter:

  • BIOS-Version
  • Motherboard-Modell;
  • Modell der im Motherboard installierten Ausrüstung.

Unter den Parametern interessiert uns die Boot-Priorität . Die Startpriorität legt die Reihenfolge fest, in der das BIOS Geräte abfragt, um den Startbereich auf ihnen zu finden. Sobald das BIOS den Startbereich findet, wird die Steuerung an den Bootloader übertragen und der nächste Schritt beginnt.


Betriebssystemlader


Nach dem Bestehen des POST sucht das BIOS nach dem Startbereich und fragt die Geräte in der angegebenen Reihenfolge ab. Im Legacy- Modus wird der Startbereich auf der Festplatte als Master Boot Record (MBR) bezeichnet. MBR ist eine spezielle Struktur, die sich in den ersten 512 Bytes der Festplatte befindet. Diese 512 Bytes enthalten die folgenden Daten:

  • Code der ersten Stufe des Bootloaders - von 0 bis 445 Bytes;
  • Partitionstabelle - von 446 bis 509 Bytes;
  • Die magische Zahl ist 0xAA55 - von 510 bis 511 Bytes.

Wenn es keine magische Nummer 0xAA55 gibt , wird davon ausgegangen, dass der MBR-Datensatz auf dieser Festplatte nicht gefunden wurde und das BIOS die nächste Festplatte abfragt .

Wenn das BIOS den MBR-Datensatz findet, kopiert es ihn unter der Adresse 0x7C00 von der Festplatte in den RAM und springt zu dieser Adresse. Nach dem Sprung beginnt die erste Stufe ( Stufe 1 ) des Bootloaders. Aufgrund der begrenzten Größe besteht der Zweck der ersten Stufe darin, den Code der zweiten Stufe ( Stufe 2 ) in den Speicher zu laden und die Steuerung darauf zu übertragen.

Code der Stufe 2 wird unmittelbar nach der MBR-Struktur und bis zum Beginn der ersten Festplattenpartition gespeichert. In der Vergangenheit enthält diese Lücke 31 KB Speicher und in modernen Systemen 1 MB. Um die Kompatibilität aufrechtzuerhalten, überschreitet die Größe der zweiten Stufe jedoch nicht 31 KB.

Die zweite Stufe bereitet die Umgebung für den Start der dritten Stufe vor:

  • Lädt die erforderlichen Dateisystemtreiber
  • findet den Code der dritten Stufe im Dateisystem;
  • Lädt den Code in den RAM und überträgt die Kontrolle darauf.

Die Aufgaben der Stufe 3 beschränken sich auf eine minimale Einrichtung der Umgebung und des Bootloaders:

  • Übertragen Sie den Prozessor in den geschützten Modus .
  • Laden Sie die installierten GRUB2-Erweiterungen herunter
  • Suchen Sie Stufe 4 im Dateisystem und geben Sie ihm die Kontrolle.

Geschützter Modus - Kompatibilitätsmodus mit x86-Prozessoren. In diesem Modus kann der Prozessor 32-Bit-Befehle ausführen, und der Adressraum wird auf 4 GiB erweitert. Im geschützten Modus sind bedeutende Neuerungen aufgetreten, zum Beispiel:


Die vierte Stufe ( Stufe 4 ) wird bereits im 32-Bit-Modus ausgeführt. Falls erforderlich, wird sie von der GUI-Erweiterungsdiskette geladen, analysiert die Datei grub.cfg und zeigt das bekannte Betriebssystemauswahlmenü an.


Betriebssystemkernel


GRUB2 folgt der Multiboot-Spezifikation zum Laden der ausführbaren Kernel-Datei. Der Bootloader überprüft die magische Nummer 0x1BADB002 am Anfang des Kernels und die Prüfsumme, um sicherzustellen, dass der Kernel mit der Spezifikation kompatibel ist. Nach erfolgreicher Überprüfung kann der Kernel in den RAM geladen und in diesen übertragen werden.

Gemäß derselben Spezifikation stellt der Bootloader dem Kernel Systeminformationen zur Verfügung, wie z.

  • aktueller Prozessormodus;
  • Menge des erkannten RAM;
  • Art der Videoausgabe (Text oder Pixel);
  • Bildschirmauflösung.

Trotz der Tatsache, dass der Bootloader Dateisystemtreiber und möglicherweise Erweiterungen für die grafische Oberfläche verwendet hat, wird der bootfähige Kernel all diese wunderbaren Dinge nicht erhalten. Nachdem der Kernel die Kontrolle erlangt hat, "enthüllt" er zunächst das volle Potenzial des Servers und versetzt den Prozessor in den Long-Modus .

Long Mode - der Hauptmodus von 64-Bit-Prozessoren. In diesem Modus kann der Prozessor 64-Bit-Befehle ausführen und 64-Bit-Allzweckregister verwenden. Der Adressraum enthält 16 EIB. Der Long-Modus hat die segmentierte Speicherorganisation der 32-Bit-Architektur abgeschafft.

Trotz des riesigen Adressraums für die Adressierung des physischen Speichers werden nur 48 von 64 möglichen Bits verwendet, wodurch die maximale RAM-Größe auf 256 TiB reduziert wird, was 65.536-mal weniger als der Adressraum ist. In absehbarer Zeit ist geplant , die physikalische Adressierung auf 57 Bit zu erweitern.

Nach dem Umschalten in den Langmodus führt der Kernel die für den Betrieb erforderlichen Mindestaktionen aus:

  • Konfiguriert den Paging-Speicher
  • lädt Treiber und initialisiert die verwendete Ausrüstung;
  • Konfiguriert Speicher- und Prozessplaner
  • findet und startet init.

Es ist wichtig, dass der Server vor der Konfiguration des Prozessplaners an einem einzelnen Kern arbeitete, der als BSP bezeichnet wurde. Durch die Konfiguration des Schedulers wird der Rest des Kernels namens Application Processor (AP) aktiviert. Die Kernel haben keine direkte Verbindung untereinander und ihre Kommunikation erfolgt über lokale Interrupt-Handler, die als Local Advanced Programmable Interrupt Controller (LAPIC) bezeichnet werden.

Der Kernel des Betriebssystems wird auf dem BSP gestartet, der während der Initialisierung mithilfe der ACPI-Tabellen Informationen über die verfügbaren Prozessoren im System erhielt. BSP sendet unter Verwendung seines eigenen LAPIC eine Folge von Unterbrechungen „ Init - StartUp - StartUp “, um alle APs zu aktivieren. Nach dem Start müssen auch Anwendungsprozessoren initialisiert und in den Langmodus versetzt werden. Jetzt ist dieser Prozess jedoch schneller, da diese Arbeit bereits vom Hauptprozessor ausgeführt wurde.

Nachdem alle APs initialisiert wurden, startet der Prozessplaner einen Serviceprozess mit der Bezeichnung " Untätigkeit " oder " Leerlauf" . Wie der Name schon sagt, macht dieser Prozess nichts und nimmt den Prozessor in Anspruch, wenn keine anderen Prozesse vorhanden sind.

Wenn alles konfiguriert und betriebsbereit ist, startet der Kernel des Betriebssystems den ersten Prozess im Benutzerbereich - Init . Dies wiederum startet den Rest der Prozesse im Benutzerraum. Nach dem Start des Init-Prozesses wechselt der Kernel in den Standby-Modus und ist inaktiv, bis Aufgaben im Kernelbereich angezeigt werden.

Nachdem Sie alle Prozesse gestartet haben, wird der Server über das Netzwerk verfügbar. Auf der Konsole wird die Anmeldeaufforderung auf dem Bildschirm angezeigt.

Fazit


Auf den ersten Blick ist ein einfacher und schneller Serverstart und das Laden des Betriebssystems ein komplexer und verwirrender Prozess mit vielen Nuancen. Der Durchgang dieses Prozesses ist eine kleine Entwicklung, die die Verarbeitungsleistung des Prozessors von alten 16-Bit-Prozessoren zu modernen 64-Bit- „Monstern“ entwickelt.

Und was denken Sie, wenn 128-Bit-Prozessoren erscheinen, wird es einen Kompatibilitätsmodus mit 16-Bit-Prozessoren geben?

Source: https://habr.com/ru/post/de471756/


All Articles