Compartir a través de


Uso de segmentos de memoria para describir el espacio de direcciones de GPU

El administrador de memoria de vídeo (VidMm) se encarga de administrar el espacio de direcciones de la GPU. Para poder hacerlo, el controlador de minipuerto de pantalla en modo kernel (KMD) debe describir el espacio de direcciones de la GPU en VidMm mediante segmentos de memoria.

KMD crea segmentos de memoria para generalizar y virtualizar recursos de memoria de vídeo. Puede configurar segmentos de memoria según los tipos de memoria que admite el hardware (por ejemplo, memoria de búfer de fotogramas o apertura de memoria del sistema).

Durante la inicialización del controlador, el KMD debe devolver la lista de tipos de segmento que describen cómo VidMm puede administrar los recursos de memoria. El KMD especifica el número de tipos de segmento que admite y describe cada tipo de segmento respondiendo a las llamadas a su función DxgkDdiQueryAdapterInfo. El controlador describe cada segmento mediante una estructura DXGK_SEGMENTDESCRIPTOR. Para obtener más información, consulte Inicialización del uso de segmentos de memoria.

Después, el número y los tipos de segmentos permanecen sin cambios. VidMm:

  • Garantiza que cada proceso reciba una participación equitativa de los recursos en cualquier segmento determinado,

  • Administra todos los segmentos de forma independiente.

Los segmentos no se superponen. Por lo tanto, VidMm puede asignar una cantidad razonable de recursos de memoria de vídeo desde un segmento, independientemente de la cantidad de recursos que contiene una aplicación de otro segmento.

El KMD asigna un identificador de segmento a cada uno de sus segmentos de memoria. Más adelante, cuando VidMm solicita crear asignaciones para recursos de vídeo y representar esos recursos, el KMD:

  • Identifica los segmentos que admiten la solicitud.

  • Especifica, por orden, los segmentos que el controlador prefiere que utilice VidMm.

Para obtener más información, consulte Especificación de segmentos al crear asignaciones.

El KMD no es necesario para especificar todos los recursos de memoria de vídeo disponibles para la GPU en sus segmentos de memoria. Sin embargo, el KMD debe especificar todos los recursos de memoria que VidMm administra entre todos los procesos que se ejecutan en el sistema. Por ejemplo:

  • Un microcódigo de sombreador de vértices que implementa una canalización de función fija puede residir en el espacio de direcciones de GPU, pero fuera de la memoria que administra VidMm (es decir, no forma parte de un segmento). Esta configuración es posible porque el microcódigo siempre está disponible para todos los procesos y nunca es el origen de contención entre procesos.

  • Para recursos como búferes de vértices, texturas, destinos de representación y código de sombreador específico de la aplicación, VidMm debe asignar recursos de memoria de vídeo desde uno de los segmentos de memoria del controlador. Este requisito se debe a que los tipos de recursos deben estar disponibles de forma equitativa para todos los procesos.

En la ilustración siguiente se muestra un ejemplo de cómo un KMD puede configurar segmentos de memoria desde el espacio de direcciones de GPU.

Diagrama que ilustra la división del espacio de direcciones de GPU en segmentos de memoria.

Los números de la ilustración corresponden a los siguientes segmentos de memoria:

  1. Segmento lineal accesible para CPU: la CPU puede acceder a este segmento y se organiza como un espacio de direcciones lineal.

  2. Segmento lineal no accesible para CPU: este segmento se organiza como un espacio de direcciones lineal, pero la CPU no puede acceder a él. Se usa para los recursos que no requieren acceso a la CPU.

  3. Segmento de apertura de AGP de solo lectura: este segmento se usa para el acceso de solo lectura a la memoria de AGP (puerto gráfico acelerado).

  4. Segmento de apertura: este segmento se usa para los recursos a los que se accede a través de la apertura de AGP.

Los cuadros Oculto representan segmentos de memoria que el KMD no expone a VidMm. La memoria de vídeo que está oculta de VidMm no se puede asignar al espacio de usuario ni estar disponible exclusivamente para cualquier proceso determinado. Al hacerlo, se interrumpen las reglas fundamentales de la memoria virtual que requieren que todos los procesos que se ejecutan en el sistema tengan acceso a toda la memoria.