Bezüglich der INTh-Befehle, auf die Sie sich beziehen (siehe: BIOS-Interrupt-Aufrufe ), ist es richtig, dass dies die Art war, auf die ein Betriebssystem auf Low-Level-Hardware zugreift. In einer modernen Maschine landen diese Aufrufe (sofern ausgeführt) häufig im CSM (Compatibiliy Support Module, zumindest in der AMI-Sprache), das diese Anforderungen verarbeiten kann. Bei einem Video-BIOS-Aufruf würde dies den Code im Video-BIOS ausführen, falls vorhanden. Ich habe mit Intel IGPs als BIOS-Entwickler gearbeitet, und als Teil des endgültigen Images hatten wir ein Tool von Intel, in dem wir das Video-BIOS als Blob backen.
Ebenso kann das BIOS "emulierte" Versionen von Aufrufen zum Lesen / Setzen des RTC implementieren. Ein modernes Betriebssystem führt einfach nicht alle diese veralteten Handler aus, da es für diese Unterstützung nicht auf das BIOS angewiesen ist. Beispielsweise gibt es möglicherweise einen Kernel-Treiber, der weiß, wie er mit Ihrem PCH direkt in Kontakt treten soll RTC-Einstellungen.
Wie Sie sich vorstellen können, ist das sehr, sehr langsam und wird von moderner Software nicht mehr verwendet. Stattdessen besitzt das Betriebssystem die erforderliche Hardware, um eine Abstraktionsschicht bereitzustellen, die es grafischen Anwendungen ermöglicht, die Treiber der GPU für diese Aufgaben zu verwenden. Dieses Gerät ist natürlich in der Regel PCIe aus einem SW-POV und ist speicherzugeordnet.
Wenn Sie sich den Linux-Speicherstapel unten ansehen, werden Sie ebenfalls feststellen, dass die zugrunde liegenden Kernellaufwerke sich mit der Hardware auskennen, ohne das BIOS zu verwenden. Der gesamte Code stammt von Ihrem Kernel.
In Bezug auf verschiedene E / A-Adresszuordnungen und dergleichen sei daran erinnert, dass x86 sowohl einen E / A-Adressraum als auch einen Speicheradressraum hat. Wenn Sie sich an Plug-and-Play erinnern, durchläuft Ihr BIOS beim Booten den PCI-Gerätebaum, der für moderne Systeme im Wesentlichen alle Ihre Peripheriegeräte umfasst, zumindest von einem SW-POV (dh der DRAM-Controller ist eingeschaltet) PCIe-Bus 0, Ihre USB-Controller sind PCI-Geräte von einem SW-POV usw.). Mit den BARs (Base Address Registers) weiß das BIOS, wie viel Speicherplatz und welchen Typ das Zielgerät benötigt, und es tut sein Bestes, um die Anforderung zu erfüllen.
Das endgültige Mapping wird bei der Übergabe an das Betriebssystem übergeben, und es kann sich entscheiden, dies zu respektieren oder eine eigene Aufzählungsphase durchzuführen. Linux verfügt beispielsweise über 'Macken', die Sie vor dem Booten des Betriebssystems für bestimmte PCI-Geräte-IDs anwenden können, und Sie können die Kernel-Boot-Parameter zurückrufen, die sich darauf auswirken können, wie viel Speicher ihnen zugewiesen wird, welche IRQs sie verwenden, usw .