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, não é?
Os 128 MB reservados no espaço do kernel (para acesso à memória alta (espaço do 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 referindo-se a esta área, isso é verdade?
É por isso que esta área é chamada de highmem no espaço do kernel, não é?
Responder1
"Memória alta" e "memória baixa" 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 espaço do kernel o quarto GB desse espaço de endereço linear.
Os primeiros 896 MB 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 896 MB do espaço virtual do kernel e seu endereço correspondente na memória física (observe, entretanto, que o MMU está habilitado e que as entradas da tabela de páginas são na verdade usado para isso).
A última parte de 128 MB do espaço virtual do kernel é onde são mapeadas algumas partes da "memória alta" física (> 896 MB): portanto, ele só pode mapear no máximo 128 MB de "memória alta" por vez.
Referência: "Compreendendo o Kernel Linux", terceira edição - seções "8.1.3. Zonas de Memória" e "8.1.6. Mapeamentos de Kernel de Quadros de Página com Alta Memória".
Responder2
Nota: -A divisão de memória só acontece em sistemas Linux mais antigos (32 bits) para mais detalhes, veja o comentário abaixo.
Memória alta e baixa:
- Memória baixa :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 tem pouca memória.
- Alta memória:Memória para a qual não existem endereços lógicos, 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 deseja acessar.
Kernel divide o endereço virtual em duas partesdo utilizadorespaço de endereço enúcleoespaço de endereço. O código e as estruturas de dados do kernel devem caber nesse espaço, mas o maior consumidor do espaço de endereço do kernel são os mapeamentos virtuais para memória física. Assim, o kernel precisa de seu próprio endereço virtual para qualquer memória que deva tocar diretamente. Portanto, a quantidade máxima de memória física que poderia ser manipulada pelo kernel era a quantidade que poderia ser mapeada na parte do espaço de endereço virtual do kernel, menos o espaço usado pelo código do kernel.