
Wenn ein x86-PC hochfährt, führt er ein Programm namens BIOS aus, das im nichtflüchtigen Speicher auf der Hauptplatine gespeichert ist. Die Aufgabe des BIOS besteht darin, die Hardware vorzubereiten und dann die Kontrolle an das Betriebssystem zu übertragen.QuelleAnhang B. Aus einer LaborsitzungHierim BereichDer physische Adressraum des PCsfolgende Zuordnung wird angezeigt.
+------------------+ <- 0x00100000 (1 MB)
| BIOS-ROM |
+------------------+ <- 0x000F0000 (960 KB)
Warum muss das BIOS es verwenden, wenn nicht, was ist dann sein Nutzen? Wie hängt es mit dem BIOS-Programm zusammen, das im nichtflüchtigen Speicher auf dem Motherboard gespeichert ist, wie ich am Anfang erwähnt habe? Obwohl in der Laborressource erwähnt wird, dass das Design für qemu (x86-Emulator) ist, aber osdev [http://wiki.osdev.org/Memory_Map_%28x86%29#ROM_Area]sagt auch das gleiche über das Speicherlayout. Ich bin nur ein wenig verwirrt.
Antwort1
DOS und andereRealmodusBetriebssysteme nutzten BIOS-Dienste in großem Umfang. Da der Realmodus von x86-Prozessoren an einen Adressraum von 2^20 = 1 MB gebunden ist, entschieden die Anbieter von i8086-Systemen, dass das BIOS am oberen Ende des Adressraums abgebildet werden muss (genauso wie heutzutage High-Half-Kernel ihren virtuellen Speicher am Ende des Bereichs abbilden): ab 0xA0000 und höher.
Durch den geschützten Modus entstand aus diesem reservierten Speicher eine Lücke im Adressraum: Programme im geschützten Modus können ohne erhebliche Hacks keine Funktionen aus dem BIOS aufrufen, wodurch es im geschützten und im langen Modus (in dem jedes moderne Betriebssystem läuft) unbrauchbar wird. Allerdings verlief die Übertragung von Software von RM nach PM nicht schnell, daher ließen die Intel-Ingenieure einen Notausgang, den v8086-Modus, der es ermöglichte, alte Real-Mode-Programme in einer Sandbox innerhalb einer Umgebung im geschützten Modus auszuführen (beispielsweise nutzte OS/2 den v8086-Modus intensiv, und auch die DOS-Emulation in Windows-Systemen basiert auf dieser Funktion). Aus Kompatibilitätsgründen sind jedoch weiterhin BIOS-Dienste erforderlich.
Dieser Speicher wird im geschützten Modus noch für einige Aufgaben verwendet, wie z. B. VGA-Terminal/Grafikausgabe (der Speicher des Terminals befindet sich bei 0xB8000, Konsolenschriftarten können dort auch angepasst werden, der VGA-Grafik-Framebuffer befindet sich bei 0xA8000, wenn ich mich recht entsinne). Manchmal wird dieser Speicher sogar für APIs verwendet, wieVBE 3, aber ja, die BIOS-Zuordnung bei 0xA0000 ist hauptsächlich eine Frage der Abwärtskompatibilität. Es gibt Bestrebungen, sie zu ersetzen: UEFI, eine moderne Neuinterpretation des BIOS, erfreut sich derzeit immer größerer Beliebtheit.
Abschluss:Die BIOS-Zuordnung bei 0xA0000 ist hauptsächlich eine Frage der Abwärtskompatibilitätund es gibt Bemühungen, es durch modernere Boot-Umgebungen wie UEFI zu ersetzen.
Antwort2
Soweit ich weiß, hat das hauptsächlich historische Gründe. Das Programm ist auf dem Chip gespeichert, aber um es auszuführen, wird der Code in den RAM geladen (BIOS-Schatten), wo die CPU die Anweisungen direkt abrufen kann. Dies ist insbesondere für komprimierte BIOS-Images auf weniger teuren Chips mit minimaler Kapazität erforderlich.
Das Deaktivieren der Option „BIOS-Schatten“ kann den Startvorgang verlangsamen oder in seltenen Fällen schlimmere Probleme verursachen. Darüber hinaus verwendeten Betriebssysteme wie MS DOS zusätzlich die BIOS-Routinen für IO, was eine Art HAL war. Dies wäre in den heutigen Multithread-Betriebssystemen furchtbar langsam und unsicher, sodass dieser Teil des RAM nach der Übergabe der Kontrolle an das Betriebssystem inaktiv bleibt.
Andere Systeme hatten sogar ihren Kernel auf diesem Chip, z. B. Commodore Amiga Kickstart, der alternativ als Diskette verfügbar war.