Wie ich es verstehe, haben GPUs ihre eigenen Anweisungssätze, deren Anweisungen von den Grafiktreibern generiert werden. Die GPU-Anweisungen werden dann an die GPU gesendet. Wie funktioniert die Grafikkommunikation, bevor die Treiber geladen werden? Gibt es einige grundlegende Anweisungen, die GPUs mindestens implementieren müssen, um sicherzustellen, dass der Computer grundlegende Anzeigeaufgaben ausführen kann?
drivers
graphics-card
gpu
VortixDev
quelle
quelle
Antworten:
"Gibt es einige Basisanweisungen ...?" Ja genau. Alle GPUs müssen eine von mehreren einfachen Schnittstellen implementieren - sie sind zu primitiv, um als "Befehlssätze" bezeichnet zu werden -, mit welcher Plattform-Firmware ("BIOS" oder "UEFI") und mit welchen Treibern das Betriebssystem kommunizieren kann . Die übliche Wahl für "einfache Schnittstelle" ist heutzutage "VGA" ("Video Graphics Array"), die Schnittstelle auf Registerebene, die ursprünglich für die Grafikkarten dieses Standards definiert wurde. (Jetzt 30+ Jahre alt!)
Wenn der Geräte-Manager auf einem Windows-System die Grafikkarte als "Microsoft Basic Video Adapter" identifiziert, konnte das Betriebssystem keinen bestimmten Treiber für die Karte finden und hat stattdessen den VGA-kompatiblen Treiber geladen.
Nun, technisch gesehen lädt Windows immer diesen Treiber (damit er z. B. die Startfortschrittsanzeigen anzeigen kann), identifiziert und lädt dann (ziemlich spät im Start) den "echten" Treiber für Ihre Grafikkarte.
Der VGA-Standard unterstützt nur einige wenige Grafik- und Textmodi mit niedriger Auflösung und beinhaltet nicht das, was ich als "Ausführen von Programmen" oder sogar "Anweisungen" auf der GPU bezeichne. Im Wesentlichen versetzt die Systemfirmware oder der "Basisvideotreiber" sie nur in den gewünschten Modus und schreibt dann Bits in eine Bitmap. Bits in der Bitmap entsprechen direkt Pixeln auf dem Bildschirm. Jede Arithmetik, die zum Zeichnen von Linien oder Kurven ausgeführt werden muss, wird in der CPU ausgeführt. Dies ist eine sehr langsame und langsame Methode, um Dinge auf dem Bildschirm anzuzeigen. Es reicht jedoch für Anzeigen und einfache Interaktionen mit der Firmware, für Betriebssysteminstallationen und frühe Startfortschrittsanzeigen usw.
Wikipedia: Video Graphics Array
quelle
Ich werde versuchen, das "Voodoo" dahinter aufzuklären, indem ich erkläre, wie die alte Hardware funktioniert. Moderne GPUs funktionieren nicht so, aber sie emulieren die Schnittstelle zwischen CPU und Grafikkarte.
tl; dr
Grafikchips / -karten mussten in den 80er und frühen 90er Jahren extrem schnell (im Verhältnis zur Taktrate) ausgegeben werden, damit sie keine Befehle ausführten, sondern feste Schaltkreise hatten. Sie saugten gerade Daten aus dem RAM, als sie gingen, also musste die CPU einfach Daten im RAM an der richtigen Stelle ablegen, und der Grafikchip nahm sie auf und warf sie auf den Bildschirm. Die CPU könnte auch verschiedene Konfigurationsvariablen auf dem Grafikchip einstellen.
Einzelheiten:
In den 80er Jahren hatten Heimcomputer einen wirklich "dummen" Grafikchip, der ein paar feste Verhaltensweisen aufwies. Am sinnvollsten ist es, wenn ich rückwärts durch die Pipeline gehe.
CRT-Monitore
Diese Monitore benötigten analoge Eingänge. Mit anderen Worten, höhere Spannung = hellere Ausgabe. Farbmonitore hatten 3 Kanäle (Rot, Grün und Blau (oder zB YUV oder YIQ ) ). Diese Spannungen stellten die Stärke eines Elektronenstrahls ein. Einfaches Zeug.
CRT-Monitore verwendeten buchstäblich Elektromagnete, um den Elektronenstrahl von links nach rechts abzulenken, und begannen dann wieder ein wenig tiefer und gingen von links nach rechts und so weiter von oben nach unten. Dann zurück nach oben und wiederholen.
DAC
Grafikchips hatten einen "Digital-Analog" -Wandler (eine sehr verbreitete elektrische Komponente ). Diese konvertierten digitale Werte (z. B. 2, 4 oder 8 Bits) in Spannungen, die an den Monitor geliefert werden könnten.
Scannen
Grafikchips mussten mit dem Elektronenstrahl "mithalten" und den richtigen Wert an den DAC senden, damit dieser zur richtigen Zeit die entsprechende Spannung ausgeben konnte. (Hierfür wurden Uhren verwendet, auf die ich nicht näher eingehen werde.) Es war keine Zeit, hier Anweisungen auszuführen. Alles war fest verdrahtet und dauerte eine kleine, feste Anzahl von Taktzyklen.
Videomodi
Frühe Chips waren nicht sehr schnell und hatten wenig RAM. Aus diesem Grund ermöglichten sie in der Regel die Auswahl verschiedener Modi und anderer Konfigurationsparameter, z. B. Hintergrundfarbe, Schriftartenauswahl, Cursorposition und -größe, Palettenauswahl und Sprites. Die meisten boten einen hochauflösenden "Nur-Zeichen" -Modus und niedrigauflösende pixelweise Modi.
Die drei bemerkenswerten VGA-Modi sind:
Pixel malen
Je nach Grafiksystem sieht die Pipeline ungefähr so aus:
Aktueller Pixelstandort ⇒ Zeichen / Schrift / Sprite / Pixel / Konfigurationsdaten verarbeiten ⇒ Pixelwerte ⇒ Palette ⇒ DAC
Es ist der zweite Schritt, der von einigen RAM-Positionen gelesen werden muss. Im Textmodus wird beispielsweise ein 1-Byte-Zeichen gesucht. Dies würde einen Index für eine Schriftartentabelle bilden. Aus dieser Tabelle wird ein bisschen nachgeschlagen, um anzugeben, ob dieses Pixel die Vordergrund- oder Hintergrundfarbe sein soll. Ein drittes Byte würde abgerufen, um diese Vordergrund- / Hintergrundfarbe zu erhalten. Insgesamt werden 3 Bytes aus dem RAM gelesen.
Aber dieser "Fluss" ist so ziemlich ein Satz einfacher fester Schaltkreise, die genau so angeordnet sind, wie der gerade beschriebene Fluss.
Speicherbus-Schnittstelle
Intel-CPUs haben dieses nervige Legacy-Ding namens IO-Bus, aber es ist nicht wichtig, also werde ich so tun, als wäre es nicht da.
CPUs greifen auf den RAM zu, indem sie eine READ- oder WRITE-Anforderung und eine Adresse auf dem Speicherbus senden. Obwohl die meisten gültigen Adressen eine Antwort vom RAM auslösen, werden bestimmte Bereiche stattdessen von Geräten verarbeitet . Wenn Sie beispielsweise von einer bestimmten Adresse aus LESEN, erhalten Sie möglicherweise Informationen zu Tastaturtastendrücken.
Wenn Sie in die richtigen Bereiche des "Grafikbereichs" schreiben, können Sie sowohl den Bildschirminhalt als auch die Konfigurationsparameter für die Grafikkarte festlegen. Der "blöde" Grafikchip führt keine Anweisungen aus. Es geht einfach weiter, ein paar Bytes fließen durch seine Schaltkreise und geben Spannungen aus.
Bei VGA befindet sich tatsächlich RAM auf der Grafikkarte, da Sie die Grafikkarte für vorverarbeitete Daten konfigurieren können, bevor sie in den Grafik-RAM geschrieben werden, um die Leistung in bestimmten Situationen zu steigern.
VESA
Grafikkarten nach VGA boten höhere Auflösungen und eine gute Farbtiefe, arbeiteten jedoch nach ähnlichen Prinzipien. Viele moderne Grafikkarten bieten immer noch Kompatibilität damit, um eine höhere Auflösung beim Booten zu ermöglichen. Aber VGA ist die "narrensichere" Variante, die praktisch jede Karte emuliert.
quelle