Alta memória (espaço do usuário) e highmem (espaço do kernel)

3

Cada processo possui 2 áreas de memória: Espaço do usuário (memória alta) e espaço do kernel (memória baixa). No espaço do kernel, os primeiros 896 MB são usados para mapear o código do kernel (não totalmente 1 GB)? Isso significa que, quando um aplicativo de espaço do usuário executa uma chamada de sistema ou qualquer coisa relacionada ao kernel, o kernel se referirá ao espaço do kernel para a chamada do sistema ser executada, é?

Os 128 MB reservados no espaço do kernel (para acesso de alta memória (espaço de usuário)), são todas as referências da área de memória do espaço do usuário? Então, um processo do kernel pode acessar qualquer espaço do usuário por se referir a esta área, isso é verdade?

É por isso que esta área é chamada de highmem no espaço do kernel, não é?

    
por Amumu 02.07.2012 / 06:50

2 respostas

5

"Alta memória" e "pouca memória" não se aplicam ao espaço de endereço virtual dos processos, mas sim à memória física.

No espaço de endereço virtual do processo, o espaço do usuário ocupa os primeiros 3 GB e o kernel ocupa o quarto GB deste espaço de endereço linear.

Os primeiros 896MB do espaço do kernel (não apenas o código do kernel, mas também seus dados) são mapeados "diretamente" para os primeiros 896 MB da memória física. É "direto" no sentido de que há sempre um deslocamento de 0xc0000000 entre qualquer endereço linear desta parte de 896MB do espaço virtual do kernel e seu endereço correspondente na memória física (note que a MMU está habilitada e que as entradas da tabela de páginas são realmente usado para isso).

A última parte de 128MB do espaço virtual do kernel é onde são mapeadas algumas partes da "memória alta" física (> 896MB): assim, ela só pode mapear mais de 128MB de "memória alta" de cada vez. / p>

Referência: "Entendendo o Kernel Linux", terceira edição - seções "8.1.3. Zonas de Memória" e "8.1.6. Kernel Mappings of High-Memory Page Frames".

    
por 18.10.2012 / 13:46
1

N.B. :- Memory split only happens in older linux system (32-bit) for more details please see below comment.

Memória alta e baixa:

  • Pouca memória: Memória para a qual existem endereços lógicos no espaço do kernel. Em quase todos os sistemas que você provavelmente encontrará, toda a memória está com pouca memória.
  • Alta memória: Memória para a qual endereços lógicos não existem, porque está além do intervalo de endereços reservado para endereços virtuais do kernel. Isso significa que o kernel precisa começar a usar mapeamentos temporários das partes da memória física que quer acessar.

O Kernel divide o endereço virtual em dois espaços de endereço usuário e espaço de endereço kernel . O código do kernel e as estruturas de dados devem se encaixar nesse espaço, mas o maior consumidor do espaço de endereço do kernel é o mapeamento virtual da memória física. Assim, o kernel precisa de seu próprio endereço virtual para qualquer memória que precise tocar diretamente. Assim, a quantidade máxima de memória física que poderia ser manipulada pelo kernel era a quantidade que poderia ser mapeada na porção do espaço de endereço virtual do kernel, menos o espaço usado pelo código do kernel.

    
por 25.11.2018 / 10:35