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

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

O Linux usa um sistema de memória virtual onde todos os endereços são endereços 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, as memórias virtual e física são divididas em páginas. Cada uma dessas páginas recebe um número exclusivo; o número do quadro da página.

Alguns tamanhos de página podem ser 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.

Responder1

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

$ getconf PAGE_SIZE
4096

ou

$ getconf PAGESIZE
4096

OBSERVAÇÃO:As unidades acima são normalmente em bytes, então 4096 equivale a 4096 bytes ou 4kB.

Isso está programado na fonte do kernel 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 a mudança dá 4.096?

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

$ echo "2^12" | bc
4096

Responder2

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

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

Linux suporta dois tamanhos de página:

  • Páginas de tamanho normal, que acredito terem 4kB por padrão em todas as arquiteturas, embora algumas arquiteturas permitam outros valores, por exemplo, 16kB emARM64ou 8kB, 16kB ou 64kB emIA64. Estes correspondem ao nível mais profundo de descritores no MMU (o que o Linux chamaPTE).
  • Páginas enormes, se compilado em ( CONFIG_HUGETLB_PAGEé necessário, e CONFIG_HUGETLBFStambém para a maioria dos usos). Isso corresponde ao segundo nível mais profundo dos descritores MMU (o que o Linux chama de PMD) (ou pelo menos normalmente corresponde, não sei se isso se aplica a 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, de modo que o sistema fica sem memória mais cedo.
  • Um nível de descritor MMU mais profundo significa mais memória de kernel para tabelas de páginas.
  • Um nível de descritor 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) em seu sistema com ogetconfutilitário ou a função Csysconf.

$ getconf PAGE_SIZE
4096

Usando páginas enormesrequer a montagem do hugetlbfssistema de arquivos e mmapo ping dos arquivos lá.

Responder3

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

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

Responder4

O tamanho da página depende principalmente da arquitetura do processador. No x86, desde a época do processador 386 que introduziu o modo protegido, o tamanho da página era de 4 KB.

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

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

informação relacionada