Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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
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)
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