Processo de paginação do sistema

A maioria das operações de paginação ocorre em um contexto do processo de paginação do sistema. A única exceção é a atualização da tabela de página do retorno de chamada UpdateGpuVirtualAddress, que ocorre em um contexto especial complementar e ocorre em sincronia com a renderização.

O kernel de gráficos DirectX usa o processo de paginação do sistema para executar operações de paginação, como:

  • Transferir alocação entre a memória da GPU (unidade de processamento de elementos gráficos) do sistema e local
  • Preencher alocações com padrão
  • Atualizar tabelas de página
  • Mapear alocações para o segmento de abertura
  • Liberar o buffer de look-aside de tradução

O processo de paginação tem seu próprio espaço de endereço virtual de GPU, contextos de GPU e buffers de DMA (acesso direto à memória) (chamados de buffers de paginação). Ele possui suas próprias tabelas de página, que são mantidas na memória física e removidas somente durante transições de estado de energia.

O espaço de endereço virtual para o processo de paginação possui um layout predefinido, é inicializado durante a inicialização do adaptador e sempre que o conteúdo da memória é perdido devido a oscilações energéticas.

Diagrama que mostra a relação entre espaços de endereço virtuais e físicos no processo de paginação do sistema.

O kernel de gráficos DirectX inicializa tabelas de página e entradas de tabela de página suficientes na tabela de página raiz para cobrir o espaço de endereço virtual de 1 GB. A área de rascunho é usada para alocações temporárias de mapa durante operações de transferência e preenchimento para o espaço de endereço virtual do processo de paginação. Se uma alocação não se ajustar à área de buffer do endereço virtual, a operação de transferência será feita em partes.

Uma alocação de tabela de páginas raiz do sistema é criada para o processo de paginação. Seu conteúdo é definido durante a inicialização e nunca é alterado (exceto após transições de energia).

As tabelas de página do processo do sistema são divididas em duas partes:

Uma tabela de páginas do sistema é criada que reflete a tabela de páginas da área temporária no espaço de endereço do processo do sistema. Isso permite que o processo do sistema modifique as tabelas de página da área de arranhão e mapeie/desmapeie a memória da área de arranhão, conforme necessário. O conteúdo das tabelas de página é definido durante a inicialização do adaptador e nunca é alterado. As entradas da tabela de páginas da área de memória temporária são usadas para mapear alocações no espaço de endereço virtual do processo de paginação. Eles são inicializados como inválidos durante a inicialização e usados posteriormente para operações de paginação. As tabelas de página do processo de paginação são inicializadas por meio de operações de paginação UpdatePageTable durante a inicialização do adaptador e o evento de ativação. Para essas operações, o PageTableUpdateMode é obrigatoriamente definido como CPU_VIRTUAL e deve ser executado imediatamente usando a CPU (o buffer de paginação não deve ser usado).

As atualizações das entradas da tabela de páginas para todos os outros processos são feitas usando o PageTableUpdateMode especificado pelo driver. Essas atualizações são feitas no contexto do processo de paginação.

Veja como a configuração é feita:

  1. Uma alocação de tabela de página raiz e alocações de tabela de página de nível inferior são criadas para cobrir 1 GB de espaço de endereço.
  2. As alocações estão comprometidas a um segmento de memória.
  3. Várias operações de paginação UpdatePageTable são emitidas para o driver para inicializar as entradas da tabela de páginas.

Como exemplo da inicialização do espaço de endereço virtual do processo de paginação, vamos considerar o caso com os seguintes parâmetros:

  • O tamanho da página é de 4.096 bytes
  • O espaço de endereço virtual do processo de paginação é de 1 GB
  • O tamanho da entrada da tabela de página é de 4 bytes

Nesse caso, precisamos de um esquema de tradução de 2 níveis composto por:

  • Tabela de página raiz de um sistema
  • Tabela de página de um sistema
  • 255 tabelas de página da área de armazenamento temporário

A figura a seguir mostra como as tabelas de página seriam inicializadas com base no local da tabela de página raiz e na tabela de páginas na memória física. Observe que os endereços físicos são dados apenas como ilustração. Uma tabela de página abrange 4 MB do espaço de endereço. Portanto, a tabela de páginas do sistema abrange todas as tabelas de página da área de rascunho. A área de armazenamento temporário inicia-se a partir de um endereço virtual com 4 MB.

Como você vê, o intervalo de endereços virtuais de 0 a 4095 será inválido.

Diagrama que ilustra o processo de inicialização da tabela de páginas em um esquema de tradução de 2 níveis.