Was genau ist VGA und worin besteht der Unterschied zu einer Grafikkarte?

30

In Lernprogrammen zur Betriebssystementwicklung wird das Erreichen von Bildschirmdaten durch direktes Schreiben auf VGA oder EGA oder Super-VGA genau beschrieben. Was ich jedoch nicht verstehe, ist der tatsächliche Unterschied zwischen dem Schreiben auf eine feste Adresse für die Anzeige und dem Schreiben auf eine Grafikkarte direkt an Bord oder entfernbar? Ich möchte nur die grundsätzliche Klärung meiner Verwirrung in Bezug auf mein Problem

Und da es bei Variablen in Karten, Verbindungsschnittstellen, Bussen, Architekturen, System-on-a-Chip-Systemen, eingebetteten Systemen usw. nicht so einfach ist, finde ich es schwierig, einen Weg zu finden, die Idee dahinter zu verstehen. . Unterscheiden sich die festen Adressen von einer High-End-GPU zu einer Low-End-Onboard-GPU? Warum und warum nicht?

Es ist eines meiner Ziele bei der Programmierung, einen Kernel zu hosten und ein Betriebssystem zu erstellen, und in der Tat ein weit hergeholter Traum. Wenn ich die Terminologie nicht verstehe, behindere ich mich nicht nur in einigen Bereichen, sondern mache mich auch in Bezug auf Hardware zum Narren.

EXTRA: Einige dieser aktuellen Antworten sprechen von der Verwendung des maximal adressierbaren Arbeitsspeichers des Prozessors in den Details zu 16-Bit. Das Problem sind einige der anderen auftretenden Probleme:

1.Was ist mit dem eigenen Speicher der Karte? Das würde keinen System-RAM für Bildschirmdaten selbst benötigen.

2.Was ist mit höheren Bit-Modi? Und können Sie das BIOS im Real-Modus (x86) nicht vernachlässigen und den Speicher trotzdem über AL adressieren?

3.Wie würde das Konzept des Schreibens an eine feste Adresse auf einer GPU mit einer Vielzahl von Registern und einer Leistung am oder über dem tatsächlichen Mikroprozessor unverändert bleiben?


quelle
Für einen kleinen historischen Kontext, überprüfen Sie meine Antwort auf eine ähnliche Frage aus: superuser.com/questions/357328/...
Russell Borogove
Es ist zu beachten, dass der Begriff nicht nur auf die Technologie / das Protokoll der Grafikkarte Bezug nimmt, sondern auch bestimmte elektrische Standards und Anzeigeauflösungen bezeichnet. Es ist schwer zu erraten, welche Bedeutung angewendet wird, selbst wenn Sie die Begriffe "im Kontext" sehen.
Daniel R Hicks

Antworten:

65

Technisch gesehen steht VGA für Video Graphics Array , einen 1987 eingeführten Videostandard von 640 x 480. Zu dieser Zeit war dies eine relativ hohe Auflösung, insbesondere für ein Farbdisplay.

Vor der Einführung von VGA hatten wir einige andere Grafikstandards, wie z. B. Herkules, der entweder Text (80 Zeilen à 25 Zeichen) oder relativ hochauflösende monochrome Grafiken (720 x 348 Pixel) anzeigt.

Weitere Standards waren zu dieser Zeit CGA ( Color Graphic Adapter ), mit dem bis zu 16 Farben bei einer Auflösung von bis zu 640x200 Pixel möglich waren. Das Ergebnis würde dann so aussehen:

Bildbeschreibung hier eingeben

Ein bemerkenswerter PC-Standard war schließlich der Enhanced Graphics Adapter (EGA), der Auflösungen von bis zu 640 × 350 mit 64 Farben ermöglichte.

(Ich ignoriere Nicht-PC-Standards, um dieses Verhältnis kurz zu halten. Wenn ich anfange, Atari- oder Amiga-Standards hinzuzufügen - bis zu 4096 Farben zu der Zeit! - dann wird dies ziemlich lang.)

1987 stellte IBM den PS2-Computer vor. Es gab einige bemerkenswerte Unterschiede zu seinen Vorgängern, darunter neue Anschlüsse für Mäuse und Tastaturen (Zuvor verwendeten Mäuse 25-polige serielle Anschlüsse oder 9-polige serielle Anschlüsse, wenn Sie überhaupt eine Maus hatten). Standard-3½-Zoll-Laufwerke und ein neuer Grafikadapter mit hoher Auflösung und vielen Farben.

Dieser Grafikstandard wurde als Video Graphics Array bezeichnet . Es wurde ein 3-reihiger 15-poliger Anschluss verwendet, um analoge Signale an einen Monitor zu übertragen. Dieser Anschluss hat bis vor einigen Jahren Bestand, als er durch überlegene digitale Standards wie DVI und Display-Port ersetzt wurde.

Nach VGA

Die Fortschritte hielten nicht bei den VGA-Standards an. Kurz nach der Einführung von VGA entstanden neue Standards wie der 800x600 S- Uper-VGA (SVGA), der den gleichen Anschluss verwendete. (Hercules, CGA, EGA usw. hatten alle ihre eigenen Anschlüsse. Sie konnten keinen CGA-Monitor an eine VGA-Karte anschließen, auch wenn Sie versucht hatten, eine ausreichend niedrige Auflösung anzuzeigen.)

Seitdem sind wir auf Displays mit viel höherer Auflösung umgestiegen, aber der am häufigsten verwendete Name bleibt VGA. Auch wenn die korrekten Namen SVGA, XVGA, UXGA usw. usw. wären.

Bildbeschreibung hier eingeben

(Grafik mit freundlicher Genehmigung von Wikipedia)


Eine andere Sache, die als "VGA" bezeichnet wird, ist der DE15-Anschluss, der mit der ursprünglichen VGA-Karte verwendet wird. Dieser normalerweise blaue Anschluss ist nicht die einzige Möglichkeit, analoge "VGA-Signale" auf einen Monitor zu übertragen, aber die häufigste.

Links: DB5HD Rechts: Alternative VGA-Anschlüsse (normalerweise für bessere Qualität verwendet) Bildbeschreibung hier eingeben


Ein dritter Weg, wie "VGA" verwendet wird, ist die Beschreibung einer Grafikkarte, obwohl diese Karte möglicherweise völlig andere Auflösungen als VGA liefert. Die Verwendung ist technisch falsch oder sollte zumindest eine "VGA-kompatible Karte" sein, aber gemeinsame Sprache macht diesen Unterschied nicht.


Damit bleibt das Schreiben an VGA

Dies ist darauf zurückzuführen, wie der Speicher eines IBM XT aufgeteilt wurde. Die CPU kann auf bis zu 1 MB (1024 KB) Speicher zugreifen. Die unteren 512 KB waren für RAM reserviert, die oberen 512 KB für Add-In-Karten, ROM usw.

In diesem oberen Bereich wurde der Speicher der VGA-Karte zugeordnet. Sie können direkt darauf schreiben und das Ergebnis wird auf dem Display angezeigt.

Dies wurde nicht nur für VGA verwendet, sondern auch für Alternativen der gleichen Generation.

  G = Grafikmodus-Video-RAM
  M = Monochrom-Textmodus-Video-RAM
  C = Farbtextmodus-Video-RAM
  V = Video ROM BIOS (wäre "a" in PS / 2)
  a = Adapterplatinen-ROM und Spezial-RAM (freier UMA-Speicher)
  r = Zusätzliches PS / 2-Motherboard-ROM-BIOS (kostenlose UMA in Nicht-PS / 2-Systemen)
  R = Motherboard ROM BIOS
  b = IBM Cassette BASIC ROM (wäre "R" bei IBM-kompatiblen Geräten)
  h = High Memory Area (HMA), wenn HIMEM.SYS geladen ist.

Herkömmlicher (Basis-) Speicher:   
Erste 512 KB (oder 8 Stücke von 64 KB). 

Oberer Speicherbereich (UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000: RRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

( Quelle der ASCII-Karte).

Hennes
quelle
1
Nit Kommentar: Es ist kein "DB15" -Anschluss. Ein DB15-Stecker hat nur zwei Stiftreihen (genau wie DB9 und DB25). Der VGA-Anschluss verfügt über 3 Stiftreihen und wird häufig als "HD15" (HD für hohe Dichte im Vergleich zu DB) bezeichnet (obwohl einige behaupten, dass "HD15" kein offizieller Name ist).
Sägemehl
2
Anmerkung 2: Der ursprüngliche IBM PC wurde möglicherweise mit einer Teilung von 512/512 veröffentlicht, wurde jedoch bald in eine Teilung von 640/384 geändert (auf diese wird auf Ihrer Quellseite verwiesen). Der Grafikspeicher beginnt bei der 640K-Marke (hex 0A0000). Ich glaube, niemandem ist jemals eine "512K-Grenze" so bewusst geworden, dass die "640K-Grenze" irgendwann zu einem bekannten Problem wurde.
Hellion
2
@sawdust: HD15 ist definitiv kein offizieller Name (ist aber so gut wie heutzutage). In der Dx-nnSteckerfamilie xist die Größe der Schale nndie Anzahl der Stifte. Shell B hat die gleiche Größe wie ein paralleler Port (oder ein alter serieller 25-Pin-Port mit vollständiger Implementierung). Shell E hat die gleiche Größe wie der serielle Anschluss. So technisch , die VGA 15-poliger Stecker wären DE-15, aber das war nie ein Teil der Urbesetzung von Anschlüssen. AFAIK gab es vor dem Einsatz von IBM auf den PS / 2-MCGAs, VGAs und 8514 / a noch nie. Wikipedia hat eine gute Erklärung: en.wikipedia.org/wiki/D-subminiature
Alexios
3
Ich liebe das Aufblähen von Auflösungen der Superlative: Ultra-Wide-Super-Extended-Hyper-Quad-Grafik-Array. Man kann es nicht als hochauflösend bezeichnen, weil es eines Tages nicht mehr so ​​sein wird!
Aidan
2
@LackingConfidence Wenn Sie die Leistung der Karten nutzen möchten, müssen Sie die jeweiligen proprietären Schnittstellen verwenden. Wenn Sie sich nicht für die Leistung interessieren, gibt es das VGA-BIOS, um einen VESA-Framebuffer für Sie einzurichten. Weitere Informationen finden Sie in der Datei vesafb.txt von Linux (und natürlich auch im Quellcode von Linux).
Derobert
10

Beim Schreiben an eine "feste Adresse" wurde im Wesentlichen direkt auf eine Grafikkarte geschrieben. Bei all diesen Video-ISA-Grafikkarten (CGA, EGA, VGA) war im Wesentlichen etwas RAM (und Register) direkt auf den CPU-Speicher und den E / A-Raum abgebildet.

Wenn Sie also ein Byte in einen bestimmten Speicherort geschrieben haben, wurde dieses Zeichen (im Textmodus) sofort auf dem Bildschirm angezeigt, da Sie tatsächlich in einen Speicher auf einer Grafikkarte geschrieben haben und die Grafikkarte diesen Speicher gerade verwendet hat.

Dies alles sieht heutzutage sehr verwirrend aus, besonders wenn man bedenkt, dass heutige Grafikkarten manchmal als VGA bezeichnet werden (und sie ähneln "echten" VGA-Karten aus den 1990er Jahren). Sogar moderne Karten emulieren einige der Funktionen dieser älteren Designs (Sie können DOS auf den meisten modernen PCs starten und DOS-Programme verwenden, die direkt in den Videospeicher schreiben). Heutzutage ist natürlich alles in der Firmware der Grafikkarte nachgebildet.

haimg
quelle
Wie würde das mit einer Onboard-Grafikkarte Sinn machen? Ich verstehe immer noch nicht, wie VGA die Addreds sein kann, wenn die Karte nicht VGA-diktiert ist.
1
Auch wenn Ihre Grafikkarte integriert ist, ist sie über eine Art Bus mit dem Rest des Systems verbunden: PCIe, PCI, AGP, ISA usw. Diese Busse können externe Komponenten mit dem Motherboard verbinden und interne Komponenten verbinden innerhalb des Chipsatzes (SATA, Video, etc.)
haimg
1
Aber woher wissen die Busse, was sie mit den Adressen anfangen sollen? Dies unterscheidet sich zwischen PCI- und Onboard-Karten, sogar GPUs oder integrierten Grafik-Mikroprozessoren.
1
Es gibt keinen Unterschied, ob die Kabel zum PCI-Anschluss verlegt sind oder ob sich alle Verbindungen in Ihrer Northbridge befinden. en.wikipedia.org/wiki/Conventional_PCI#PCI_address_spaces
haimg
3

Es gibt keinen wirklichen Unterschied: Wenn Sie an die Adresse des Videospeichers schreiben, leitet die Hardware diesen an die Grafikkarte weiter.

Wenn Sie Ihr eigenes Betriebssystem schreiben, müssen Sie wahrscheinlich sehr viel Arbeit darauf verwenden, dass die Grafikkarte den Speicher nach Ihren Wünschen abbildet. Beginnen Sie mit dem Scannen des PCI-Busses, um die Karte zu finden.

pjc50
quelle
Meine Grafikkarte befindet sich auf meiner Northbridge, sie ist nicht mit der PCI verbunden. Ich denke, es ist ein Intel GMA.
3
Ihr Grafikprozessor belegt möglicherweise keinen PCI- Steckplatz , aber er sitzt auf jeden Fall auf einem der Systembusse ... selbst wenn er sich auf der Hauptplatine befindet, auch wenn er direkt als Teil eines System-on-a-Chip integriert ist. Genauso wie die SATA-Controller Ihres Motherboards oder USB-Controller oder ... Sie sollten die aufgeführte integrierte GPU (und SATA-, USB- usw. Controller) zusammen mit ihrer PCI-ID sehen, wenn Sie einen PCI-Bus mit ausreichend Barebones verwenden Inspektionstool für Ihr Betriebssystem. Unter Linux ist es nur 'lspci' in der Kommandozeile. Für Windows bevorzuge ich Gabriel Topalas "SIW". Macs ... könnten auch eine 'lspci' haben?
FeRD
Das Betriebssystem spielt in einem solchen Fall keine Rolle, da die Hardware-Architektur und -Plattform entscheidend sind. Das Betriebssystem ist nur darauf aufgebaut und es ist der Haupteinstiegspunkt für die Interaktion mit der gesamten Hardware, für die der Kernel einen Dienst unterstützt. Die Architektur andnits-Spezifikation ist die Schnittstelle, mit der Sie arbeiten. Um Ihre Hardware zu bestimmen, schauen Sie einfach online auf Ihrem Motherboard nach. Das ist ein guter Anfang.
+1 Beginnen Sie mit dem Scannen des PCI-Busses, um die Karte zu finden.
n611x007
2

Bisher haben die Antworten erklärt, dass bei alten Grafikkarten der Videospeicher dem Adressraum des Prozessors zugeordnet wurde. Dies war das karteneigene Gedächtnis. Die Northbridge kann Anforderungen für diesen zugeordneten Speicher an das VGA-Gerät umleiten.

Hinzu kamen zahlreiche Erweiterungen und neue Modi für VGA-kompatible Karten. Dies führte zur Erstellung von VESA-BIOS-Erweiterungen (VBE), die durchlaufen int 10h. Dies unterstützt grundlegende 2D-Beschleunigung (BitBlt), Hardware-Cursor, Doppel- / Dreifachpufferung usw. Dies ist die grundlegende Methode für die Vollfarbanzeige bei jeder unterstützten Auflösung (einschließlich hoher Auflösungen). Dieser Speicher wird normalerweise auch kartenintern verwendet, wobei die Northbridge wie bei klassischem VGA eine Umleitung durchführt. Dies ist der einfachste Weg, um Grafiken in voller Collor / voller Auflösung zu nutzen.

Als nächstes wird eine direkte Methode für den Zugriff auf eine GPU ohne Verwendung des BIOS beschrieben, die den Zugriff auf dieselben und möglicherweise zusätzliche Funktionen wie VBE ermöglicht. Mein Verständnis ist hier ziemlich verschwommen. Ich denke, diese Schnittstelle ist gerätespezifisch, aber da bin ich mir nicht sicher.

Dann gibt es die GPU-Schnittstelle, die 3D-Beschleunigung / GP-GPU-Berechnung usw. unterstützen kann. Dies erfordert auf jeden Fall vom Hersteller bereitgestellte Treiber oder Spezifikationen für die volle Nutzung, und häufig gibt es auch zwischen Geräten desselben Herstellers erhebliche Unterschiede.

Kevin Cathcart
quelle
Ein Gerätetreiber ist nur unter einem Betriebssystem erforderlich. Auf die gesamte Hardware kann direkt in der Architektur zugegriffen werden.
1
Sicher, das Problem beim direkten Zugriff auf die 3D-Teile besteht darin, dass wesentliche Teile des Protokolls von einigen der großen GPU-Hersteller als Geschäftsgeheimnisse betrachtet werden und daher ein Treiber, der bereits enthalten ist, nur dann unterzeichnet wird, wenn dies rückgängig gemacht oder eine Geheimhaltungsvereinbarung unterzeichnet wurde besagtes Wissen ist erforderlich.
Kevin Cathcart
Kommt auf die Karte an. Wenn es sich um nVidia oder AMD handelt, wird es proprietär sein. Ein integrierter Intel GMA wäre sehr viel einfacher als eine nVidia GEForce.
1
Ich habe die betreffende Zeile auf "Taucher oder Spezifikationen" aktualisiert. Spezifikationen sind ausreichend, wenn Sie sie erhalten können, was in der Tat für viele neuere Intel-Grafiklösungen der Fall ist.
Kevin Cathcart
1
Für das, was es wert ist, haben alle modernen Intel- und die meisten AMD-Grafikkarten sehr große Teile ihrer Programmierspezifikationen veröffentlicht. Nvidia schweigt immer noch zu diesem Thema, aber der Open Source-Grafiktreiber von Nouveau enthält eine Menge Dokumentation (in Form von Quellcode) zur Programmierung von Nvidia-Grafikkarten. Intel / AMD / Nvidia sind heutzutage offener als proprietäre ARM-ASICs. Die eingebetteten / mobilen Chips sind die geheimsten von allen.
Allquixotic