Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 de la devolución de llamada UpdateGpuVirtualAddress, que se produce en un contexto complementario especial y se produce sincrónica de 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 asignación entre la memoria de la unidad de procesamiento de gráficos (GPU) local y del sistema
- Relleno de asignaciones con patrón
- Actualizar tablas de páginas
- Asignar asignaciones al segmento de apertura
- Vaciar el búfer de búsqueda a reserva 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.
El kernel de gráficos directX inicializa suficientes tablas de páginas y entradas de tabla de páginas en la tabla de páginas raíz para cubrir el espacio de direcciones virtual de 1 GB. El área temporal se usa para asignar asignaciones temporales durante las operaciones de transferencia y relleno al espacio de direcciones virtuales del proceso de paginación. Si una asignación no cabe en el área temporal de la dirección virtual, 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 de área temporal en el espacio de direcciones del proceso del sistema. Esto permite al proceso del sistema modificar las tablas de páginas de área temporal y asignar o desasignación de 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, PageTableUpdateMode se fuerza a CPU_VIRTUAL y se debe completar inmediatamente mediante la CPU (no se debe usar el búfer de paginación).
Novedades 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:
- Se crean asignaciones de tabla de páginas raíz y asignaciones de tabla de páginas de nivel inferior para cubrir 1 GB de espacio de direcciones.
- Las asignaciones se confirman en un segmento de memoria.
- 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, vamos a considerar 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 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áginas de área temporal. El área temporal comienza desde 4 MB de dirección virtual.
Como ve, el intervalo de direcciones virtuales de 0 a 4095 no será válido.