Wo ist der Bootloader gespeichert - in ROM, RAM oder anderswo?

30

Laut Wikipedia-Eintrag ist ein Bootloader ein kleines Programm, das im ROM gespeichert ist (ein Teil des Hauptspeichers (RAM), nicht wahr?) Und nur gelesen und nicht gelöscht werden kann. Ich bin hier ein wenig verwirrt. Bedeutet das, dass auf jedem RAM, den wir kaufen, standardmäßig ein Bootloader installiert ist? Außerdem habe ich aus einem Buch gelesen, in dem steht, dass sich in der Regel ein Bereich namens MBR (Master Boot Record) auf der Festplatte befindet, der einen Bootloader enthält.

Wo genau befindet sich dieser Bootloader? Speichern verschiedene Betriebssysteme ihren Bootloader an verschiedenen Orten?

xczzhh
quelle

Antworten:

43

ROM ist ein vom RAM getrennter Chip. Es benötigt keine Stromversorgung, um seinen Inhalt zu erhalten, und konnte ursprünglich in keiner Weise modifiziert werden, sondern wurde ab Werk fest verdrahtet. Ein späterer PROM oder ein programmierbarer Nur-Lese-Speicher ersetzten das echte ROM. Diese Chips waren ab Werk leer und konnten mit einem speziellen Verfahren beschrieben werden, bei dem im Wesentlichen Teile des Chips ausgebrannt wurden, wodurch sich ihr Zustand änderte. Dieses wurde dann durch ein EPROM oder einen löschbaren programmierbaren Speicher ersetzt. Diese Chips hatten ein kleines Fenster, und wenn Sie ultraviolettes Licht in sie einstrahlten, konnten sie gelöscht werden, so dass sie erneut programmiert werden konnten. Diese wurden dann durch ein EEPROM oder einen elektrisch löschbaren programmierbaren Speicher ersetzt. Diese Chips haben ein spezielles Software-Verfahren, um sie zu löschen, damit sie neu programmiert werden können.

Das Motherboard verfügt über einen ROM-Chip, der die Firmware enthält, die im PC-Sprachgebrauch normalerweise als BIOS oder Basic Input Output System bezeichnet wird, obwohl sie derzeit durch EFI-Firmware ersetzt wird. Dies ist die Software, die die CPU zum ersten Mal beim Einschalten ausführt. Die gesamte Firmware führt eine Initialisierung der Hardware durch, stellt in der Regel Diagnoseausgaben bereit und bietet dem Benutzer die Möglichkeit, die Hardware zu konfigurieren. Anschließend wird der Bootloader gesucht und geladen, der seinerseits das Betriebssystem findet und lädt.

Mit dem PC-BIOS wird lediglich der erste Sektor von der Festplatte geladen und ausgeführt, von dem aus gebootet werden soll. Dies ist normalerweise die erste erkannte Festplatte. Konventionell enthält der erste Sektor einer Festplatte, der als Master Boot Record bezeichnet wird, eine DOS-Partitionstabelle, in der die Speicherorte der Partitionen auf der Festplatte aufgeführt sind, und lässt etwas Platz für den Bootloader. Ubuntu verwendet den GRUB-Bootloader, der genügend Code zum Laden und Ausführen in den MBR legt /boot/grub/core.img. Normalerweise wird eine Kopie dieser Datei in den Sektoren nach dem MBR abgelegt, jedoch vor der ersten Partition, und /boot/grub/core.imggenau das lädt der MBR, da es zu schwierig ist, den Speicherort in dem sehr begrenzten verfügbaren Speicherplatz im MBR zu finden .

Das Grub-Core-Image enthält den Basis-Grub-Code sowie alle Module, auf die zugegriffen /boot/grubwerden muss, damit dort zusätzliche Module geladen werden können, und die Grub-Konfigurationsdatei, die beschreibt, welche Betriebssysteme gestartet werden können und wo sie gefunden werden können.

Die EFI-Firmware, die auf Intel-Macs verwendet wird und als Ersatz für das BIOS auf den neuesten PC-Motherboards verfügbar ist, erfordert eine dedizierte Partition, die Bootloader-Dateien enthält, und die Firmware ist intelligent genug, um diese Dateien zu finden und zu laden, anstatt nur etwas zu laden und auszuführen befindet sich im ersten Sektor der Festplatte.

Psusi
quelle
Hier ist ein Auszug aus Glenn Brookshears Informatik, Ein Überblick, A small portion of a computer's main memory where the CPU expects to find its initial program is constructed from special nonvolatile memory cells. Such memory is known as read-only memory(ROM) wie er sagt . Der Hauptspeicher besteht aus zwei Teilen, RAM und ROM. Ich möchte nur wissen, ob der sogenannte Bootloader im ROM-Teil des Hauptspeichers installiert ist ... @Sergey
xczzhh
@xczzhh - yes Das BIOS ist im ROM gespeichert, wodurch der in Partitionen vorhandene Bootloader erkannt wird. Bei der Installation eines Betriebssystems wird im BIOS eine Art Eintragsflag erstellt, um den entsprechenden BOOTLOADER zu erkennen.
Atenz
1
@xczzhh, nein, der Bootloader befindet sich auf der Festplatte oder einer anderen Festplatte. Es wird zusammen mit dem Betriebssystem installiert. Sofern Sie kein Update von Ihrem Motherboard Maker herunterladen und installieren, ändert sich das ROM nie.
Psusi
EFI verwendet stattdessen EFI-Anwendungen. Es lädt die EFI-Anwendung im NVRAM
Suici Doga
@SuiciDoga, nein, EFI-Anwendungen (die im Wesentlichen auf einige Dienstprogramme zur Firmware-Aktualisierung und Bootloader beschränkt sind) werden in der EFI-Systempartition der Festplatte gespeichert. Im NVRAM speichert EFI einige Konfigurationsvariablen, z. B. die Startreihenfolge.
Psusi
23

ROM befindet sich nicht im Hauptspeicher:

ROM ist kein Teil des Hauptspeichers. Es ist ein separater Chip, der die meiste Zeit in einen größeren IC eingebaut ist. Ihr PC kann beispielsweise aus mehreren ROM bestehen. Diese sind in Ihrer Hauptplatine eingebaut.

Allgemein :

  • ROM sind sehr klein in der Speichergröße. Dieser Speicher ist in dem Sinne nichtflüchtig, dass das im ROM gespeicherte Programm beim Herunterfahren der Stromversorgung nicht gelöscht wird.
  • In einem ROM werden permanente Programme gespeichert, die für die korrekte Ausführung Ihrer Hardware von entscheidender Bedeutung sind.
  • Ein typisches ROM-Beispiel ist der BIOS-Chip. Wo das Programm von sehr niedriger Ebene Booten und Initialisieren von Hardware gespeichert sind

Sie haben dies erwähnt. Sie haben einen Artikel gelesen, in dem der Autor sagte, "ROM ist ein Teil des Hauptspeichers". Dies ist verwirrend, da sich Hauptspeicher in der Regel auf Arten von flüchtigen Speichern bezieht, wie z. B. RAM. Aber ja, Wenn Sie Hauptspeicher Begriff für den gesamten Speicherplatz von einem PC, dann ist ROM ein Teil dieses Speicherplatzes. Sie sollten beachten, dass Hauptspeicher im Allgemeinen Speicherarten wie ROM ausschließen .

Wo ist der Bootloader gespeichert:

Modernes System verwendet zweistufiges Boot-Laden. Im ersten Schritt wird ein winziges Programm aus einem Sektor (häufiger Bootsektor genannt) der Festplatte geladen. Dieses winzige Programm lädt wiederum ein Programm von einer Stelle auf der Festplatte, das als Bootloader bezeichnet wird. Und schließlich lädt der Bootloader das Betriebssystem.

In Bezug auf das Ubuntu-System ist der Prozess wie folgt:

  1. Nachdem Sie Ihren PC eingeschaltet haben, wird das BIOS (das im ROM gespeichert ist) automatisch ausgeführt und verschiedene Teile der PC-Hardware werden initialisiert. Anschließend wird im definierten ersten Startgerät (normalerweise Festplatte) nach einem bestimmten Sektor gesucht. Dieser Sektor ist der Boot-Sektor mit einer Größe von 512 Bytes.

  2. Das Programm im Bootsektor wird in den Speicher geladen (1. Stufe). Dieses winzige Programm enthält Informationen darüber, welche Programme als Nächstes in den Speicher geladen werden sollen und wo sich dieses Programm auf der Festplatte oder dem Startgerät befindet. Es lädt das Programm. In Ubuntu ist es /boot/grub/core.img.

  3. In der zweiten Phase lädt der OS-Loader GRUB Ubuntu, indem er den Kernel und die anfängliche RAM-Platte in den Speicher lädt und die Steuerung an den Kernel übergibt. Dann läuft der Kernel und lädt alle notwendigen Programme wie Display Manager, Gui's etc.

Wir können also klar sagen, dass der Bootloader weder im ROM noch im RAM gespeichert ist. Er befindet sich tatsächlich auf der Festplatte (oder einem anderen Boot-Gerät, wie einer bootfähigen CD-ROM, USB-Laufwerken usw.) und spricht genau den ersten Sektor der Festplatte, die eine Größe von 512 Bytes hat und oft als Boot-Sektor bezeichnet wird . Und dieser Bootloader lädt den OS-Loader (in Ubuntu ist es grub), der sich ebenfalls auf der Festplatte (dh im /boot/grub/Ordner) befindet, und seine Aufgabe ist das Laden des Betriebssystems (beispielsweise Ubuntu).

Entfernen Sie als Test die Festplatte (und alle anderen Startgeräte) und versuchen Sie zu starten. Sie können zum BIOS-Schritt aufsteigen, aber nach diesem Schritt können Sie nichts mehr booten. Höchstwahrscheinlich wird das BIOS " No Boot Device Found " oder " No Operating System found " oder ähnliches anzeigen.

Hoffe, diese Antwort wird helfen.


Weitere Informationen erhalten Sie unter folgenden Links:

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory
Anwar
quelle
2
ROM ist seit etwa einem Jahrzehnt nicht schneller als RAM. In der Tat ist eines der ersten Dinge, die ein modernes BIOS tut, sich selbst in den RAM zu kopieren, weil der RAM so viel schneller ist.
David Schwartz
1
@DavidSchwartz, es ist jetzt mehr als ein Jahrzehnt her. Jedes PC-BIOS, das ich Mitte der 90er Jahre verwendet habe, hatte die Option, das BIOS im RAM aus Gründen der Geschwindigkeit zu spiegeln.
Psusi
@Anwar, der Link zum Hauptspeicher ist nicht mehr verfügbar .
Der Matt
15

Ein x86-kompatibler Prozessor startet immer im sogenannten "Real" -Modus, einem 16-Bit-Modus mit 1 MB verfügbarem adressierbarem Speicher. Von diesem Adressraum ist 640K für Programme zur Verfügung und Adressen darüber sind abgebildet auf verschiedene Geräte.

Adressen, die mit 0xA000: 0x0000 beginnen, werden beispielsweise dem Video-RAM zugeordnet, sodass beim Schreiben von Daten in den Speicher des Videoadapters tatsächlich Daten geschrieben werden, die Pixel auf dem Bildschirm anzeigen.

In ähnlicher Weise startet das BIOS- ROM ab 0xF000: 0000, sodass die CPU beim Einschalten einfach ab dieser vordefinierten Adresse Anweisungen nacheinander ausführt. Das BIOS-ROM enthält das ursprüngliche Programm, das mit einem "Power-On Self Test" oder POST gestartet wird. Aus Wikipedia:

Die BIOS-Software ist in den PC integriert und der erste Code, der beim Einschalten von einem PC ausgeführt wird ("Boot-Firmware"). Wenn der PC gestartet wird, ist der erste Job für das BIOS der Selbsttest beim Einschalten, bei dem Systemgeräte wie CPU, RAM, Grafikkarte, Tastatur und Maus, Festplattenlaufwerk, optisches Laufwerk usw. initialisiert und identifiziert werden andere Hardware. Das BIOS findet dann die Bootloader-Software, die sich auf einem Peripheriegerät (als "Boot-Gerät" bezeichnet) befindet, z. B. einer Festplatte oder einer CD / DVD, und lädt und führt diese Software aus, um den PC zu steuern. 2 Dieser Vorgang wird als Booten oder Booten bezeichnet. Dies ist die Abkürzung für Bootstrapping.

Die BIOS-Firmware ist dafür verantwortlich, den ersten Sektor von der Festplatte in den Speicher zu lesen und die Steuerung an ein kleines Programm weiterzuleiten, das sich wiederum an einer bestimmten Adresse befindet. Der MBR- Bootloader kann dann beginnen, das Betriebssystem direkt zu laden (wie dies bei MS-DOS der Fall war) oder die "zweite Stufe" zu laden, die nicht auf die Grenzen eines einzelnen Plattensektors beschränkt ist.

Bootloader, die den mehrstufigen Ansatz verwenden, können sehr komplex mit Text- oder Grafikschnittstellen sein, sodass der Benutzer auswählen kann, von welcher Festplatte oder Partition ein Betriebssystem geladen werden soll.

Wenn Sie also, wie Uri vorschlägt, daran interessiert sind, ob der Windows-Bootloader und GRUB zusammen existieren können, lautet die Antwort: Der eigentliche MBR kann nur einen einzelnen Bootloader der ersten Stufe enthalten. Die zweite Stufe eines Bootloaders kann jedoch Betriebssysteme von verschiedenen Partitionen in einer Kette laden. Der Windows-Bootloader kann nur Windows erkennen und laden, während GRUB Linux laden oder die Steuerung an einen anderen Bootloader übergeben kann, der in einem Volume-Bootdatensatz einer der Partitionen gespeichert ist. Auf diese Weise kann Windows oder ein anderes Betriebssystem gestartet werden. Der letztere Vorgang wird Kettenladen genannt.

Wenn Sie Ubuntu auf einem Computer installieren, auf dem Windows installiert ist, wird GRUB in MBR installiert und Sie können Ubuntu und Windows starten.

Wenn Windows jedoch nach Ubuntu installiert wird, wird GRUB durch den Windows-Bootloader ersetzt und Sie müssen GRUB erneut installieren, um Ubuntu erneut starten zu können.

Sergey
quelle
Ich nehme an, er möchte wissen, ob der Windows-Bootloader und GRUB zusammen existieren können oder nicht. UEFI, GPT-Festplatten verwenden keinen MBR. Wie wirkt sich dies auf sie aus?
Uri Herrera
Das BIOS-ROM befindet sich im Segment F000:, das knapp unter 1 MB liegt. Der 640k stammt aus den Segmenten unter A000 :, die für das Real-Modus-Betriebssystem und die zu verwendenden Programme verfügbar sind.
Psusi
@psusi: Sie haben Recht, ich habe diesen Teil umformuliert
Sergey
Danke für die Antwort. Meinen Sie damit, dass mehrere Bootloader (einer im BIOS und einer im MBR) beteiligt sind, um ein Betriebssystem zu starten? Es ist neu für mich ... :)
Xczzhh
@xczzhh Nun, ok, der Code im BIOS heißt nicht "Bootloader", sondern der auf der Festplatte gespeicherte. Ich habe meine Antwort aktualisiert, um dies zu verdeutlichen.
Sergey
4

Der Konflikt zwischen dem, was Sie sagen, dass sich der Bootloader im ROM befindet, und dem, was sich im MBR befindet, ist möglicherweise darauf zurückzuführen, dass der Bootloader für jeden Code verwendet wird, der festlegt, wie das Minimum an Code geladen werden muss, damit der Computer etwas Nützliches ausführt, einschließlich der einzelnen Zustand in einem mehrstufigen Boot.

Der Ausgangszustand ist also ein Computer, der ein programmierbares Gerät ist, aber nicht weiß, wie Software zum Ausführen geladen wird, da keine Software geladen ist. (Und daher booten von sich selbst von den Bootstraps hochziehen ).

In der Vergangenheit gab es ein paar verschiedene Lösungen für dieses Problem, aber heutzutage beginnen wir mit einem Code im ROM (meistens streng EEPROM), der ausreicht, um verschiedene Geräte zu untersuchen und sie der Reihe nach zu testen, bis ein passender gefunden wird bootfähig.

(Dies ist der Grund, warum viele Systeme von einer CD oder DVD booten, wenn Sie eine OS-Installationsdiskette in die Festplatte einlegen und von der Festplatte, andernfalls das BIOS [der Code auf dem ROM, einschließlich des Codes, von dem wir sprechen, und einige andere niedrige -level stuff that get things started] wird zuerst das CD / DVD-Laufwerk und dann, wenn auf einer Festplatte nichts gefunden wird, das CD / DVD-Laufwerk ignoriert, sofern dies nicht manuell angefordert wird verschwendet keine Zeit damit, eine nicht bootfähige Festplatte hochzufahren, die im Laufwerk verblieben ist.

Dieser Code im ROM wird manchmal als Bootloader bezeichnet .

Wenn bekannt ist, welches Laufwerk angezeigt werden soll, wird der MBR angezeigt, der Informationen zu primären Partitionen enthält. Wie könnten Sie später / oder / boot oder C: / (auf einem Windows-System) anzeigen, wenn Sie dies nicht getan haben? Wissen Sie, welcher Teil der Festplatte welche Partition war, egal wie jede Partition gemountet wurde? - und etwas Code mit weiteren Anweisungen zum Ausführen. (Dies erklärt im Übrigen, warum einige Betriebssysteme - wie Windows - nur auf einer primären Partition installiert werden können. Die Details dieser Partitionen sind im MBR enthalten. Dies ist die einzige Partitionsinformation, die der Bootloader gelesen hat und in die der EBR nicht geladen wird Erfahren Sie mehr über die logischen Partitionen (soweit es die Partitionen betrifft, gibt es sie noch nicht einmal).

Dieser ausführbare Code wird auch als Bootloader bezeichnet . Wenn wir zwischen diesem und dem, was als nächstes kommt, unterscheiden wollen, spricht man von einem primären Bootloader (denn wenn wir kein eigenes BIOS erstellen, ignorieren wir das ROM-Bit als außerhalb unserer Kontrolle).

Dieser Code ist sehr klein, da nur ca. 400 Byte Platz bieten. Um also etwas reales zu tun, wird mehr Code geladen, der größer sein kann, da er sich nicht mit dieser Einschränkung auseinandersetzen muss.

Dieser Code wird auch als Bootloader bezeichnet . Wenn wir zwischen diesem und dem, was vorher war, unterscheiden wollen, spricht man von einem sekundären Bootloader .

Dieser Code könnte vielleicht die letzte Stufe des Prozesses sein. Wenn Sie nur ein Betriebssystem haben oder wenn alle Betriebssysteme auf Ihrem System kompatible Bootloader verwenden (z. B. zwei Linux-Installationen, bei denen beide GRUB verwenden, sodass das zuletzt aktualisierte GRUB das Booten eines dieser Betriebssysteme anbieten kann), ist dies der Fall präsentiert Menüs (falls gewünscht), die in einen Kernel geladen werden, und übergibt die Kontrolle über das Betriebssystem.

Falls Sie ein Betriebssystem haben, das nicht mit diesem Bootloader kompatibel ist, kann es zu einer Verkettung kommen. Wenn Sie z. B. Windows und Linux auf demselben Computer haben, lädt die GRUB-Option zum Laden von Windows tatsächlich einen weiteren Bootloader, der nur über die Windows-Installation (en) Bescheid weiß, und leitet ihn weiter. Dies war zwar eine Tertiärphase in diesem Prozess, es wird jedoch weiterhin als sekundärer Bootloader bezeichnet , da es weder weiß noch kümmert, dass ein anderer sekundärer Bootloader vor ihm ausgeführt wurde. Dies ist auch bei einer Linux-Installation der Fall, bei der ein anderer Typ eines sekundären Bootloaders verwendet wird.

Wenn wir über den Bootloader in Bezug auf Linux sprechen , meinen wir im Allgemeinen nicht den ROM-Code (er ist nicht Teil von Linux oder wurde durch die Installation von Linux geändert). Wenn wir dies tun update-grub, ändern wir den sekundären Bootloader, der normalerweise in / boot einer bestimmten Installation enthalten ist. Wenn wir dies tun install-grub, ändern wir es und auch den primären Bootloader im MBR, sodass er über genügend Code verfügt, um zu wissen, wo sich / boot befindet (möglicherweise wird ein Software-RAID gestartet, sobald es ausgeführt wird), und laden diesen und führen ihn aus .

Zusammenfassend waren Sie also falsch, als Sie sagten, ROM sei Teil des Hauptspeichers *, weil es separat ist. (In der Tat wird RAM als zu ROM anonym angesehen). Sie haben zu Recht gesagt, dass es dort und im MBR einen Bootloader gibt, da es sich um zwei Prozessschritte handelt und beide manchmal mit diesem Namen bezeichnet werden. Und die Antwort auf "Speichern verschiedene Betriebssysteme ihren Bootloader an verschiedenen Orten?" ist "meistens", da inkompatible sekundäre Bootloader entweder andere Bootloader verbergen (wenn Sie Windows nach der Installation von Linux installieren) oder bei Aufforderung in den anderen Bootloader verketten (wenn Sie diese Situation beheben oder Linux nach Windows installieren), jedoch ein Betriebssystem kann einen sekundären Bootloader freigeben, wenn diese kompatibel sind (wenn Sie Linux nach einem anderen Linux installieren, das denselben sekundären Bootloadertyp verwendet, und das andere Linux erkennt [manchmal verwirrt Software-RAID die Dinge und macht Chainloading erforderlich).

* In Tagen, in denen man sowohl ROM als auch RAM programmgesteuert nutzte, war dies anders. Auf einem ZX Spectrum wäre das ROM beispielsweise 16 kB groß und würde einen BASIC-Interpreter enthalten. Damit hätten Sie auch den Ausgangspunkt, um etwas in seine 48 kB oder 128 kB (seitenweise) oder in den RAM zu laden (in diesem Fall wird im Wesentlichen gebootet) jenem BASIC-Interpreter, der dann verwendet wird, um das zu booten, was sich auf dem Band befand, gab es eine ganze Reihe von Funktionen des BASIC-Interpreters, die Programme im RAM verwenden konnten (warum sollte eine Trigger-Funktion geschrieben werden, wenn der Computer bereits eine an einer bekannten Position hat) (vor allem, wenn Sie nur 48 KB haben, in denen Sie Ihren gesamten Code ausführen können). Dieses ROM war auf die gleiche Weise wie das RAM sichtbar, nur an verschiedenen Adressen. In einem solchen Fall war der ROM ebenso Teil des Hauptspeichers wie der RAM, aber nicht beschreibbar.

Jon Hanna
quelle
0

Machen Sie ein minimales Arbeitsbeispiel und führen Sie es auf einem Emulator aus, um diese Konzepte zu verstehen:

printf '\364%509s\125\252' > main.img
qemu-system-x86_64 -hda main.img

Dies ist ein supereinfacher "Bootloader", der eine einzige hltAnweisung ausführt. Weitere Informationen unter: https://stackoverflow.com/a/32483545/895245

Sie können es dann auf echter Hardware ausführen mit:

sudo dd if=main.img of=/dev/sdX

Schließen Sie den USB-Stick an Ihren Computer an und booten Sie von dort.

Wenn Sie dies tun, wird klar, dass sich der Bootloader auf einer permanenten Speicherplatte wie USBs oder Festplatten befindet.

Was im ROM lebt, ist der Code, der den Bootloader für uns startet, genannt Firmware (oder weniger genau BIOS).

Ciro Santilli ist ein Schauspieler
quelle
0

In früheren Zeiten befand sich das Boot-Programm auf Lochstreifen, die denen ähnelten, die von Telegraphenmaschinen oder Lochkartenmedien verwendet wurden („Sie sehen beide nicht mehr in der Nähe). Der Prozess hieß früher IPL, kurz für Initial Program Load. Wenn ein Papierband- oder Kartenleser nicht verfügbar war, musste der binäre IPL-Code manchmal über eine Konsole auf der Vorderseite direkt in den Prozessor eingegeben werden. Wütend!

Heutzutage befindet sich der IPL-Code in pROMs, die, wenn sie ausgeführt werden, alle sekundären Bootloader laden und ausführen, die auf das Laden (Hochfahren) des gewünschten Betriebssystems zugeschnitten sind. Der sekundäre Loader kann sich auf einem beliebigen Medium in einem beliebigen Teil des Setups befinden, das dem IPL-Code bekannt ist oder von diesem angesprochen werden kann.

Loi
quelle
-1

Der Bootloader befindet sich normalerweise im ersten Sektor der Festplatte, der normalerweise als Master Boot Record bezeichnet wird.

Prost

j0N45
quelle