Share via


Gestão de memória – Kernel Mode vs User Mode

Uma parte dos incidentes de suporte que tratamos dizem respeito a problemas relacionados com a gestão de memoria. Paged pool, nonpaged pool e PTE’s (page table entries) são alguns dos termos que importa compreender. Neste post vamos descrever a arquitectura 32-bits e a diferença entre Kernel Mode (modo de Kernel) e User Mode (modo User)

Os sistemas operativos 32-bits são baseados num espaço de endereçamento 32-bits que se traduz em 4GB de memória virtual. Nesta fase importa distinguir User Mode de Kernel Mode

image_thumb2

O Espaço de Kernel (system space) é uma porção de endereçamento reservado para o Sistema Operativo, onde apenas os drivers Kernel podem aceder. Desta forma o Windows previne que algum tipo de corrupção possa ocorrer a este nível, pois de outra forma poderia colocar o sistema instável. Um exemplo prático desta situação ocorre quando uma máquina sofre o famoso Blue Screen (BSOD) em que tipicamente é algo em User Mode que tenta aceder ao espaço de Kernel e o Blue Screen não é mais do que uma excepção de erro gerada pelo sistema operativo afim de impedir a corrupção do mesmo… nesta perspectiva, o Blue screen pode ser considerado um amigo do Administrador de Sistemas :)

Por outro lado, tudo o que é executado no modo User apenas pode aceder (directamente) à informação do espaço User Mode; assim com uma Thread user mode apenas pode aceder ao contexto do próprio processo.

Os drivers em modo kernel são considerados de confiança (trusted) pelo sistema operativo e podem aceder a ambos os espaços de memoria: user e kernel mode.

Como vimos anteriormente, para cada processo em execução, o sistema reserva 2GB para seu próprio uso deixando os restantes 2GB disponíveis para uso das aplicações. Como resultado, cada processo pode crescer até ao máximo de 2GB de memoria (usando o switch 3GB este endereçamento pode ser alterado e num próximo post iremos abordar melhor esta questão)

Como conclusão, verificamos que os 4GB de espaço de endereçamento estão divididos da seguinte forma: de 0x00000000 a 0x7FFFFFFF está reservado para os processos (user mode) e de 0x80000000 a 0xFFFFFFFF para uso do próprio sistema operativo.

A memória Virtual dá-nos uma visão da gestão de memória que não necessariamente corresponde ao layout físico. Aqui entra um outro termo que já mencionei anteriormente: PTE’s ( page table entries)

2

De uma forma simplificada, o gestor de memoria traduz um espaço de memoria virtual num espaço físico e mantém uma tabela de mapeamentos (PTE’s). Cada pagina da memória virtual é listada nessa tabela de paginação, se assim lhe podemos chamar, e  que no fundo identifica o local físico onde esse pedaço de memoria reside. Estas page table entries (PTE’s) são usadas para gerir a memoria em uso. Podemos então concluir também que  que quanto mais memoria física (RAM) o sistema tiver mais PTE’s são necessários ao funcionamento do mesmo.

Tipicamente um sistema tem mais de 100.000 Free PTE’s e geralmente consideramos que um valor abaixo dos 10.000 é considerado um risco e que com menos de 5.000 é critico e pode haver falhas do sistema (eventos como o 2019 e 2020 podem indicar isso mesmo)

Os PTE’s concorrem com paged pool e nonpaged pool por recursos ao nível de Kernel (onde todos eles residem) e na seguinte localização encontramos várias chaves de registo que podem ser usadas para efectuar algum fine tunning da gestão da memoria:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ MemoryManagement]

"NonPagedPoolSize"

"PagedPoolSize"

"SessionViewSize"

"SessionPoolSize"

“PoolUsageMaximum”

Se para pequenos ajustes estas chaves podem ser a solução para o nosso problema, na grande maioria das situações este tunning não funciona porque o problema está ao nível de algum constrangimento do sistema: seja porque temos alguns componentes a consumir demasiados recursos ou porque existe alguma “limitação” imposta por exemplo pelo switch 3GG. Em todo o caso, o melhor mesmo é procurar o causador do problema ao invés de tentar remediar a situação usando as chaves de registo acima mencionadas.

Num próximo post relacionado com a gestão de memóriavamos falar de alguns destes constrangimentos que referi anteriormente (nomeadamente o uso do switch 3GB) bem como abordar alguns passos de troubleshooting que podem ajudar a identificar a origem de alguns problemas de memoria mais comuns.

até breve.

AL