Funktionsweise des BIOS



  • hallo,
    wie funktioniert eigentlich ein BIOS auf einer x86-Architektur?

    Hab gelesen, dass die Ausführung bei Adresse 0xffff0 beginnt, wo sich normalerweise ein JMP befindet. Doch wie kommt der dort hin? (Henne-Ei-Problem)
    Ist an dieser Stelle eine hardwarebasierte Umleitung, die direkt auf das ROM-BIOS verweist? Das BIOS führt dann einige Überprüfungen durch, wie zB die Existenz des RAM und dekomprimiert sich anschliessend an eine andere Stelle in den Arbeitsspeicher, wo es "normal" ausgeführt werden kann. Dann müsste es auch eine Art Schalter geben, so dass der Bereich ab 0xffff0 anschliessend wieder zur Verfügung steht, sonst hätte man ein Loch im RAM.



  • bi0s schrieb:

    hallo,
    wie funktioniert eigentlich ein BIOS auf einer x86-Architektur?

    Hab gelesen, dass die Ausführung bei Adresse 0xffff0 beginnt, wo sich normalerweise ein JMP befindet. Doch wie kommt der dort hin? (Henne-Ei-Problem)

    Ich nehme an, dort ist initial ein ROM gemappt, wo der JMP drin steht.

    Ein Prozessor hat nach dem Reset einen definierten Zustand, und das BIOS ist genau so konstruiert, dass es in diesem Zustand ausgefuehrt wird. Der Rest sind Details.

    Dann müsste es auch eine Art Schalter geben, so dass der Bereich ab 0xffff0 anschliessend wieder zur Verfügung steht, sonst hätte man ein Loch im RAM.

    Hat man sowieso. Der Bootvorgang beginnt ja im Real-Mode, dort sind sowieso oberhalb von 640k Video-RAM, ROM-BIOS, EMS etc. gemappt. Der eine JMP mehr oder weniger macht den Kohl nicht fett. Ausserdem hat die Praesenz der Startup-Routine den Vorteil, dass man durch einen JMP dorthin einen Warmstart ausloesen kann.

    (Alles DOS-Wissen von 1992, falls sich seitdem signifikant was geaendert hat, stimmt das also nicht mehr 😉 )


  • Mod

    Die Hardware ist so verkabelt, dass die Adresse 0xffff0 im ROM liegt. Siehe Wikipedia zum Thema BIOS und Booting.

    edit: Uhh, viel zu langsam. Aber so hat Bashar mit seiner viel ausführlicheren Erklärung 👍 aus dem Kopf heraus noch die Bestätigung von mir, dass es genau so auf Wikipedia beschrieben steht. Und wie wir alle wissen, steht dort nur die absolute Wahrheit 🙂 .



  • Bashar schrieb:

    Ich nehme an, dort ist initial ein ROM gemappt, wo der JMP drin steht.

    SeppJ schrieb:

    Die Hardware ist so verkabelt, dass die Adresse 0xffff0 im ROM liegt.

    Bedeutet das die Adresse liegt IMMER im ROM (man kann den Bereich nie regulär - mit Schreibzugriffen - benutzen) oder nur während des Bootvorgangs.
    Danach kann ich ja die Kopie des ROM im (beschreibbaren) Arbeitsspeicher verwenden.



  • bi0s schrieb:

    Bedeutet das die Adresse liegt IMMER im ROM (man kann den Bereich nie regulär - mit Schreibzugriffen - benutzen) oder nur während des Bootvorgangs.

    Der Adressbereich zeigt immer in das ROM und ist daher generell nicht verwendbar. Es gibt übrigens neben dem BIOS ROM noch andere Adressbereiche die aus bestimmten Gründen nicht verwendet werden können. Unter http://wiki.osdev.org/Memory_Map_(x86) gibt es eine Übersicht der Adressbereiche für x86.


  • Mod

    Und prinzipiell kannst du dir sogar den Inhalt dieser Adressen anzeigen lassen, selbst auf modernen Betriebssystemen. Zum Beispiel sollte folgendes in Linux funktionieren (wenn man root ist):

    dd if=/dev/mem bs=16 skip=$((0xFFFF)) count=1
    

    (Du solltest mit den dir gegebenen Stichworten mittlerweile wohl selbstständig herausgefunden haben, dass 0xfffffff0 im Realmode auf diese Adresse verweist)
    Das gibt dir ein paar kryptische Zeichen, aber wenn du diese durch einen Disassembler (z.B. ndisasm oder was immer auf deinem System installiert ist) jagst, sollte da ein

    ljmp   $0xf000,$0xe05b
    

    herauskommen (außer du hast keinen IBM-kompatiblen oder einen extrem alten PC).

    Du solltest das Wort "verkabelt" übrigens nicht zu wörtlich nehmen. Da wird nicht wirklich eine Lötstelle sein. Der Chip, der Speicheradressen auf konkrete RAM-Chips mappt, wird diese Adresse oben auf den BIOS-ROM mappen.



  • Ich danke euch.

    SeppJ schrieb:

    Du solltest das Wort "verkabelt" übrigens nicht zu wörtlich nehmen. Da wird nicht wirklich eine Lötstelle sein. Der Chip, der Speicheradressen auf konkrete RAM-Chips mappt, wird diese Adresse oben auf den BIOS-ROM mappen.

    ja, das habe ich schon vermutet. 🙂


Anmelden zum Antworten