Pergunta

Eu estou faltando alguma coisa quando se trata de compreender a necessidade de highmem para tratar mais de 1GB de RAM. Poderia alguém apontar onde eu errei? Obrigado!

O que eu sei:

  • 1 GB de memória virtual de processos (região de memória alta) é reservado para operações de kernel. O espaço utilizador pode utilizar os restantes três GB. Esta é a divisão 3/1.

  • As características de memória virtual da VM mapear as páginas de memória virtual (contínua) para páginas físicas (RAM).

O que eu não sei:

  • O que operações de usar a memória virtual do kernel? Acho que coisas como kmalloc (...) no espaço do kernel usaria kernel do memória virtual.

  • Gostaria de pensar que 4GB de RAM poderia ser utilizado ao abrigo deste regime. Eu não entendo por que o kernel 1 GB espaço virtual é o fator limitante ao abordar espaço físico. Este é o lugar onde meus breaks compreensão para baixo. Por favor, informe.

Eu estive lendo este ( http://kerneltrap.org/node/2450 ) , o que é ótimo. Mas não chega a abordar a minha pergunta para o meu gosto.

Foi útil?

Solução

A razão que o espaço virtual do kernel é um fator limitante na memória física utilizável é porque o kernel precisa ter acesso a toda a memória física, e do jeito que acessa a memória física é através de endereços virtuais do kernel. O kernel não usar instruções especiais que permitem acesso directo aos locais de memória física -. Ele tem que configurar entradas de tabela de página para todas as faixas físicas que quer falar com

No esquema "estilo antigo", as coisas conjunto do kernel para que as tabelas de páginas de cada processo mapeado endereços virtuais a partir 0xC0000000 para 0xFFFFFFFF diretamente para endereços físicos de 0x00000000 para 0x3FFFFFFF (estas páginas foram marcadas para que eles eram acessíveis apenas no anel 0 - modo kernel). Estes são os "endereços virtuais do kernel". Ao abrigo deste regime, o kernel pode ler e escrever diretamente qualquer local de memória física sem ter que mexer com a MMU para alterar os mapeamentos.

Sob o esquema highmem, os mapeamentos de endereços virtuais do kernel para endereços físicos não são fixos - partes da memória física são mapeados dentro e fora do espaço de endereço virtual do kernel que o kernel precisa ter acesso a essa memória. Isso permite que mais memória física para ser usado, mas ao custo de ter de mudar constantemente as mapeamento virtual para físico, o que é uma operação cara.

Outras dicas

Mapeamento 1 GB de núcleo em cada processo permite que os processos para mudar para o modo de núcleo sem também realizar uma mudança de contexto. As respostas a chamadas de sistema, como read(), mmap() e outros, em seguida, pode ser adequadamente processados ??no processo chamado espaço de endereço.

Se o espaço para o kernel não foram reservados em cada processo, a mudança para "modo kernel" entre a execução de código de espaço do usuário seria mais caro, e ser incapaz de usar o mapeamento endereço virtual através do (unidade de gerenciamento de memória) hardware MMU para as chamadas de sistema que estão sendo atendidas.

Os sistemas rodando um kernel de 32 bits com mais de 1GB de memória física, são capazes de atribuir locais de memória física em ZONE_HIGHMEM (aproximadamente acima da marca de 1 GB), que podem exigir o kernel para saltar através de aros para certas operações de interagir com eles. A adição de PAE (extensão de endereço físico), estende-se este problema, permitindo até 64 GB de memória física, a diminuição da proporção de memória na memória do endereço físico de 1 GB, para regiões alocados no ZONE_HIGHMEM.

  1. Por exemplo, as chamadas de sistema utilizar o espaço do kernel.
  2. Você pode ter 64 GB de RAM física, mas em plataformas de 32 bits processadores podem acessar somente 4gb por causa do 32-bit endereçamento virtual. Na verdade, você pode ter 1 GB de RAM e 3 GB de swap e endereçamento virtual vai fazer parecer que você tem 4GB. Em plataformas de 64 bits de endereçamento virtual é praticamente ilimitado.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top