Ir para o conteúdo
PS5PCEM
FuncionaFirmware e HLE

Memória direta, memória flexível e pools

Endereços convidados são endereços reais do anfitrião. A memória direta é um pool físico compartilhado e esparso mapeado nesse espaço, e o MemoryPool acrescenta reserva, commit e operações em lote sobre o mesmo suporte.

Notas do repositório até 10 de outubro de 2026

O endereço convidado é o endereço do anfitrião

O código x86-64 convidado roda nativamente e contém endereços absolutos, então o PS5PCEM não pode realocar o processo para uma alocação arbitrária. O módulo de memória reserva o layout do console antes de qualquer módulo ser carregado. A janela gerenciada pelo sistema começa em 0x40000 e vai até pouco menos de 32 GiB. Em seguida vêm as janelas reservadas pelo sistema e as de dispositivo. A janela de usuário no Windows e no Linux vai de 0x10_0000_0000 a 0xFC_0000_0000, 944 GiB de espaço de endereçamento. O macOS começa essa janela mais alto e obtém 560 GiB.

Esses intervalos são reservas, não RAM com commit. As páginas recebem commit em unidades de 16 KiB quando um mapeamento é criado, e desmapear faz decommit delas enquanto a reserva externa permanece. Outra alocação do anfitrião não pode tomar o endereço convidado entre os usos.

Memória direta e flexível

Memória direta é o nome que o convidado dá à memória física de vídeo. O título reserva um intervalo físico e depois o mapeia. Os dois passos são separados. O mapeamento verifica que o intervalo físico inteiro foi reservado, traduz a proteção de CPU e de GPU e ou faz commit do endereço fixo exato ou procura uma lacuna alinhada. O mesmo deslocamento físico pode ser mapeado em vários endereços virtuais, e esses aliases são coerentes porque compartilham um único objeto de suporte esparso.

Um mapa fixo num intervalo que o título já reservou faz commit dentro da reserva. Liberar a reserva antes derrubaria a reivindicação do título sobre as partes que ele ainda não mapeou. A memória física é liberada no formato que o título pede, que pode ser um buraco no meio ou um trecho de várias reservas. A memória flexível usa a mesma tabela de espaço de endereçamento, com um orçamento padrão da plataforma de 4 GiB, e busca a janela gerenciada pelo sistema a partir de 0x02_0000_0000 antes de recorrer à janela de usuário.

MemoryPool e o commit no Windows

As seis exportações MemoryPool da libkernel reservam uma arena virtual, expandem a capacidade física, fazem commit e decommit do suporte compartilhado, executam lotes ordenados e informam estatísticas de bloco. Blocos doados não podem ser mapeados como memória direta comum nem liberados enquanto têm commit. Commit, decommit, proteção e mudanças de tipo em lote funcionam. O MOVE em lote continua sem suporte e devolve um erro em vez de fingir que os blocos se moveram.

No Windows, visões alinhadas de memória direta compartilham visões de seção de 64 KiB. Envios temporários, readbacks e páginas convidadas de 16 KiB, portanto, não se tornam, cada um, uma carga de commit própria e sempre crescente. Consultas de uma reserva usam o registro de consulta virtual de 72 bytes do convidado e informam intervalos semiabertos com os bits de proteção originais.

O que está implementado

  • Janelas de endereço convidado fixas, com commit em páginas de 16 KiB e liberadas sem abrir mão da reserva.
  • Aliases coerentes de um mesmo deslocamento físico de memória direta.
  • Memória flexível com o orçamento padrão de 4 GiB e desmapeamentos fixos, sem sobrescrita e parciais.
  • Reserva, expansão, commit, decommit, estatísticas e lotes ordenados do MemoryPool, exceto MOVE.

O que ainda falta

  • O MOVE em lote do MemoryPool não tem suporte, de forma explícita.
  • Liberar um intervalo que o título não possui continua sendo um erro.
  • As reservas são virtuais. Só as páginas que o título mapeia consomem commit do anfitrião.

Mecanismos relacionados

O que estas páginas descrevem

O texto segue as notas de arquitetura e os relatórios de outubro de 2026 no repositório do PS5PCEM. Um teste pontual que passa não é uma nova taxa de quadros nem uma nova conclusão de jogo.

Todas as tecnologias