Czym dokładnie jest VGA i jaka jest różnica między nią a kartą graficzną?

30

Samouczki poświęcone programowaniu systemu operacyjnego pozwalają precyzyjnie dotrzeć do danych na ekranie, pisząc bezpośrednio na VGA lub EGA lub Super VGA, ale nie dostaję, jaka jest prawdziwa różnica między pisaniem na stały adres w celu wyświetlenia, a zapisywaniem bezpośrednio na karcie graficznej, na pokładzie czy wymienny? Chcę tylko podstawowe wyjaśnienie mojego zamieszania w tej kwestii w mojej sprawie

A ponieważ nie jest to tak prosty przypadek ze zmiennymi w kartach, interfejsami łączeniowymi, magistralami, architekturami, systemem na chipie, systemami osadzonymi itp., Trudno mi znaleźć sposób na zrozumienie idei tego 100% . Czy stałe adresy różniłyby się od wysokiej klasy GPU do niskiej klasy na pokładzie? Dlaczego i dlaczego nie?

Jest to jeden z moich celów w programowaniu hosta jądra i stworzenia systemu operacyjnego, a także marzenie. Niezrozumienie terminologii nie tylko przeszkadza mi w niektórych obszarach, ale sprawia, że ​​wydaje mi się głupi w kwestii sprzętu.

DODATKOWE: Niektóre z tych aktualnych odpowiedzi mówią o wykorzystaniu maksymalnej pamięci adresowalnej procesorów w specyfikacjach 16-bitowych. Problemem są niektóre z innych pojawiających się problemów:

1. Co z pamięcią karty? Nie wymagałoby to systemowej pamięci RAM na dane z ekranu.

2.Co w trybach wyższych bitów? I czy nie możesz nie zaniedbać systemu BIOS w trybie rzeczywistym (x86) i nadal adresować pamięć przez AL?

3.Jak koncepcja zapisu na stały adres pozostanie niezmieniona na GPU z mnóstwem rejestrów i wydajnością na lub powyżej rzeczywistego mikroprocesora?


źródło
Dla małego kontekstu historycznego sprawdź moją odpowiedź na powiązane pytanie: superuser.com/questions/357328/...
Russell Borogove
Należy zauważyć, że oprócz odwoływania się do technologii / protokołu karty graficznej, termin ten określił określone standardy elektryczne i rozdzielczości wyświetlacza. Trudno zgadnąć, które znaczenie ma zastosowanie, nawet jeśli widzisz terminy „w kontekście”.
Daniel R Hicks,

Odpowiedzi:

65

Technicznie VGA oznacza Video Graphics Array , standard wideo 640x480 wprowadzony w 1987 roku. W tamtym czasie była to względnie wysoka rozdzielczość, szczególnie w przypadku kolorowego wyświetlacza.

Przed wprowadzeniem VGA mieliśmy kilka innych standardów graficznych, takich jak herkules, który wyświetlał tekst (80 linii po 25 znaków) lub względną grafikę monochromatyczną o wysokiej rozdzielczości (720x348 pikseli).

Inne standardy w tym czasie to CGA ( kolorowy adapter graficzny ), który również pozwalał na 16 kolorów w rozdzielczości do 640 x 200 pikseli. Rezultat wyglądałby tak:

wprowadź opis zdjęcia tutaj

Wreszcie godnym uwagi standardem na PC był ulepszony adapter graficzny (EGA), który pozwalał na rozdzielczości do 640 × 350 przy 64 kolorach.

(Ignoruję standardy inne niż PC, aby utrzymać ten stosunkowo krótki czas. Jeśli zacznę dodawać standardy Atari lub Amiga - do 4096 kolorów w tym czasie! - wtedy będzie to dość długo).

Następnie w 1987 r. IBM wprowadził komputer PS2. Miał kilka znaczących różnic w porównaniu do swoich poprzedników, w tym nowe porty dla myszy i klawiatur (wcześniej myszy używały 25-pinowych portów szeregowych lub 9-pinowych portów szeregowych, jeśli w ogóle masz mysz); standardowe dyski 3½ cala i nowy adapter graficzny o wysokiej rozdzielczości i wielu kolorach.

Ten standard graficzny nazywał się Video Graphics Array . Do przesyłania sygnałów analogowych do monitora zastosowano 3-rzędowe 15-stykowe złącze. Złącze to przetrwało kilka lat temu, kiedy zostało zastąpione lepszymi standardami cyfrowymi, takimi jak DVI i port wyświetlacza.

Po VGA

Postęp nie zatrzymał się na standardach VGA. Wkrótce po wprowadzeniu VGA powstały nowe standardy, takie jak UpGA VGA 800x600 S (SVGA), w którym zastosowano to samo złącze. (Hercules, CGA, EGA itp. Wszystkie miały własne złącza. Nie można podłączyć monitora CGA do karty VGA, nawet jeśli próbujesz wyświetlić wystarczająco niską rozdzielczość).

Od tego czasu przeszliśmy na wyświetlacze o znacznie wyższej rozdzielczości, ale najczęściej używaną nazwą pozostaje VGA. Mimo że prawidłowe nazwy to SVGA, XVGA, UXGA itp.

wprowadź opis zdjęcia tutaj

(Grafika dzięki uprzejmości Wikipedia)


Inną rzeczą, która nazywa się „VGA”, jest złącze DE15 używane z oryginalną kartą VGA. To zwykle niebieskie złącze nie jest jedynym sposobem przesyłania analogowych „sygnałów VGA” na monitor, ale jest najbardziej powszechne.

Po lewej: DB5HD Po prawej: Alternatywne złącza VGA, zwykle używane w celu uzyskania lepszej jakości) wprowadź opis zdjęcia tutaj


Trzecim sposobem użycia „VGA” jest opis karty graficznej, nawet jeśli karta ta może wytwarzać zupełnie inne rozdzielczości niż VGA. Użycie jest technicznie niepoprawne lub powinno być przynajmniej „kompatybilne z VGA”, ale zwykła mowa nie robi tej różnicy.


To pozostawia pisanie do VGA

Wynika to ze sposobu podzielenia pamięci w IBM XT. Procesor może uzyskać dostęp do 1 MB pamięci (1024 kB). Dolne 512 kB zostało zarezerwowane dla pamięci RAM, górne 512 kB dla kart dodatkowych, pamięci ROM itp.

W tym górnym obszarze mapowano pamięć kart VGA. Możesz bezpośrednio do niego napisać, a wynik pojawi się na wyświetlaczu.

Było to wykorzystywane nie tylko w przypadku VGA, ale także w przypadku alternatywnych generacji tej samej generacji.

  G = wideo RAM w trybie graficznym
  M = Monochromatyczna pamięć RAM w trybie tekstowym
  C = wideo RAM w trybie tekstowym w kolorze
  V = BIOS ROM wideo (w PS / 2 byłoby „a”)
  a = ROM płyty adaptera i specjalna pamięć RAM (wolne miejsce UMA)
  r = dodatkowy BIOS ROM płyty głównej PS / 2 (bezpłatny UMA w systemach innych niż PS / 2)
  R = BIOS płyty głównej ROM
  b = BASIC ROM IBM Cassette BASIC (w wersjach kompatybilnych z IBM byłoby „R”)
  h = High Memory Area (HMA), jeśli załadowano HIMEM.SYS.

Pamięć konwencjonalna (podstawowa):   
Pierwsze 512 KB (lub 8 porcji 64 KB). 

Obszar pamięci górnej (UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000: RRRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR

( Źródło mapy ASCII).

Hennes
źródło
1
Komentarz Nit: To nie jest złącze „DB15”. Złącze DB15 ma tylko 2 rzędy pinów (podobnie jak DB9 i DB25). Złącze VGA ma 3 rzędy styków i jest często nazywane „HD15” (HD dla wysokiej gęstości w porównaniu do DB) (chociaż niektórzy twierdzą, że „HD15” nie jest oficjalną nazwą).
trociny
2
Komentarz Nit # 2: Oryginalny komputer IBM mógł zostać wydany z podziałem 512/512, ale wkrótce został zmieniony na podział 640/384 (znajduje się na stronie źródłowej). Pamięć grafiki zaczyna się od znaku 640K (hex 0A0000). Nie sądzę, aby ktokolwiek naprawdę zdawał sobie sprawę z „granicy 512K” w taki sposób, że „granica 640K” ostatecznie stała się dobrze znanym problemem.
Hellion
2
@sawdust: HD15 zdecydowanie nie jest oficjalną nazwą (ale obecnie jest tak dobra, jak obecnie). W Dx-nnrodzinie złączy xjest rozmiar osłony, nnjest liczba pinów. Shell B ma ten sam rozmiar co port równoległy (lub stary, 25-stykowy port szeregowy pełnej implementacji). Shell E ma taki sam rozmiar jak port szeregowy. Tak więc technicznie , 15-pinowe złącze VGA byłoby DE-15, ale nigdy nie było to częścią oryginalnej linii złączy. AFAIK nigdy nie istniał przed użyciem IBM na PS / 2 MCGA, VGA i 8514 / a. Wikipedia ma dobre wytłumaczenie: en.wikipedia.org/wiki/D-subminiature
Alexios
3
Uwielbiam najwyższą inflację rozdzielczości: ultra-szeroki-super-rozszerzony-hyper-quad-układ graficzny. Nie można tego nazwać wysoką rozdzielczością, ponieważ pewnego dnia tak nie będzie!
aidan
2
@LackingConfidence, jeśli chcesz wydajności, jaką oferują karty, musisz skorzystać z ich indywidualnych, zastrzeżonych interfejsów. Jeśli nie zależy ci na wydajności, jest BIOS VGA, który skonfiguruje dla ciebie bufor ramki VESA. Sprawdź szczegóły na stronie vesafb.txt w systemie Linux (i oczywiście także w kodzie źródłowym).
derobert
10

Zapisywanie na „stały adres” polegało zasadniczo na zapisywaniu bezpośrednio na karcie graficznej. Wszystkie te karty wideo ISA (CGA, EGA, VGA) miały w zasadzie trochę pamięci RAM (i rejestrów) zmapowane bezpośrednio w pamięci procesorów i przestrzeni we / wy.

Kiedy więc zapisałeś bajt do określonej lokalizacji w pamięci, ten znak (w trybie tekstowym) natychmiast pojawił się na ekranie, ponieważ tak naprawdę zapisałeś w pamięci na karcie graficznej, a karta wideo właśnie z niej korzystała.

Wszystko to wygląda dziś bardzo myląco, zwłaszcza biorąc pod uwagę, że dzisiejsze karty graficzne są czasami nazywane VGA (i przypominają „prawdziwe” karty VGA z lat 90.). Jednak nawet współczesne karty emulują niektóre funkcje tych starszych projektów (możesz uruchomić DOS na większości nowoczesnych komputerów i używać programów DOS, które zapisują bezpośrednio w pamięci wideo). Oczywiście w dzisiejszych czasach wszystko jest emulowane w oprogramowaniu karty graficznej.

haimg
źródło
Jak więc miałoby to sens w przypadku wbudowanej karty graficznej? Nadal nie rozumiem, jak VGA może być dodatkami, jeśli karta nie jest podyktowana VGA.
1
Nawet jeśli karta graficzna jest zintegrowana, nadal jest połączona z resztą systemu za pomocą pewnego rodzaju magistrali: PCIe, PCI, AGP, ISA itp. Te magistrale mogą łączyć zewnętrzne elementy z płytą główną i mogą łączyć wewnętrzne elementy wewnątrz mikroukładu (SATA, wideo itp.)
haimg
1
Ale skąd autobusy wiedzą, co zrobić z adresami? Różni się to między kartami PCI i pokładowymi, nawet GPU lub zintegrowanymi mikroprocesorami graficznymi.
1
Nie ma żadnej różnicy, czy przewody są poprowadzone do złącza PCI, czy wszystkie połączenia znajdują się wewnątrz mostka północnego. en.wikipedia.org/wiki/Conventional_PCI#PCI_address_spaces
haimg
3

Tak naprawdę nie ma różnicy: jeśli piszesz na adres pamięci wideo, sprzęt przekieruje ją na kartę wideo.

Jeśli piszesz własny system operacyjny, prawdopodobnie będziesz musiał wykonać sporo pracy, aby karta graficzna zmapowała pamięć tak, jak chcesz, zaczynając od skanowania magistrali PCI w celu znalezienia karty.

pjc50
źródło
Moja karta graficzna jest wbudowana na moim mostku północnym, nie jest podłączona przez PCI. Myślę, że to Intel GMA.
3
Twój procesor graficzny może nie zajmować gniazda PCI , ale z pewnością znajduje się na jednej z magistral systemu ... nawet jeśli jest na płycie głównej, do diabła, nawet jeśli jest zintegrowany bezpośrednio jako część układu na układzie. Taki sam sposób, jak kontrolery SATA płyty głównej, kontrolery USB lub ... Powinieneś zobaczyć wbudowany procesor graficzny na liście (i kontrolery SATA, USB itp.) Wraz z jego identyfikatorem PCI, jeśli używasz wystarczająco szybkiej magistrali PCI narzędzie inspekcyjne dla twojego systemu operacyjnego. W Linuksie jest to po prostu „lspci” w wierszu poleceń. W przypadku systemu Windows wolę „SIW” Gabriela Topali. Mac ... może mieć także „lspci”?
FeRD,
W takim przypadku system operacyjny nie ma znaczenia, ponieważ liczy się architektura sprzętowa i platforma. System operacyjny jest po prostu zbudowany na nim i jest to główny punkt wejścia do interakcji z całym sprzętem obsługiwanym przez jądro. Interfejs architektury i specyfikacji jest tym, z czym się łączysz. Aby ustalić swój sprzęt, poszukaj swojej płyty głównej online. To łatwy początek fairlu.
+1, zaczynając od skanowania magistrali PCI w celu znalezienia karty.
n611x007
2

Dotychczasowe odpowiedzi wyjaśniły, że stare karty graficzne działały, ponieważ pamięć wideo została zmapowana do przestrzeni adresowej procesora. To była własna pamięć kart. Mostek północny wie, jak przekierowywać żądania tej zmapowanej pamięci do urządzenia VGA.

Oprócz tego pojawiły się liczne rozszerzenia i nowe tryby dla kart kompatybilnych z VGA. Doprowadziło to do stworzenia rozszerzeń VESA BIOS (VBE), które działają poprzez int 10h. Obsługuje podstawowe przyspieszenie 2D (BitBlt), kursory sprzętowe, buforowanie podwójne / potrójne itp. Jest to podstawowa metoda wyświetlania pełnokolorowego w dowolnej obsługiwanej rozdzielczości (w tym wysokich). Zwykle używana jest również pamięć wewnętrzna karty, przy czym mostek północny wykonuje przekierowanie jak w klasycznym VGA. Jest to najprostszy sposób na wykorzystanie grafiki w pełnym kolorze / rozdzielczości.

Następnie mamy bezpośrednią metodę dostępu do GPU bez korzystania z bios, co zapewnia dostęp do tych samych funkcji co VBE i ewentualnie dodatkowych. Moje rozumienie jest tutaj dość rozmyte. Myślę, że ten interfejs jest specyficzny dla urządzenia, ale wcale nie jestem tego pewien.

Następnie jest interfejs GPU, który może obsługiwać acelerację 3D / obliczenia GP-GPU itp. To zdecydowanie wymaga dostarczonych przez producenta sterowników lub specyfikacji do pełnego wykorzystania, a często występują znaczne różnice nawet między urządzeniami tego samego producenta.

Kevin Cathcart
źródło
Sterownik devce jest wymagany tylko w systemie operacyjnym. Dostęp do całego sprzętu można uzyskać bezpośrednio w architekturze.
1
Jasne, problem z bezpośrednim dostępem do części 3D polega na tym, że znaczące części protokołu są uważane za tajemnice handlowe przez niektórych głównych producentów GPU, a zatem o ile nie zostanie podpisana inżynieria odwrotna lub umowa o zachowaniu poufności, sterownik, który już zawiera wspomniana wiedza jest potrzebna.
Kevin Cathcart
Zależy od karty. Jeśli jest to nVidia lub AMD, będzie zastrzeżone. Wbudowany Intel GMA byłby o wiele łatwiejszy niż nVidia GEForce.
1
Zaktualizowałem przedmiotową linię, aby wymagała „nurków lub specyfikacji”. Specyfikacje są wystarczające, gdy można je uzyskać, co rzeczywiście ma miejsce w przypadku wielu najnowszych rozwiązań graficznych Intel.
Kevin Cathcart
1
Za to, co jest warte, wszystkie współczesne karty graficzne Intel i większość AMD mają bardzo obszerne zbiory specyfikacji programowych. Nvidia nadal milczy na ten temat, ale sterownik graficzny Open Source Nouveau zawiera wiele dokumentacji (w postaci kodu źródłowego) na temat programowania kart graficznych Nvidia. Intel / AMD / Nvidia są obecnie bardziej otwarte niż zastrzeżone układy ARM ASIC; chipy osadzone / mobilne są najbardziej tajne ze wszystkich.
allquixotic