Das ist vielleicht eine dumme und seltsame Frage, aber ich kann wirklich nicht schlafen, bis ich die Antwort gefunden habe. Woher weiß der Computer, wie er Text und GUI auf dem Bildschirm anzeigt? Wenn ich mich nicht irre, läuft der Bootvorgang eines x86-Computers folgendermaßen ab:
- Das BIOS startet die CPU und den Rest der Hardware und prüft, ob alles funktioniert
- Die CPU führt den Code aus den ersten 512? Bytes der Bootpartition aus und auf dem Bildschirm wird das Bootloader-Menü angezeigt
- der ausgewählte Kernel wird ausgeführt
- usw.
Meine Frage ist: Wenn vor dem Start des Kernels kein Betriebssystem vorhanden ist, woher weiß der Computer dann, wie er den Text auf dem Bildschirm anzeigen soll? BIOS und Bootloader können Text und eine einfache GUI anzeigen. Wie machen sie das? Sagt das BIOS/der Bootloader der CPU (GPU?), dass sie beispielsweise an Position (0,0) ein blaues Pixel und dann an Position (1,0) ein weißes Pixel usw. anzeigen soll?
Meine zweite Theorie ist, dass das BIOS einen Basistreiber für das Display hat, der eine Art API zum Drucken auf dem Bildschirm hat. Gibt es eine Art print()-Funktion, die von den Treibern des Displays aus verfügbar ist?
Soweit ich gesehen habe, sind die Assemblerfunktionen zum Drucken von Text betriebssystemspezifisch und können daher nicht direkt über den Befehlssatz der CPU verfügbar sein.
Teil 2 meiner Frage lautet: Wie funktionieren Desktop-Umgebungen wie KDE oder GNOME? Angenommen, ich möchte eine völlig neue Desktop-Umgebung für Linux erstellen. Wo fange ich an? Es gibt keine Funktionen in C/C++ oder einer anderen höheren Programmiersprache, um einen FarbePreisel an Position (x,y). In welcher Sprache ist das Programm geschrieben, das den Desktop anzeigt? Erstellt es den Desktop Pixel für Pixel? Wie funktionieren Bibliotheken wie GTK oder Qt? Ich weiß, dass ich mit nur wenigen Funktionen ein Fenster anzeigen kann, aber wie funktionieren diese Funktionen wirklich?
Entschuldigen Sie, wenn meine Fragen unklar sind. Englisch ist nicht meine Muttersprache.
Antwort1
Im Grunde befindet sich auf der Hauptplatine ein ROM-Chip (Read Only Memory), der angibt, wie die gewünschte GUI angezeigt werden soll. Man könnte meinen, er hätte keine Software, aber das ist nicht der Fall, denn er ist bereits vom Hersteller vorinstalliert. Eigentlich würde man das eher als „Firmware“ bezeichnen, da es sich um Software handelt, die fest mit dem Chip verbunden ist.
Grafische Desktopumgebungen sind nichts Besonderes. Sie zeichnen auf dem Bildschirm wie jedes andere Programm. Alles, was Sie wirklich brauchen, um auf einem Bildschirm zu zeichnen, ist die Adresse des Chips zu kennen, der für die Grafikverarbeitung zuständig ist (normalerweise eine GPU oder IGPU/APU). Wenn normale Programme dies tun, fordern sie diese Informationen meines Erachtens vom Betriebssystem an. Wenn Sie also Ihre eigene grafische Desktopumgebung schreiben würden, müssten Sie herausfinden, an welche Adresse Sie Ihre Daten senden. Die Adresse, die Sie benötigen, sollte von den Treibern für die G/IG/APU bereitgestellt werden, die Sie haben.
Antwort2
In zwei Hauptteilen:
Nachdem MBR geladen wurde, lädt sein Code eine zweite Stufe des Bootcodes namens Windows Boot Manager oder GRUB unter Linux. Dieser Bootmanager/Loader hat im Code implementierte Text- und Grafikfunktionen oder verwendet direkten BIOS-Zugriff für die Textausgabe.
Nach dem Laden des Betriebssystems (Windows, Linux usw.) mit einer beliebigen Programmiersprache wie C, C++, Java oder Basic haben Sie Zugriff auf im Kernel und/oder in Bibliotheken implementierte Funktionen, die das Schreiben oder Zeichnen auf dem Bildschirm ermöglichen. Jede Programmiersprache verfügt heute über eine IDE (integrierte Entwicklungsumgebung), die das Schreiben von Benutzercode erheblich vereinfacht.