Como um espaço de endereço virtual do processo de 64 bits é dividido no Linux?

12

A imagem a seguir mostra como um espaço de endereço virtual do processo de 32 bits é dividido:

insira a descrição da imagem aqui

Mas como um espaço de endereço virtual do processo de 64 bits é dividido?

Christopher
fonte

Respostas:

10

O mapa de memória virtual x86 de 64 bits divide o espaço de endereço em dois: a seção inferior (com o bit superior definido como 0) é o espaço do usuário, a seção superior (com o bit superior definido como 1) é o espaço do kernel. (Observe que x86-64 define endereços "canônico" "metade inferior" e "metade superior", com um número de bits efetivamente limitado a 48 ou 56; consulte a Wikipedia para obter detalhes.)

O mapa completo está documentado em detalhes no kernel ; atualmente parece

========================================================================================
    Start addr    | Offset  |     End addr     |  Size   | VM area description
========================================================================================
                  |         |                  |         |
 0000000000000000 |    0    | 00007fffffffffff |  128 TB | user-space virtual memory
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | non-canonical
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 ffff800000000000 | -128 TB | ffffffffffffffff |  128 TB | kernel-space virtual memory
__________________|_________|__________________|_________|______________________________

com endereços virtuais de 48 bits. (A variante de 56 bits tem a mesma estrutura, com 64 PB de espaço de endereço utilizável em ambos os lados de um orifício de 16K PB.)

Diferentemente do caso de 32 bits, o mapa de memória “64 bits” é um reflexo direto das restrições de hardware.

Stephen Kitt
fonte
Para esclarecer: essa limitação é imposta pelo hardware. Atualmente, não existe uma implementação de processador de 64 bits que não deixe um enorme buraco de endereços inutilizáveis ​​no meio do espaço de endereço virtual. A quantidade de memória física as CPUs são capazes de endereço também é muito abaixo 2 elevado à potência de 64.
Johan Myréen
Obrigado @Johan, tentei destacar isso.
Stephen Kitt