Wie kommuniziert die CPU mit der GPU, bevor Treiber geladen werden? [Duplikat]

24

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?

VortixDev
quelle
1
In Verbindung stehend: Wie Computer rohen, niedrigen Text und Grafiken
anzeigen

Antworten:

34

"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

Jamie Hanrahan
quelle
1
Die ganze Situation ist kompliziert. Die allerersten "VGA" -Karten waren in der Tat so limitiert. Lange Zeit benötigte Windows NT Unterstützung für 800x600, aber ja, nur 16 Farben. Es sah ziemlich schrecklich aus! Siehe den Wikipedia-Artikel, den ich verlinkt habe.
Jamie Hanrahan
9
Windows verwendet eher VESA BIOS Extentions (VBE) als Basisadapter . VBE wird weitgehend unterstützt und unterstützt 16-24-Bit-Farben und bis zu 1600x1200 Pixel.
8bittree
3
Es wäre nicht VESA BIOS - Erweiterung sein, da Windows tut rundweg nicht invoke BIOS / UEFI - Code für etwas , nachdem die frühesten Stadien der Bootstrap fertig sind.
Jamie Hanrahan
2
Ich habe einige Computer gesehen, einschließlich meines Laptops, auf denen der Windows-Startbildschirm mit einer extrem niedrigen Auflösung (320 x 200, würde ich sagen, 256-Farben-Modus von VGA) startet und dann schnell zu einer höheren Auflösung wechselt.
Artelius
1
Selbst 800x600 bei 16 Farben sprengen die Möglichkeiten von VGA. VGA erreichte eine maximale Auflösung von 640 x 480 (16 Farben). Die Hersteller von Grafikchips gingen jedoch noch weiter und fügten sogenannte SVGA-Modi ("SuperVGA") hinzu, die Farben und Auflösung verbessern und über eigene Modi verfügen. VESA bot eine Standardmethode für den Zugriff auf diese proprietären Modi an. Dies war jedoch zu der Zeit, als der PC in erster Linie über eine grafische Benutzeroberfläche betrieben wurde. Daher waren Treiber eine gute Wahl. Es war auch, als die 3D-Beschleunigung hinzukam. Während die meisten Karten VESA-kompatibel wurden, sprach niemand darüber.
Trlkly
16

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:

  • Textmodus in 16 (ish) Farben (80 x 25) (so sieht ein BIOS-Ladebildschirm im Wesentlichen aus)
  • 16 Farben 640x480 hochauflösender Modus
  • High-Color-Modus mit 256 Farben (320 x 200)

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.

Artelius
quelle