VGA란 정확히 무엇이며 비디오 카드와 차이점은 무엇입니까?

VGA란 정확히 무엇이며 비디오 카드와 차이점은 무엇입니까?

운영 체제 개발 튜토리얼에서는 VGA, EGA 또는 Super VGA에 직접 기록하여 화면 데이터에 도달하는 방법을 정확히 지적하지만 디스플레이를 위해 고정 주소에 기록하는 것과 온보드에서 비디오 카드에 직접 기록하는 것의 실제 차이점은 무엇인지 이해하지 못합니다. 아니면 탈부착 가능? 내 문제에 대한 혼란에 대한 기본적인 설명을 원합니다.

그리고 카드, 연결 인터페이스, 버스, 아키텍처, 시스템 온 칩, 임베디드 시스템 등에 변수가 있는 간단한 사례가 아니기 때문에 이 100% 뒤에 있는 아이디어를 이해할 방법을 찾기가 어렵습니다. . 고정 주소가 고급 GPU와 저가형 온보드 GPU 사이에 다릅니까? 왜 그리고 왜 안되는가?

커널을 호스팅하고 운영 체제를 만드는 것은 프로그래밍의 내 목표 중 하나이며 실제로는 무리한 꿈입니다. 용어를 이해하지 못하는 것은 일부 영역에서 나를 방해할 뿐만 아니라 하드웨어 주제에 있어서도 어리석은 것처럼 보이게 만듭니다.

추가: 이러한 현재 답변 중 일부는 구체적으로 16비트에서 프로세서의 최대 주소 지정 가능 메모리를 사용하는 것에 대해 설명합니다. 문제는 다음과 같은 다른 발생 문제 중 일부입니다.

1.카드 자체의 메모리는 어떻습니까? 화면 데이터 자체에는 시스템 RAM이 필요하지 않습니다.

2.더 높은 비트 모드에서는 어떻습니까? 그리고 리얼 모드(x86)에서 BIOS를 무시하고 AL을 통해 메모리 주소를 지정할 수는 없나요?

3. 다수의 레지스터와 실제 마이크로프로세서 이상의 성능을 갖춘 GPU에서 고정 주소에 대한 쓰기 개념이 어떻게 변함없이 유지됩니까?

답변1

기술적으로 VGA는비디오 그래픽 어레이, 1987년에 도입된 640x480 비디오 표준입니다. 당시에는 특히 컬러 디스플레이의 경우 상대적으로 높은 해상도였습니다.

전에VGA가 도입되었으며 다음과 같은 몇 가지 다른 그래픽 표준이 있었습니다.헤라클레스텍스트(25자 80줄) 또는 비교적 고화질 흑백 그래픽(720x348픽셀)을 표시했습니다.

당시 다른 표준은 CGA(컬러 그래픽 어댑터), 이는 또한 최대 640x200픽셀의 해상도에서 최대 16가지 색상을 허용했습니다. 그 결과는 다음과 같습니다.

여기에 이미지 설명을 입력하세요

마지막으로 주목할만한 PC 표준은 64색으로 최대 640×350의 해상도를 허용하는 EGA(Enhanced Graphics Adapter)였습니다.

(이 상대적인 길이를 짧게 유지하기 위해 PC가 아닌 표준을 무시하고 있습니다. Atari 또는 Amiga 표준(당시 최대 4096개 색상)을 추가하기 시작하면 꽤 길어질 것입니다.)

그러다가 1987년에 IBM은 PS2 컴퓨터를 출시했습니다. 마우스와 키보드를 위한 새로운 포트가 포함된 이전 마우스와 비교할 때 몇 가지 주목할만한 차이점이 있었습니다(이전 마우스는 25핀 직렬 포트 또는 9핀 직렬 포트를 사용했지만,만약에당신은 전혀 마우스를 가지고 있었다); 표준 3½인치 드라이브와 고해상도 및 다양한 색상을 모두 갖춘 새로운 그래픽 어댑터.

이 그래픽 표준은비디오 그래픽 어레이. 아날로그 신호를 모니터로 전송하기 위해 3열 15핀 커넥터를 사용했습니다. 이 커넥터는 DVI 및 디스플레이 포트와 같은 우수한 디지털 표준으로 대체된 몇 년 전까지 사용되었습니다.

VGA 이후

VGA 표준의 발전은 멈추지 않았습니다. VGA가 도입된 직후 800x600과 같은 새로운 표준이 등장했습니다.에스동일한 커넥터를 사용한 상위 VGA(SVGA). (Hercules, CGA, EGA 등은 모두 자체 커넥터를 가지고 있습니다. 충분히 낮은 해상도를 표시하려고 해도 CGA 모니터를 VGA 카드에 연결할 수 없습니다.)

그 이후로 우리는 훨씬 더 높은 해상도의 디스플레이로 옮겨갔지만 가장 자주 사용되는 이름은 여전히 ​​VGA입니다. 올바른 이름은 SVGA, XVGA, UXGA 등이지만

여기에 이미지 설명을 입력하세요

(그래픽 제공: Wikipedia)


'VGA'라고 불리는 또 다른 것은 원래 VGA 카드와 함께 사용되는 DE15 커넥터입니다. 일반적으로 파란색 커넥터는 아날로그 'VGA 신호'를 모니터에 전송하는 유일한 방법은 아니지만 가장 일반적입니다.

왼쪽: DB5HD 오른쪽: 대체 VGA 커넥터, 일반적으로 더 나은 품질을 위해 사용됨) 여기에 이미지 설명을 입력하세요


'VGA'가 사용되는 세 번째 방법은 그래픽 카드가 VGA와 완전히 다른 해상도를 생성할 수 있더라도 그래픽 카드를 설명하는 것입니다. 기술적으로 사용이 잘못되었거나 최소한 'VGA 호환 카드'여야 하지만 일반적인 말로는 그런 차이가 없습니다.


그게 떠난다VGA에 쓰기

이는 IBM XT의 메모리가 분할된 방식에서 비롯됩니다. CPU는 최대 1MiB(1024KiB)의 메모리에 액세스할 수 있습니다. 하단 512KiB는 RAM용으로 예약되었고, 상단 512KiB는 추가 카드, ROM 등을 위해 예약되었습니다.

이 위쪽 영역은 VGA 카드 메모리가 매핑된 위치입니다. 직접 쓸 수 있으며 결과가 디스플레이에 표시됩니다.

이는 VGA에만 사용된 것이 아니라 동세대 대안에도 사용되었습니다.

  G = 그래픽 모드 비디오 RAM
  M = 흑백 텍스트 모드 비디오 RAM
  C = 컬러 텍스트 모드 비디오 RAM
  V = 비디오 ROM BIOS(PS/2에서는 "a"임)
  a = 어댑터 보드 ROM 및 특수 목적 RAM(여유 UMA 공간)
  r = 추가 PS/2 마더보드 ROM BIOS(PS/2가 아닌 시스템에서는 무료 UMA)
  R = 마더보드 ROM BIOS
  b = IBM 카세트 BASIC ROM(IBM 호환 제품에서는 "R"임)
  h = HMA(High Memory Area)(HIMEM.SYS가 로드된 경우).

기존(기본) 메모리:   
처음 512KB(또는 64KiB의 8개 청크)

상위 메모리 영역(UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000: RRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

(원천ASCII 맵).

답변2

"고정 주소"에 쓰기~였다본질적으로 비디오 카드에 직접 기록합니다. 모든 비디오 ISA 비디오 카드(CGA, EGA, VGA)에는 기본적으로 일부 RAM(및 레지스터)이 CPU 메모리 및 I/O 공간에 직접 매핑되어 있습니다.

따라서 특정 메모리 위치에 바이트를 쓰면 해당 문자(텍스트 모드)가 화면에 즉시 나타납니다. 실제로 비디오 카드에 있는 메모리에 썼고 비디오 카드가 해당 메모리를 사용했기 때문입니다.

오늘날에는 이 모든 것이 매우 혼란스러워 보입니다. 특히 오늘날의 비디오 카드를 VGA라고 부르는 경우가 있다는 점을 고려하면 더욱 그렇습니다(1990년대의 "진정한" VGA 카드와 유사함). 그러나 최신 카드도 이러한 이전 디자인의 기능 중 일부를 에뮬레이트합니다(대부분의 최신 PC에서 DOS를 부팅하고 비디오 메모리에 직접 쓰는 DOS 프로그램을 사용할 수 있음). 물론 요즘에는 비디오 카드의 펌웨어에서 모두 에뮬레이션됩니다.

답변3

실제로 차이는 없습니다. 비디오 메모리 주소에 쓰는 경우 하드웨어는 이를 비디오 카드로 라우팅합니다.

자신만의 운영 체제를 작성하는 경우 PCI 버스를 검색하여 카드를 찾는 것부터 시작하여 그래픽 카드가 원하는 방식으로 메모리를 매핑하도록 하는 데 상당히 많은 작업을 수행해야 할 것입니다.

답변4

지금까지 답변에서는 기존 비디오 카드가 비디오 메모리를 프로세서의 주소 공간에 매핑함으로써 작동했다고 설명했습니다. 이것은 카드 자체의 메모리였습니다. 노스브리지는 매핑된 메모리에 대한 요청을 VGA 장치로 리디렉션하는 방법을 알고 있습니다.

그 외에도 VGA 호환 카드를 위한 다양한 확장과 새로운 모드가 있었습니다. 이로 인해 .NET을 통해 작동하는 VBE(VESA BIOS Extensions)가 생성되었습니다 int 10h. 이는 기본 2D 가속(BitBlt), 하드웨어 커서, 이중/삼중 버퍼링 등을 지원합니다. 이는 지원되는 모든 해상도(고해상도 포함)에서 풀 컬러 디스플레이를 위한 기본 방법입니다. 이는 일반적으로 카드 내부 메모리도 사용했으며 노스브리지는 클래식 VGA와 같이 리디렉션을 수행했습니다. 이는 전체 컬러/전체 해상도 그래픽을 활용하는 가장 간단한 방법입니다.

다음으로 BIOS를 사용하지 않고 GPU에 액세스하는 몇 가지 직접적인 방법을 살펴보겠습니다. 이는 VBE와 동일한 기능 및 추가 기능에 대한 액세스를 제공합니다. 내 이해는 여기서 꽤 모호합니다. 나는 이 인터페이스가 장치마다 다르다고 생각하지만, 전혀 확신할 수 없습니다.

그런 다음 3D 가속/GP-GPU 계산 등을 지원할 수 있는 GPU 인터페이스가 있습니다. 이를 위해서는 제조업체에서 제공하는 드라이버 또는 사양이 완전히 필요하며 동일한 제조업체의 장치 간에도 상당한 차이가 있는 경우가 많습니다.

관련 정보