Extensão de endereço físico - como funcionam os endereços virtuais?

3

Estou executando o Debian Linux. uname -m says i686 , o que significa que a máquina de arquitetura de 32 bits com o pae flag está ativado. getconf LONG_BIT é 32 . A capacidade de RAM instalada é de 6 GB.

Meu /proc/cpuinfo tem uma entrada address sizes : 40 bits physical, 48 bits virtual . No entanto, meu programa está gerando apenas um endereço de 32 bits. ( Address of x is 0xbfbaf5cc )

Eu não entendo a relação entre o endereço virtual de 48 bits mostrado por cat /proc/cpuinfo e o endereço virtual gerado pelo programa em C. Informações completas sobre a CPU podem ser encontradas aqui.

Alguém poderia explicar?

    
por Tamilselvan 30.07.2015 / 13:25

2 respostas

3

PAE não altera nada em relação a endereços virtuais. Como o nome sugere, é apenas sobre endereços físicos. Como programador de aplicativos, o PAE não altera nada para você. Seu programa ainda tem um espaço de endereçamento de 32 bits, do qual o kernel leva aproximadamente 1 bit (o Linux concede 1GB, 2GB ou 3GB ao espaço do usuário, dependendo das opções de compilação). Se você quer um espaço de endereçamento maior, você precisa de um sistema de 64 bits.

O ponto da PAE é permitir que o kernel resolva mais de 4GB de RAM física. Para utilizar toda essa RAM, você precisa de vários processos, cada um dos quais pode mapear no máximo 2 GB (ou 1 GB ou 3 GB).

No modo PAE, as tabelas MMU mapeiam endereços virtuais de 32 bits para endereços físicos de 40 bits, com uma tabela de três níveis (ao contrário do modo não PAE, em que as tabelas MMU mapeiam endereços virtuais de 32 bits para endereços físicos de 32 bits) com uma tabela de dois níveis).

A indicação “48 bits virtual” refere-se às capacidades da CPU. Acho que isso significa que a CPU é de 64 bits (ou seja, uma que suporta amd64 x86-64 ) . Para usar endereços virtuais de 48 bits, você precisa executar um sistema operacional de 64 bits. Aqui, 48 bits é um pouco confuso para um programador de aplicativos: a CPU traduz apenas 48 bits do endereço, mas o endereço é codificado em 64 bits - os ponteiros ocupam 8 bytes, não 6. Os 16 bits superiores podem conter additional tags usadas pelo sistema operacional .

    
por 31.07.2015 / 09:37
1

pae represente extensão de endereço físico e permita uma cpu com um barramento de endereços de 32 bits < em> endereçar mais de 4G.

Observe que, se o seu /proc/cpuinfo show support for pae não for suficiente, você precisará usar um kernel compilado com pae options enabled (por exemplo: Estou usando um Debian pré-construído 3.16-2-686- pae)

O modelo / layout de memória de um processo Linux é definido pelo kernel do Linux e é (ou pode ser) diferente entre arquiteturas, um processo do usuário nunca veria toda a RAM física (somente o kernel), vamos dizer que o kernel pode permitir que o processo teoricamente use 2G, mas na realidade eles são usados somente quando necessário com páginas (geralmente cada um com tamanho 4K ou 16K) qual o kernel mapear do Ram físico para o processo.

    
por 30.07.2015 / 21:16