답변:
"기본 지침이 있습니까?" 예, 정확히 모든 GPU는 몇 가지 간단한 인터페이스 중 하나를 구현해야합니다. "명령 세트"라고하기에는 너무 원시적입니다. 플랫폼 펌웨어 ( "BIOS"또는 "UEFI")와 OS에 포함 된 드라이버는 . 요즘 "간단한 인터페이스"의 일반적인 선택은 원래 해당 표준의 비디오 카드에 대해 정의 된 레지스터 수준 인터페이스 인 "VGA"( "비디오 그래픽 배열")입니다. (지금 30 세 이상!)
예를 들어, Windows 시스템의 장치 관리자가 그래픽 카드를 "Microsoft Basic 비디오 어댑터"로 식별하면 OS가 카드의 특정 드라이버를 찾지 못하고 대신 VGA 호환 드라이버를로드 한 것입니다.
기술적으로 Windows는 항상 해당 드라이버를로드하므로 (부팅 진행률 화면과 같이 표시 될 수 있음) (부팅이 늦게) 그래픽 카드의 "실제"드라이버를 식별하고로드합니다.
VGA 표준은 일부 저해상도 그래픽 모드와 텍스트 모드 만 지원하며 GPU에서 "실행중인 프로그램"또는 "명령"이라고 부르는 내용은 포함하지 않습니다. 기본적으로 시스템 펌웨어 또는 "기본 비디오 드라이버"는 원하는 모드로 전환 한 다음 비트 맵에 비트를 씁니다. 비트 맵의 비트는 화면의 픽셀에 직접 대응합니다. 선이나 곡선을 그리기 위해 수행해야하는 모든 산술은 CPU에서 수행됩니다. 화면에 물건을 표시하는 매우 낮은 수준의 느린 방법입니다. 그러나 펌웨어, OS 설치 및 초기 부팅 진행 화면 등의 표시 및 간단한 상호 작용에 충분합니다.
나는 오래된 하드웨어가 어떻게 작동했는지 설명함으로써이 모든 것의 뒤에 "부두"를 정리하려고 노력할 것이다. 최신 GPU는 이와 같이 작동하지 않지만 CPU-to-graphics 카드 인터페이스를 에뮬레이트합니다.
80 년대와 90 년대 초의 그래픽 칩 / 카드는 (클럭 속도에 비해) 매우 빠르게 출력을 생성해야했기 때문에 명령을 실행하지 않고 고정 회로를 사용해야했습니다. 그들은 방금 갔을 때 RAM에서 데이터를 빨아 들였으므로 CPU는 단순히 RAM에 데이터를 올바른 장소에 덤프해야했으며 그래픽 칩이 데이터를 가져 와서 화면에 던졌습니다. CPU는 또한 그래픽 칩에서 다양한 구성 변수를 설정할 수 있습니다.
80 년대에 가정용 컴퓨터에는 몇 가지 고정 된 동작을 가진 정말 "멍청한"그래픽 칩이있었습니다. 파이프 라인을 거꾸로 통과하면 가장 의미가 있습니다.
CRT 모니터
이 모니터에는 아날로그 입력이 필요했습니다. 즉, 높은 전압 = 더 밝은 출력입니다. 컬러 모니터에는 3 개의 채널이 있습니다 (빨강, 녹색 및 파랑 (예 : YUV 또는 YIQ ) ). 이 전압은 전자 빔의 강도를 조정했습니다. 간단한 것들.
CRT 모니터는 문자 그대로 전자석을 사용하여 전자 빔을 왼쪽에서 오른쪽으로 편향시킨 다음 다시 조금 더 낮게 시작하고 왼쪽에서 오른쪽으로, 위에서 아래로 진행합니다. 그런 다음 맨 위로 돌아가 반복하십시오.
DAC
그래픽 칩에는 "디지털-아날로그"변환기 (매우 일반적인 전기 구성 요소 )가있었습니다. 이는 디지털 값 (예 : 2, 4 또는 8 비트)을 모니터에 공급할 수있는 전압으로 변환했습니다.
스캐닝
그래픽 칩은 전자 빔을 "유지"하여 적절한 값을 DAC에 보내 적절한 시간에 해당 전압을 출력 할 수 있도록해야했습니다. (내가 가지 않을 시계에는 시계가 사용되었습니다.) 여기서 명령을 실행할 시간이 없었습니다. 모든 것이 유선으로 연결되어 있고 고정 된 수의 클럭 사이클이 소요되었습니다.
비디오 모드
초기 칩은 빠르지 않았으며 RAM이 제한적이었습니다. 이로 인해 배경색, 글꼴 선택, 커서 위치 및 크기, 팔레트 선택 및 스프라이트와 같은 다양한 모드 및 기타 구성 매개 변수를 선택할 수있었습니다. 대부분은 고해상도 "문자 전용"모드와 저해상도 픽셀 단위 모드를 제공했습니다.
주목할만한 세 가지 VGA 모드는 다음과 같습니다.
그림 픽셀
그래픽 시스템에 따라 파이프 라인은 다음과 같습니다.
현재 픽셀 위치 ⇒ 프로세스 문자 / 글꼴 / 스파이트 / 픽셀 / 구성 데이터 ⇒ 픽셀 값 ⇒ 팔레트 ⇒ DAC
두 번째 RAM 위치에서 읽어야하는 것은 두 번째 단계입니다. 예를 들어, 텍스트 모드에서는 1 바이트 문자가 조회됩니다. 이것은 글꼴 테이블에 색인을 형성합니다. 이 표에서 비트가 조회되어 해당 픽셀이 전경색인지 배경색인지를 나타냅니다. 전경색 / 배경색을 얻기 위해 세 번째 바이트를 가져옵니다. RAM에서 3 바이트를 읽습니다.
그러나이 "흐름"은 방금 설명한 흐름과 똑같이 배열 된 간단한 고정 회로의 집합입니다.
메모리 버스 인터페이스
인텔 CPU에는 IO 버스라는 성가신 레거시 기능이 있지만 중요하지 않으므로 여기에없는 척합니다.
CPU는 메모리 버스에서 READ 또는 WRITE 요청과 주소를 브로드 캐스트하여 RAM에 액세스합니다. 대부분의 유효한 주소는 RAM에서 응답을 얻지 만 특정 범위는 장치에서 대신 처리 됩니다. 예를 들어 특정 주소에서 읽으면 키보드 키 누르기에 대한 정보가 제공 될 수 있습니다.
"그래픽 범위"의 오른쪽 부분에 쓰면 화면 내용과 그래픽 카드 구성 매개 변수를 모두 쓸 수 있습니다. "dumb"그래픽 칩은 명령을 실행하지 않습니다. 단지 몇 바이트가 회로를 통해 흐르고 전압을 출력하면서 플로팅을 계속 유지합니다.
VGA를 사용하면 실제로 그래픽 카드 에 RAM 이 있습니다. 그래픽 RAM이 그래픽 RAM에 기록되기 전에 사전 처리 된 데이터로 그래픽 카드를 구성하여 일부 상황에서 성능을 향상시킬 수 있기 때문입니다.
VESA
VGA 이후의 그래픽 카드는 더 높은 해상도와 우수한 색상 심도를 제공했지만 유사한 원리로 작동했습니다. 많은 최신 그래픽 카드는 여전히 부팅시 더 높은 해상도를 허용하기 위해이 호환성을 제공합니다. 그러나 VGA는 실질적으로 모든 카드가 에뮬레이트하는 "완전한"입니다.