Proceso de paginación del sistema

La mayoría de las operaciones de paginación se producen en un contexto del proceso de paginación del sistema. La única excepción es la actualización de la tabla de páginas desde la devolución de llamada UpdateGpuVirtualAddress, que se realiza en un contexto complementario especial y ocurre de manera sincrónica con la representación.

El kernel de gráficos de DirectX usa el proceso de paginación del sistema para realizar operaciones de paginación, como:

  • Transferencia de la asignación entre la memoria de la unidad de procesamiento de gráficos (GPU) local y del sistema
  • Rellenar asignaciones con patrón
  • Actualizar tablas de páginas
  • Mapeo de asignaciones al segmento de apertura
  • Vaciar el búfer de búsqueda de traducción

El proceso de paginación tiene su propio espacio de direcciones virtuales de GPU, contextos de GPU y búferes de acceso directo a memoria (DMA) (denominados búferes de paginación). Tiene sus propias tablas de páginas que se anclan en memoria física y solo se expulsan durante las transiciones de energía.

El espacio de direcciones virtuales para el proceso de paginación tiene un diseño predefinido, se inicializa durante la inicialización del adaptador y cada vez que se pierde el contenido de la memoria debido a las transiciones de energía.

Diagrama que muestra la relación entre los espacios de direcciones virtuales y físicos en el proceso de paginación del sistema.

El kernel de gráficos de DirectX inicializa suficientes tablas de páginas y entradas en la tabla de páginas raíz para cubrir el espacio de direcciones virtual de 1 GB. El área de trabajo se utiliza para mapear asignaciones temporales durante las operaciones de transferencia y llenado en el espacio de direcciones virtuales del proceso de paginación. Si una asignación no cabe en el área temporal de direcciones virtuales, la operación de transferencia se realizará en fragmentos.

Se crea una asignación de tabla de página raíz del sistema para el proceso de paginación. Su contenido se establece durante la inicialización y nunca cambia (excepto después de las transiciones de energía).

Las tablas de páginas del proceso del sistema se dividen en dos partes:

Se crea una tabla de páginas del sistema que refleja la tabla de páginas del área de buffer temporal en el espacio de direcciones del proceso del sistema. Esto permite al proceso del sistema modificar las tablas de páginas del área temporal y asignar o desasignar memoria desde el área temporal según sea necesario. El contenido de las tablas de páginas se establece durante la inicialización del adaptador y nunca cambia. Las entradas de la tabla de páginas de área temporal se usan para asignar asignaciones al espacio de direcciones virtuales del proceso de paginación. Se inicializan como no válidos durante la inicialización y se usan más adelante para las operaciones de paginación. Las tablas de páginas del proceso de paginación se inicializan a través de las operaciones de paginación UpdatePageTable durante la inicialización del adaptador y el evento de encendido. Para estas operaciones, el PageTableUpdateMode se fuerza a CPU_VIRTUAL y debe completarse inmediatamente utilizando la CPU (no se debe usar el búfer de paginación).

Las actualizaciones de las entradas de la tabla de páginas para todos los demás procesos se realizan mediante pageTableUpdateMode especificado por el controlador. Estas actualizaciones se realizan en el contexto del proceso de paginación.

Aquí se muestra cómo se realiza la instalación:

  1. Se crean asignaciones de tabla de página raíz y asignaciones de tabla de páginas de nivel inferior para cubrir 1 GB de espacio de direcciones.
  2. Las asignaciones de memoria se reservan a un segmento de memoria.
  3. Se emiten varias operaciones de paginación UpdatePageTable al controlador para inicializar las entradas de la tabla de páginas.

Como ejemplo de la inicialización del espacio de direcciones virtuales del proceso de paginación, consideremos el caso con los parámetros siguientes:

  • El tamaño de página es de 4096 bytes
  • El espacio de direcciones virtuales del proceso de paginación es de 1 GB
  • El tamaño de entrada de la tabla de páginas es de 4 bytes

En este caso, necesitamos un esquema de traducción de 2 niveles formado por:

  • Una tabla de página raíz del sistema
  • Una única tabla de páginas del sistema
  • 255 tablas de páginas de área temporal

En la ilustración siguiente se muestra cómo se inicializarían las tablas de páginas en función de la ubicación de la tabla de página raíz y la tabla de páginas en memoria física. Tenga en cuenta que las direcciones físicas solo se proporcionan como ilustración. Una tabla de páginas cubre 4 MB del espacio de direcciones. Por lo tanto, la tabla de páginas del sistema cubre todas las tablas de página del área de memoria temporal. El área de prueba comienza desde 4 MB de dirección virtual.

Como ve, el intervalo de direcciones virtuales de 0 a 4095 no será válido.

Diagrama que muestra el proceso de inicialización de la tabla de páginas en un esquema de traducción de 2 niveles.