Chính xác thì VGA là gì và sự khác biệt giữa nó và card màn hình là gì?


30

Hướng dẫn phát triển hệ điều hành xác định chính xác việc tiếp cận dữ liệu màn hình bằng cách ghi trực tiếp vào VGA hoặc EGA hoặc Super VGA, nhưng điều tôi không nhận được là sự khác biệt thực sự giữa việc ghi vào một địa chỉ cố định để hiển thị và ghi trực tiếp vào thẻ video hoặc có thể tháo rời? Tôi chỉ muốn làm rõ cơ bản về sự nhầm lẫn của tôi về vấn đề này

Và vì nó không phải là một trường hợp đơn giản với các biến trong thẻ, giao diện liên kết, xe buýt, kiến ​​trúc, hệ thống trên chip, hệ thống nhúng, v.v., tôi thấy khó có thể tìm ra cách để hiểu ý tưởng đằng sau 100% này . Các địa chỉ cố định có khác nhau từ GPU cao cấp so với GPU cấp thấp không? Tại sao và tại sao không?

Đó là một trong những mục tiêu của tôi trong lập trình để lưu trữ kernel và tạo ra một hệ điều hành, và một giấc mơ xa vời thực sự. Không hiểu thuật ngữ này không chỉ cản trở tôi trong một số lĩnh vực, mà còn khiến tôi có vẻ ngu ngốc về các chủ đề của phần cứng.

EXTRA: Một số câu trả lời hiện tại nói về việc sử dụng bộ nhớ có thể định địa chỉ tối đa của bộ xử lý trong các chi tiết cụ thể trên 16 bit. Vấn đề là một số trong những vấn đề phát sinh khác:

1. Còn bộ nhớ của thẻ thì sao? Điều đó sẽ không cần RAM hệ thống cho chính dữ liệu màn hình.

2. Điều gì về chế độ bit cao hơn? Và bạn không thể bỏ qua BIOS ở chế độ thực (x86) và vẫn giải quyết bộ nhớ thông qua AL?

3.Làm thế nào để khái niệm ghi vào một địa chỉ cố định sẽ không thay đổi trên GPU với vô số các thanh ghi và hiệu suất ở hoặc trên bộ vi xử lý thực tế?


Đối với một bối cảnh lịch sử nhỏ, hãy xem câu trả lời của tôi cho một câu hỏi liên quan: superuser.com/questions/357328/iêu
Russell Borogove

Cần lưu ý rằng, ngoài việc đề cập đến công nghệ / giao thức card màn hình, thuật ngữ này còn được dùng để chỉ định các tiêu chuẩn điện cụ thể và độ phân giải màn hình. Thật khó để đoán nghĩa nào đang được áp dụng, ngay cả khi bạn thấy các thuật ngữ "trong ngữ cảnh".
Daniel R Hicks

Câu trả lời:


65

Về mặt kỹ thuật VGA là viết tắt của Video Graphics Array , một tiêu chuẩn video 640x480 được giới thiệu vào năm 1987. Vào thời điểm đó có độ phân giải tương đối cao, đặc biệt là cho màn hình màu.

Trước khi VGA được giới thiệu, chúng tôi đã có một vài tiêu chuẩn đồ họa khác, chẳng hạn như hercules hiển thị văn bản (80 dòng 25 ký tự) hoặc cho đồ họa đơn sắc độ phân giải cao tương đối (ở 720x348 pixel).

Các tiêu chuẩn khác tại thời điểm đó là CGA ( Bộ điều hợp đồ họa màu ), cũng cho phép tối đa 16 màu ở độ phân giải lên tới 640x200 pixel. Kết quả của nó sẽ trông như thế này:

nhập mô tả hình ảnh ở đây

Cuối cùng, một tiêu chuẩn PC đáng chú ý là bộ điều hợp đồ họa Nâng cao (EGA), cho phép độ phân giải lên tới 640 × 350 với 64 màu.

(Tôi đang bỏ qua các tiêu chuẩn không phải là PC để duy trì sự tương đối ngắn này. Nếu tôi bắt đầu thêm các tiêu chuẩn Atari hoặc Amiga - lên tới 4096 màu vào thời điểm đó! - thì điều này sẽ khá lâu.)

Sau đó, vào năm 1987, IBM đã giới thiệu máy tính PS2. Nó có một số khác biệt đáng chú ý so với các phiên bản trước, bao gồm các cổng mới cho chuột và bàn phím (Trước đây chuột sử dụng cổng nối tiếp 25 chân hoặc cổng nối tiếp 9 chân, nếu bạn có chuột); ổ đĩa 3 inch tiêu chuẩn và bộ chuyển đổi đồ họa mới với cả độ phân giải cao và nhiều màu sắc.

Tiêu chuẩn đồ họa này được gọi là Video Graphics Array . Nó đã sử dụng đầu nối 3 hàng, 15 chân để truyền tín hiệu analog sang màn hình. Kết nối này được kéo dài cho đến một vài năm trước, khi nó được thay thế bởi các tiêu chuẩn kỹ thuật số cao cấp như DVI và cổng hiển thị.

Sau VGA

Tiến độ không dừng lại với các tiêu chuẩn VGA. Ngay sau khi giới thiệu VGA, các tiêu chuẩn mới đã xuất hiện, chẳng hạn như VGA uper 800x600 S (SVGA), sử dụng cùng một đầu nối. (Hercules, CGA, EGA, v.v ... đều có đầu nối riêng. Bạn không thể kết nối màn hình CGA với thẻ VGA, ngay cả khi bạn đã cố hiển thị độ phân giải đủ thấp).

Kể từ đó, chúng tôi đã chuyển sang màn hình độ phân giải cao hơn nhiều, nhưng tên thường được sử dụng nhất vẫn là VGA. Mặc dù tên chính xác sẽ là SVGA, XVGA, UXGA, v.v.

nhập mô tả hình ảnh ở đây

(Lịch sự của Wikipedia)


Một thứ khác được gọi là 'VGA' là đầu nối DE15 được sử dụng với thẻ VGA gốc. Đầu nối thường màu xanh này không phải là cách duy nhất để truyền tín hiệu 'VGA' tương tự sang màn hình, nhưng nó là cách phổ biến nhất.

Trái: DB5HD Phải: Đầu nối VGA thay thế, thường được sử dụng để có chất lượng tốt hơn) nhập mô tả hình ảnh ở đây


Cách thứ ba 'VGA' được sử dụng là để mô tả một card đồ họa, mặc dù card đó có thể tạo ra độ phân giải hoàn toàn khác so với VGA. Việc sử dụng sai về mặt kỹ thuật, hoặc ít nhất nên là 'Thẻ tương thích VGA', nhưng lời nói thông thường không tạo ra sự khác biệt đó.


Điều đó để lại cho VGA

Điều này xuất phát từ cách bộ nhớ trên IBM XT bị lệch. CPU có thể truy cập bộ nhớ lên tới 1MiB (1024KiB). 512KiB dưới cùng được dành riêng cho RAM, 512 KiB trên cho thẻ bổ trợ, ROM, v.v.

Khu vực phía trên này là nơi bộ nhớ thẻ VGA được ánh xạ tới. Bạn có thể trực tiếp viết thư cho nó và kết quả sẽ hiển thị trên màn hình.

Điều này không chỉ được sử dụng cho VGA, mà còn cho các lựa chọn thay thế cùng thế hệ.

  G = RAM chế độ đồ họa
  M = RAM đơn sắc Chế độ văn bản RAM
  C = Màu chế độ văn bản RAM video
  V = ROM ROM BIOS (sẽ là "a" trong PS / 2)
  a = ROM bo mạch điều hợp và RAM chuyên dụng (không gian UMA miễn phí)
  r = BIOS ROM bo mạch chủ PS / 2 bổ sung (UMA miễn phí trong các hệ thống không phải PS / 2)
  R = BIOS ROM bo mạch chủ
  b = ROM IBM Cassette BASIC (sẽ là "R" trong phần tương thích của IBM)
  h = Vùng nhớ cao (HMA), nếu HIMEM.SYS được tải.

Bộ nhớ thông thường (cơ sở):   
512KB đầu tiên (hoặc 8 khối 64KiB). 

Vùng nhớ trên (UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000: RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRRR

( Nguồn bản đồ ASCII).


1
Nhận xét về Nit: Đây không phải là đầu nối "DB15". Một đầu nối DB15 chỉ có 2 hàng chân (giống như DB9 và DB25). Đầu nối VGA có 3 hàng chân và thường được gọi là "HD15" (HD cho mật độ cao so với DB) (mặc dù một số người khẳng định rằng "HD15" không phải là tên chính thức).
mùn cưa

2
Nhận xét Nit # 2: Máy tính IBM ban đầu có thể đã được phát hành với phần tách 512/512, nhưng nó đã sớm được thay đổi thành phần tách 640/384 (phần này được tham chiếu trong trang nguồn của bạn). Bộ nhớ đồ họa bắt đầu ở mốc 640K (hex 0A0000). Tôi không nghĩ có ai từng thực sự biết về "ranh giới 512K" theo cách mà "ranh giới 640K" cuối cùng trở thành một vấn đề nổi tiếng.
Hellion

2
@sawdust: HD15 chắc chắn không phải là một tên chính thức (nhưng tốt như, những ngày này). Trong họ Dx-nnđầu nối, xlà kích thước của vỏ, nnlà số chân. Shell B có cùng kích thước với một cổng song song (hoặc một cổng nối tiếp 25 chân cũ, thực hiện đầy đủ). Shell E có cùng kích thước với cổng nối tiếp. Về mặt kỹ thuật , đầu nối VGA 15 chân sẽ là DE-15, nhưng đây không bao giờ là một phần của dòng đầu nối ban đầu. AFAIK nó thậm chí chưa từng tồn tại trước khi IBM sử dụng trên PS / 2 MCGA, VGA & 8514 / a. Wikipedia có một lời giải thích hay: en.wikipedia.org/wiki/D-subminiature
Alexios

3
Tôi yêu sự lạm phát cực đại của các nghị quyết: siêu đồ họa siêu rộng siêu siêu mở rộng. Bạn không thể gọi nó là def-def, bởi vì một ngày nào đó nó sẽ không xảy ra!
Aidan

2
@LackingConfidence nếu bạn muốn hiệu suất mà thẻ có thể cung cấp, bạn cần sử dụng các giao diện độc quyền riêng của họ. Nếu bạn không quan tâm đến hiệu suất, có BIOS VGA để thiết lập bộ đệm khung VESA cho bạn. Hãy xem vesafb.txt của Linux để biết chi tiết (và tất nhiên cả mã nguồn cũng như trong Linux).
derobert

10

Bằng văn bản cho một "địa chỉ cố định" đã được chủ yếu bằng văn bản cho một card màn hình trực tiếp. Tất cả các thẻ video ISA video (CGA, EGA, VGA) về cơ bản đều có một số RAM (và các thanh ghi) được ánh xạ trực tiếp vào bộ nhớ CPU và không gian I / O.

Vì vậy, khi bạn viết một byte đến một vị trí bộ nhớ nhất định, ký tự đó (ở chế độ văn bản) sẽ xuất hiện ngay trên màn hình, vì thực tế bạn đã ghi vào bộ nhớ nằm trên thẻ video và thẻ video chỉ sử dụng bộ nhớ đó.

Tất cả điều này có vẻ rất khó hiểu ngày nay, đặc biệt khi xem xét rằng các thẻ video ngày nay đôi khi được gọi là VGA (và chúng có sự tương đồng với thẻ VGA "thật" từ những năm 1990). Tuy nhiên, ngay cả các thẻ hiện đại cũng mô phỏng một số chức năng của các thiết kế cũ này (bạn có thể khởi động DOS trên hầu hết các PC hiện đại và sử dụng các chương trình DOS ghi trực tiếp vào bộ nhớ video). Tất nhiên, ngày nay tất cả đều được mô phỏng trong phần sụn của card màn hình.


Vì vậy, làm thế nào có ý nghĩa với một thẻ video trên tàu? Tôi vẫn không hiểu làm thế nào VGA có thể là addreds nếu thẻ không được VGA ra lệnh.

1
Ngay cả khi card màn hình của bạn được tích hợp, nó vẫn được kết nối với phần còn lại của hệ thống thông qua một loại bus: PCIe, PCI, AGP, ISA, v.v. Những bus này có thể kết nối các thành phần bên ngoài với bo mạch chủ và có thể kết nối các thành phần bên trong bên trong chipset (SATA, video, v.v.)
haimg

1
Nhưng làm thế nào để xe buýt biết phải làm gì với các địa chỉ? Điều này sẽ khác nhau giữa PCI và thẻ trên bo mạch, GPU thậm chí hoặc bộ vi xử lý đồ họa tích hợp.

1
Không có sự khác biệt nào, cho dù các dây được định tuyến đến đầu nối PCI, hoặc nếu tất cả các kết nối nằm trong cầu bắc của bạn. vi.wikipedia.org/wiki/Convental_PCI#PCI_address_spaces
haimg

3

Thực sự không có sự khác biệt: nếu bạn ghi vào địa chỉ của bộ nhớ video, thì phần cứng sẽ định tuyến nó đến thẻ video.

Nếu bạn đang viết hệ điều hành của riêng mình, có lẽ bạn sẽ phải thực hiện rất nhiều công việc trong việc lấy card đồ họa để ánh xạ bộ nhớ theo cách bạn muốn, bắt đầu bằng cách quét bus PCI để tìm thẻ.


Card đồ họa của tôi nằm trên cầu bắc của tôi, nó không được kết nối với PCI. Tôi nghĩ đó là Intel GMA.

3
Bộ xử lý đồ họa của bạn có thể không chiếm khe cắm PCI , nhưng chắc chắn nó đang ngồi trên một trong các xe buýt của hệ thống ... ngay cả khi nó nằm trên bo mạch chủ, ngay cả khi nó được tích hợp trực tiếp như một phần của chip hệ thống. Giống như bộ điều khiển SATA của bo mạch chủ của bạn, hoặc bộ điều khiển USB, hoặc ... Bạn sẽ thấy GPU trên bo mạch được liệt kê (và bộ điều khiển SATA, USB, v.v.), cùng với ID PCI của nó, nếu bạn sử dụng bus PCI đủ barebones công cụ kiểm tra cho hệ điều hành của bạn. Trong linux, nó chỉ là 'lspci' trên dòng lệnh. Đối với Windows, tôi thích "SIW" của Gabriel Topala. Máy Mac ... cũng có thể có 'lspci'?
FeRD

HĐH không quan trọng trong trường hợp như vậy, bởi vì kiến ​​trúc phần cứng và nền tảng là thứ đáng quan tâm. HĐH chỉ được xây dựng ở trên đó và nó là điểm vào chính để tương tác với tất cả các kernel thr phần cứng hỗ trợ một dịch vụ. Đặc tả kiến ​​trúc andnits là những gì bạn đang giao tiếp. Để xác định phần cứng của bạn chỉ cần tra cứu bo mạch chủ của bạn trực tuyến. Đó là một khởi đầu dễ dàng fairlu.

+1 bắt đầu bằng cách quét bus PCI để tìm thẻ.
n611x007

2

Cho đến nay các câu trả lời đã giải thích rằng các thẻ video cũ hoạt động bằng cách có bộ nhớ video được ánh xạ vào không gian địa chỉ của bộ xử lý. Đây là bộ nhớ riêng của thẻ. Cầu bắc biết chuyển hướng yêu cầu cho bộ nhớ được ánh xạ này sang thiết bị VGA.

Sau đó, trên đó có các bản mở rộng amny và các chế độ mới cho thẻ tương thích VGA. Điều này dẫn đến việc tạo ra Phần mở rộng BIOS VESA (VBE), hoạt động thông qua int 10h. Điều này hỗ trợ tăng tốc 2D cơ bản (BitBlt), con trỏ phần cứng, bộ đệm đôi / bộ ba, v.v ... Đây là phương pháp cơ bản để hiển thị đầy đủ màu sắc ở bất kỳ độ phân giải được hỗ trợ nào (bao gồm cả độ phân giải cao). Điều này thường được sử dụng bên trong bộ nhớ cho thẻ, với cầu bắc thực hiện chuyển hướng như với VGA cổ điển. Đây là cách đơn giản nhất để sử dụng đồ họa collor / độ phân giải đầy đủ.

Tiếp theo, chúng tôi một số phương pháp truy cập GPU trực tiếp mà không cần sử dụng bios, cung cấp quyền truy cập vào các tính năng tương tự như VBE và có thể là các tính năng bổ sung. Sự hiểu biết của tôi là khá mờ nhạt ở đây. Tôi nghĩ giao diện này là thiết bị cụ thể, nhưng tôi không chắc chắn về điều đó.

Sau đó, có giao diện GPU có thể hỗ trợ tính toán 3D / GP-GPU, v.v. Điều này chắc chắn yêu cầu nhà sản xuất cung cấp trình điều khiển hoặc thông số kỹ thuật để sử dụng đầy đủ và thường có sự khác biệt về tài chính ngay cả giữa các thiết bị của cùng một nhà sản xuất.


Một trình điều khiển devce chỉ cần thiết trên một hệ điều hành. Tất cả phần cứng có thể được truy cập trực tiếp trên kiến ​​trúc.

1
Chắc chắn, vấn đề với việc truy cập trực tiếp vào các phần 3D là các phần tài chính của giao thức được coi là bí mật thương mại của một số nhà sản xuất GPU lớn, và do đó trừ khi được đảo ngược, hoặc một thỏa thuận không tiết lộ được ký kết, một trình điều khiển đã có cho biết kiến ​​thức là cần thiết.
Kevin Cathcart

Phụ thuộc vào thẻ. Nếu đó là nVidia hoặc AMD thì nó sẽ là độc quyền. Intel GMA trên bo mạch sẽ dễ dàng hơn rất nhiều so với nVidia GEForce.

1
Tôi đã cập nhật dòng được đề cập để giới thiệu lại "thợ lặn hoặc thông số kỹ thuật". Thông số kỹ thuật là hiệu quả khi bạn có thể nhận được chúng, đó thực sự là trường hợp của nhiều giải pháp đồ họa Intel gần đây.
Kevin Cathcart

1
Đối với những gì nó có giá trị, tất cả các card đồ họa hiện đại của Intel và AMD đều có những thông số kỹ thuật lập trình rất lớn được công bố. Nvidia vẫn im lặng về vấn đề này, nhưng trình điều khiển đồ họa mã nguồn mở Nouveau chứa rất nhiều tài liệu (dưới dạng mã nguồn) trên lập trình card đồ họa Nvidia. Intel / AMD / Nvidia cởi mở hơn so với ARM ASIC độc quyền ngày nay; các chip nhúng / di động là bí mật nhất trong tất cả.
allquixotic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.