비디오 메모리 관리자(VidMm)는 GPU의 주소 공간을 관리합니다. 이렇게 하려면 커널 모드 디스플레이 미니포트 드라이버(KMD)가 메모리 세그먼트를 사용하여 VidMm 에 대한 GPU의 주소 공간을 설명해야 합니다.
KMD는 비디오 메모리 리소스를 일반화하고 가상화하는 메모리 세그먼트를 만듭니다. 하드웨어에서 지원하는 메모리 유형(예: 프레임 버퍼 메모리 또는 시스템 메모리 조리개)에 따라 메모리 세그먼트를 구성할 수 있습니다.
드라이버 초기화 중에 KMD는 VidMm 에서 메모리 리소스를 관리하는 방법을 설명하는 세그먼트 형식 목록을 반환해야 합니다. KMD는 해당 DxgkDdiQueryAdapterInfo 함수에 대한 호출에 응답하여 지원하는 세그먼트 형식의 수를 지정하고 각 세그먼트 형식을 설명합니다. 드라이버는 DXGK_SEGMENTDESCRIPTOR 구조를 사용하여 각 세그먼트를 설명합니다. 자세한 내용은 메모리 세그먼트 사용 초기화를 참조하세요.
그 후 세그먼트의 수와 형식은 변경되지 않은 상태로 유지됩니다. VidMm:
각 프로세스가 특정 세그먼트에서 리소스의 공평한 몫을 받도록 합니다.
모든 세그먼트를 독립적으로 관리합니다.
세그먼트는 겹치지 않습니다. 따라서 VidMm 은 애플리케이션이 다른 세그먼트에서 보유하는 리소스의 양에 관계없이 한 세그먼트에서 상당한 양의 비디오 메모리 리소스를 할당할 수 있습니다.
KMD는 각 메모리 세그먼트에 세그먼트 식별자를 할당합니다. 나중에 VidMm이 비디오 리소스에 대한 할당을 만들고 해당 리소스를 렌더링하도록 요청하면 KMD는 다음을 수행합니다.
요청을 지원하는 세그먼트를 식별합니다.
드라이버에서 VidMm 을 사용하는 것을 선호하는 세그먼트를 순서대로 지정합니다.
자세한 내용은 할당을 만들 때 세그먼트 지정하기 을 참조하세요.
KMD가 메모리 세그먼트에서 GPU에서 사용할 수 있는 모든 비디오 메모리 리소스를 지정할 필요는 없습니다. 그러나 KMD는 시스템에서 실행되는 모든 프로세스 중 VidMm 이 관리하는 모든 메모리 리소스를 지정해야 합니다. 다음은 그 예입니다.
고정 함수 파이프라인을 구현하는 꼭짓점 셰이더 마이크로코드는 GPU 주소 공간에 있을 수 있지만 VidMm 이 관리하는 메모리 외부(즉, 세그먼트의 일부가 아님)에 있을 수 있습니다. 마이크로 코드는 항상 모든 프로세스에서 사용할 수 있으며 프로세스 간의 경합의 원본이 되지 않으므로 이 구성이 가능합니다.
꼭짓점 버퍼, 텍스처, 렌더링 대상 및 애플리케이션별 셰이더 코드와 같은 리소스의 경우 VidMm 은 드라이버의 메모리 세그먼트 중 하나에서 비디오 메모리 리소스를 할당해야 합니다. 이 요구 사항은 모든 프로세스에서 리소스 종류를 상당히 사용할 수 있어야 하기 때문입니다.
다음 그림에서는 KMD가 GPU 주소 공간에서 메모리 세그먼트를 구성하는 방법의 예를 보여 줍니다.
그림의 숫자는 다음 메모리 세그먼트에 해당합니다.
CPU에서 액세스할 수 있는 선형 세그먼트: 이 세그먼트는 CPU에서 액세스할 수 있으며 선형 주소 공간으로 구성됩니다.
CPU에 액세스할 수 없는 선형 세그먼트: 이 세그먼트는 선형 주소 공간으로 구성되지만 CPU에서 액세스할 수 없습니다. CPU 액세스가 필요하지 않은 리소스에 사용됩니다.
읽기 전용 AGP 조리개 세그먼트: 이 세그먼트는 AGP(가속 그래픽 포트) 메모리에 대한 읽기 전용 액세스에 사용됩니다.
조리개 세그먼트: 이 세그먼트는 AGP 조리개를 통해 액세스되는 리소스에 사용됩니다.
숨겨진 상자는 KMD가 VidMm에 노출하지 않는 메모리 세그먼트를 나타냅니다. VidMm에서 숨겨진 비디오 메모리는 사용자 공간에 매핑될 수 없으며 특정 프로세스에서만 독점적으로 사용할 수 없습니다. 이렇게 하면 시스템에서 실행되는 모든 프로세스가 모든 메모리에 액세스해야 하는 가상 메모리의 기본 규칙이 중단됩니다.