como o tamanho da página é determinado no espaço de endereço virtual?

38

O Linux usa um sistema de memória virtual no qual todos os endereços são virtuais e não endereços físicos. Esses endereços virtuais são convertidos em endereços físicos pelo processador.

Para facilitar essa tradução, a memória física e virtual é dividida em páginas. Cada uma dessas páginas recebe um número único; o número do quadro da página.

Alguns tamanhos de página podem ser de 2 KB, 4 KB, etc. Mas como esse número de tamanho de página é determinado? É influenciado pelo tamanho da arquitetura? Por exemplo, um barramento de 32 bits terá 4 GB de espaço de endereço.

    
por JohnMerlino 07.05.2014 / 01:30

4 respostas

49

Você pode descobrir o tamanho de página padrão de um sistema consultando sua configuração por meio do comando getconf :

$ getconf PAGE_SIZE
4096

ou

$ getconf PAGESIZE
4096

NOTA: As unidades acima são normalmente em bytes, então o 4096 equivale a 4096 bytes ou 4kB.

Isso é programado na fonte do kernel do Linux aqui:

Exemplo

$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */

#define PAGE_SHIFT  12
#ifdef __ASSEMBLY__
#define PAGE_SIZE   (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE   (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK   (~(PAGE_SIZE-1))

Como o deslocamento fornece 4096?

Quando você desloca bits, você está executando uma multiplicação binária por 2. Então, com efeito, um deslocamento de bits para a esquerda ( 1 << PAGE_SHIFT ) está fazendo a multiplicação de 2 ^ 12 = 4096.

$ echo "2^12" | bc
4096
    
por 07.05.2014 / 02:47
16

O hardware (especificamente, a MMU , que faz parte da CPU) determina quais tamanhos de página são possíveis. Não há relação com o tamanho do registrador do processador e apenas uma relação indireta com o tamanho do espaço de endereço (em que a MMU determina ambos).

Quase todas as arquiteturas suportam um tamanho de página de 4kB. Algumas arquiteturas suportam páginas maiores (e algumas também suportam páginas menores), mas 4kB é um padrão muito difundido.

O Linux suporta dois tamanhos de página:

  • Páginas de tamanho normal, que acredito serem 4kB por padrão em todas as arquiteturas, embora algumas arquiteturas permitam outros valores, por exemplo, 16kB em ARM64 ou 8kB, 16kB ou 64kB em IA64 . Eles correspondem ao nível mais profundo de descritores na MMU (o que o Linux chama de PTE ).
  • Páginas enormes , se compilado em ( CONFIG_HUGETLB_PAGE é necessário, e CONFIG_HUGETLBFS também a maioria dos usos). Isso corresponde ao segundo nível mais profundo de descritores de MMU (o que o Linux chama de PMD) (ou pelo menos normalmente, não sei se isso vale para todas as arquiteturas).

O tamanho da página é um compromisso entre uso de memória, uso de memória e velocidade.

  • Um tamanho de página maior significa mais desperdício quando uma página é parcialmente usada, por isso o sistema fica sem memória mais cedo.
  • Um nível de descritor de MMU mais profundo significa mais memória do kernel para tabelas de páginas.
  • Um nível de descritor de MMU mais profundo significa mais tempo gasto na travessia da tabela de páginas.

Os ganhos de tamanhos de página maiores são pequenos para a maioria das aplicações, enquanto o custo é substancial. É por isso que a maioria dos sistemas usa apenas páginas de tamanho normal.

Você pode consultar o tamanho da página (normal) no seu sistema com o getconf utilitário ou a função C sysconf .

$ getconf PAGE_SIZE
4096

O uso de páginas enormes requer a montagem dos arquivos hugetlbfs filesystem e mmap ping lá .

    
por 08.05.2014 / 04:13
0

O tamanho da página depende principalmente da arquitetura do processador. No x86, a partir dos tempos do processador 386 que introduziu o modo protegido, o tamanho da página foi de 4 kB.

No modo x64, também pode haver páginas enormes, com tamanho de 2 MB. No entanto, usá-los é um pouco complicado.

Você pode encontrar mais informações sobre o tamanho da página em artigo da Wikipédia

    
por 07.05.2014 / 16:04
0

O processador determina os tamanhos de página disponíveis. Para a maioria dos propósitos, o tamanho de página implementado por hardware nos processadores x86 e x86_64 é de 4kb. No entanto, o sistema operacional pode alocar mais de uma página por vez, se desejar, e, assim, efetivamente implementar páginas de 8kb, 16kb ou 32kb em software.

Os processadores x86 e x86_64 também podem respectivamente misturar páginas de 4mb e 2mb junto com as páginas padrão de 4kb. Se esse recurso for usado, ele será usado principalmente para alocar espaço no kernel.

    
por 21.10.2016 / 14:13