Sürücüler yüklenmeden önce CPU GPU ile nasıl iletişim kurar? [çift]


24

Anladığım kadarıyla GPU'ların talimatları grafik sürücüleri tarafından oluşturulan kendi komut kümeleri var. GPU talimatları daha sonra GPU'ya gönderilir. Peki, sürücüler yüklenmeden önce grafik iletişimi nasıl çalışır? Bilgisayarın temel görüntüleme görevlerini yerine getirebilmesi için GPU'ların minimumda uygulaması gereken bazı temel talimatlar var mı?


Yanıtlar:


34

“Bazı temel talimatlar var mı…?” Evet kesinlikle. Tüm GPU'ların birkaç basit arayüzden birini kullanmaları gerekir - bunlar "komut setleri" olarak adlandırılmayacak kadar ilkeldir - hangi platform donanım yazılımı ("BIOS" veya "UEFI") ve işletim sistemine dahil olan sürücüler nasıl konuşulacağını bilir . Bugünlerde "basit arabirim" in genel seçimi, orijinal olarak o standardın video kartları için tanımlanan kayıt düzeyinde arabirim olan "VGA" dır ("Video Grafik Dizisi"). (Şimdi 30+ yaş!)

Örneğin, Windows sistemindeki Aygıt Yöneticisi, grafik kartını "Microsoft Temel Video Adaptörü" olarak tanıtırsa, işletim sistemi kart için belirli bir sürücü bulamadı ve bunun yerine VGA uyumlu sürücüyü yükledi.

Teknik olarak, Windows her zaman bu sürücüyü yükler (böylece önyükleme ilerleme ekranlarını görüntüleyebilir), ardından (önyüklemede oldukça geç) grafik kartınız için "gerçek" sürücüyü tanımlar ve yükler.

VGA standardı yalnızca birkaç düşük çözünürlüklü grafik modunu ve metin modunu destekler ve GPU'da "çalışan programlar" veya hatta "talimatlar" dediğim şeyi içermez. Temel olarak, sistem yazılımı veya "temel video sürücüsü" sadece istenen moda geçirir ve ardından bitmap'e bit yazar; bitmapteki bitler doğrudan ekrandaki piksellere karşılık gelir. İşlemci üzerinde çizgi veya eğri çizmek için yapılması gereken herhangi bir aritmetik işlem yapılır. Bu ekranda bir şeyler göstermek için çok düşük seviye ve yavaş bir yoldur. Ancak, işletim sistemi kurulumları ve erken önyükleme ilerlemesi ekranları vb.

Vikipedi: Video Grafik Dizisi


1
Tam durum karmaşık. İlk "VGA" kartlar gerçekten de sınırlıydı. Uzun süredir Windows NT 800x600 desteği gerektiriyordu, ama evet, sadece 16 renk. Oldukça berbat görünüyordu! Bağlandığım Wikipedia makalesine bakın.
Jamie Hanrahan

9
Windows daha büyük olasılıkla temel adaptör için VESA BIOS Extentions (VBE) kullanıyor . VBE oldukça yaygın olarak desteklenir ve 16-24 bit renk ve 1600x1200 piksele kadar izin verir.
8,

3
VESA BIOS eklentisi olmazdı çünkü Windows , bootstrap'ın en erken aşamalarından sonra herhangi bir şey için BIOS / UEFI kodunu düz bir şekilde çağırmaz .
Jamie Hanrahan

2
Dizüstü bilgisayarım da dahil olmak üzere bazı bilgisayarları gördüm, burada "dönen noktalar" Windows önyükleme ekranı çok düşük çözünürlükle başlıyor (320x200, diyorum ki, VGA'nın 256 renk modu) ve daha sonra hızla daha yüksek bir çözünürlüğe geçiyor.
Artelius

1
16 renkte 800x600 bile VGA'nın yeteneklerinin ötesindedir. VGA, 640x480 16 renkte maksimuma çıktı. Bununla birlikte, grafik yonga üreticileri bunun ötesine geçti ve kendi özel modlarına sahipken, aynı zamanda renkleri ve çözünürlüğü artıracak "SuperVGA" aka SVGA modlarını da ekleyecekti. VESA, bu tescilli modlara erişmek için standart bir yol bulmuştur, ancak bu, PC'nin öncelikle GUI tarafından yönlendirilmeye başlamasıydı ve bu nedenle sürücüler iyi bir seçimdi. Aynı zamanda 3B hızlandırma eklenmeye başlamıştı. Böylece, çoğu kart VESA uyumlu hale gelirken kimse bundan bahsetmedi.
saat

16

Eski donanımın nasıl çalıştığını açıklayarak, bunların arkasındaki "vudu" yu temizlemeye çalışacağım. Modern GPU'lar bu şekilde çalışmaz, ancak CPU-grafik kart arayüzünü taklit ederler.

tl; Dr.

80'li ve 90'lı yılların başındaki grafik yongaları / kartlar çıktıları çok hızlı bir şekilde üretmek zorunda kaldı (saat hızına göre), bu yüzden talimatları yerine getirmediler, daha ziyade sabit devreleri vardı. Gittikleri gibi verileri RAM'den emdiler, bu yüzden CPU'nun RAM'e doğru yere veri atması gerekiyordu ve grafik çipi onu toplayıp ekrana fırlattı. CPU, grafik çipinde çeşitli yapılandırma değişkenleri de ayarlayabilir.

Detaylar:

80'lerde, ev bilgisayarlarında birkaç "sabit davranışlı" aptal "grafik yongası vardı. Boru hattından geriye doğru gidersem en mantıklı olur.

CRT Monitörler

Bu monitörler analog girişlere ihtiyaç duyuyordu. Başka bir deyişle, daha yüksek voltaj = daha parlak çıkış. Renkli monitörlerde 3 kanal vardı (Kırmızı, Yeşil ve Mavi (veya örn. YUV veya YIQ ) ). Bu voltajlar bir elektron ışınının gücünü ayarladı. Basit şeyler.

CRT, elektron ışınını soldan sağa saptırmak için kelimenin tam anlamıyla kullanılan elektromıknatısları izler, daha sonra tekrar biraz daha aşağıdan başlar ve sola sağa vb. Yukarıdan aşağıya doğru gider. Ardından başa dönün ve tekrarlayın.

DAC

Grafik yongalarında "dijital-analog" dönüştürücü vardı (çok yaygın bir elektrik bileşeni ). Bu, dijital değerleri (örneğin 2, 4 veya 8 bit), monitöre sağlanabilecek gerilimlere dönüştürdü.

Tarama

Grafik yongaları, elektron ışını ile "yetişmek" zorunda kaldı, doğru değeri DAC'ye gönderiyordu ve böylece ilgili voltajı doğru zamanda verebiliyordu. (Bunun içine girmeyeceğim saatler kullanıldı.) Buradaki talimatları uygulamak için zaman yoktu. Her şey kabloluymış ve az sayıda, sabit bir saat döngüsü aldı.

Video modları

Erken cipsler çok hızlı değildi ve sınırlı RAM'leri vardı. Bu nedenle, arka plan rengi, yazı tipi seçimi, imleç konumu ve boyutu, palet seçimi ve sprite gibi çeşitli modların ve diğer yapılandırma parametrelerinin seçimine izin vermeye meyilliydiler. Çoğu yüksek çözünürlüklü "sadece karakter" modu ve daha düşük çözünürlüklü piksel piksel modları sundu.

Dikkate değer üç VGA modu:

  • 16 (ish) renkli 80x25 metin modu (bu aslında bir BIOS yükleme ekranının nasıl göründüğüdür)
  • 16 renkli 640x480 yüksek çözünürlüklü modu
  • 256 renkli 320x200 yüksek renk modu

Boyama pikselleri

Çok kabaca, grafik sistemine bağlı olarak, boru hattı şöyle bir şeye benziyor:

Geçerli piksel konumu ⇒ İşlem karakteri / yazı tipi / sprite / piksel / yapılandırma verileri ⇒ Piksel değerleri ⇒ Palet ⇒ DAC

Birkaç RAM konumundan okuma ihtiyacı duyan bu 2. adım. Örneğin, Metin Modunda 1 baytlık bir karakter aranacaktı. Bu yazı tipi tablosuna bir dizin oluşturur. Bu tablodan biraz piksel aranacak ve bu pikselin ön plan mı yoksa arka plan rengi mi olacağı belirtilecektir. Bu ön / arka plan rengini elde etmek için üçüncü bir bayt alınacaktır. Sonuçta, 3 byte RAM'den okunur.

Fakat bu "akış" hemen hemen tarif edilen akışa tam olarak benzeyen, basit bir sabit devreler kümesidir.

Hafıza veriyolu arayüzü

Intel işlemcileri IO veri yolu olarak adlandırılan sinir bozucu eski bir şeye sahipler ama önemli değil bu yüzden orada yokmuş gibi yapacağım.

CPU'lar, RAM veri yolunda bir READ veya WRITE talebi ve bir adres yayınlayarak RAM'e erişir. Geçerli adreslerin çoğu RAM'den yanıt almasına rağmen, belirli aralıklar bunun yerine aygıtlar tarafından gerçekleştirilir . Örneğin, belirli bir adresten READing size klavye tuşlarına ilişkin bilgi verebilir.

"Grafik aralığının" doğru kısımlarına yazarak hem ekran içeriğini yazabilir hem de grafik kartı yapılandırma parametrelerini ayarlayabilirsiniz. "Aptal" grafik yongası herhangi bir talimatı yerine getirmiyor. Sadece devrelenmeye devam ediyor, devreleri boyunca birkaç bayt akıyor ve gerilimleri veriyor.

VGA ile, aslında RAM var üzerinde size grafik kartını yapılandırabilirsiniz çünkü grafik RAM yazılır alır önce bazı durumlarda performansı artırmak için, veri ön işlemeye, grafik kartı.

VESA

VGA'dan sonra ekran kartları daha yüksek çözünürlükler ve iyi renk derinliği sunarken aynı prensiplerle çalıştı. Birçok modern grafik kartı, önyükleme sırasında daha yüksek çözünürlük elde etmek için hala bununla uyumluluk sağlıyor. Ancak VGA, pratik olarak her kartın taklit edeceği "kusursuz" bir kart.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.