Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
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:
- 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.
- As alocações estão comprometidas a um segmento de memória.
- 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.