Boot.ini e o Gerenciamento de Memória do Windows
Boot.ini e o Gerenciamento de Memória do Windows
Por: Yuri Diógenes
1. Introdução
O arquivo boot.ini como já explicado em artigos passados é essencial para que o Windows inicie com sucesso. Porém, muito mais que apenas um arquivo necessário para o processo de boot, este arquivo também poderá influenciar na maneira em que o Windows vai fazer o gerenciamento de memória. O artigo a seguir vai mostrar algumas modificações que podem ser realizadas neste arquivo com o intuito de otimizar o uso de memória, porém também será mostrado os prós e contra do uso de tais parâmetros.
2. Espaço de Endereçamento de Memória
Houve uma época que só poderíamos acessar 640K de memória RAM, época do MS-DOS e do modelo de acesso segmentado a memória. A demanda aumentou e com o aumento da demanda veio a evolução tanto do hardware quanto do software. O ambiente que hoje domina o mercado é o de 32 bits com um modelo de acesso “flat” à memória. Com isso a memória não é mais segmentada e na realidade agora é apenas um espaço continuo de endereçamento de 4GB.
No modelo de endereçamento utilizado pelo Windows (NT/2000/XP/2003) cada processo tem acesso à até 2GB exclusivo enquanto que o núcleo do sistema operacional fica com os outros 2GB
Um outro conceito importante que deve se entendido é PTE – Page Table Entries. Este conceito é importante de ser passado agora pois dependendo do tipo de alteração que façamos no boot.ini, haverá uma mudança no SO que pode afetar estas páginas de sistema.
Antes que a CPU possa encontrar os bytes de informação localizados em páginas de memória ele precisa dinamicamente construir outras páginas de memória que contém os mapeamentos de informação necessária para que ele faça a devida busca. É este mapeamento de informações que chamamos de “Page Table Entries” ou simplesmente PTE. Com base nisso é afirmativo afirmar que os PTE’s são usados para fazer o mapeamento de espaço de endereçamento de E/S, pilhas do kernel ou arquivos, ou seja, o PTE vai apontar a localização da informação na memória física.
O processo de uso dos PTE’s então acontece da seguinte forma:
1. O dado é requisitado do Kernel ou de uma aplicação, essa requisição por sua vez é enviado para o gerenciador de memória;
2. O gerenciador de memória consulta a tabela de páginas que vai conter dados organizados da seguinte forma:
3. Após realizar consulta, o gerenciador de memória faz o acesso da informação através de consulta no endereço virtual (arquivo de paginação) e memória (RAM).
4. O gerenciador de memória então devolve o dado requisitado pela aplicação ou pelo Kernel.
3. Alterando o Boot.ini com o parâmetro /3GB
O parâmetro /3GB pode ser adicionado em um sistema operacional Windows 2000 Advanced Server, Windows 2000 Datacenter Server ou todas as versões do Windows Server 2003. Quando adicionamos este parâmetro, o que estamos fazendo na realidade é dizer para o sistema operacional que a partir de agora ele só vai utilizar até 1GB de espaço de endereçamento e que as aplicações podem usar até 3GB.
As aplicações que desejam tirar proveito desta característica precisam ter um “flag” no cabeçalho chamado de IMAGE_FILE_LARGE_ADDRESS_AWARE, este flag é adicionado ao executável da aplicação através do parâmetro /LARGEADDRESSAWARE. Caso a aplicação não seja iniciada usando este elemento o Windows não vai disponibilizar este 1GB extra para ser utilizado pela aplicação.
4. Alterando o Boot.ini com o parâmetro /Userva
Muitas vezes algumas aplicações precisam mais de 2GB de memória, porém 3GB também pode ser considerado um número alto. É possível fazer uma otimização neste espaço que compreende entre 2GB e 3GB, temos aí 1GB para distribuir de forma mais eficiente para aplicação e é aí que entra o parâmetro /userva, que está disponível em sistemas com o Windows Server 2003.
Este parâmetro é usado em conjunção com o 3GB, ou seja, o que estamos fazendo de fato é dizer que a aplicação poderá usar mais de 2GB, porém estabelecemos o valor máximo no parâmetro /userva. Vejamos como exemplo o arquivo boot.ini abaixo:
[Boot Loader]
Timeout=30
Default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
[Operating Systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows Server 2003" /3GB /Userva=2500
Neste arquivo estamos dizendo que será disponibilizado 2.5GB para a aplicação. Com isso o sistema operacional vai disponibilizar 1.5GB para o Kernel e 2.5GB para a aplicação.
5. Alterando o Boot.ini com o parâmetro /PAE
Com o que foi passado até agora é normal que uma pergunta apareça: se o sistema operacional só gerencia 4GB, o que vou fazer com meu servidor que comprei com 8GB?
Essa é uma pergunta cabível e felizmente tem uma boa resposta. Para tirar proveito do espaço de endereçamento superior a 4GB é necessário o uso do parâmetro /PAE no arquivo boot.ini.
O parâmetro PAE (Physical Address Extension) permite o uso de até 64GB de memória em sistema 32bits. Isso porque ao invés de usar o tradicional 232 = 4GB, ele usa um sistema de endereçamento de 36 bits, ou seja, 236 = 64GB. Na prática o único produto no momento disponível para tirar 100% de aproveitamento desta tecnologia é o Windows Server 2003 Datacenter Edition, que suporta 64GB de memória.
Para mais informações sobre o parâmetro PAE leia o artigo a seguir:
What Is PAE X86?
6. Pros e Contras do /3GB
Vantagem: Otimização da fragmentação de memória virtual
A fragmentação de memória acontece quando a memória está disponível para o processo, porém a página existente não é suficiente para alocação requisitada. Vejamos na figura abaixo como funciona isso na prática:
Assim como acontece na fragmentação de disco, a fragmentação de memória existe quando múltiplos blocos de página apesar de estarem disponíveis não se encontram em blocos contínuos. Veja, que ao adicionar o parâmetro /3GB temos uma mudança neste comportamento disponibilizando uma quantidade maior de memória para aplicação, com isso a tendência é termos mais páginas contínuas para alocar.
Desvantagem: Limitação da Memória Disponível para o Kernel
Apesar de ser um efeito obvio, tendo em vista que estamos agora limitando o Kernel e com isso limitando algumas das principais características do sistema operacional, como quantidade de PTE’s disponíveis. Vejamos na tabela abaixo os efeitos desta mudança:
Efetuar o boot... |
Sem 3GB |
Com 3GB |
PTE’s de sistema livre |
140.000 |
40.000 |
Número máximo do tamanho de “Paged Pool” |
300 a 340 MB |
192 MB |
Número máximo do tamanho de “NonPaged Pool” |
256 MB |
128 MB |
Como é possível notar existe uma diferença grande com o uso ou não do parâmetro. Apenas para enfatizar, a falta de PTE’s disponível no sistema por sua vez pode causar comportamentos como:
- Parada Inesperada (Tela Azul com erro 0xD8) – isso pode acontecer porque drivers podem tentar alocar mais PTE’s do que há disponível;
- Evento 51: este é um erro que acontece quando há uma operação de escrita do cache de sistema para o disco.
7. Referências
294418 Comparison of 32-Bit and 64-Bit Memory Architecture
268363 Intel Physical Addressing Extensions (PAE) in Windows 2000
171793 Information on Application Use of 4GT RAM Tuning
316739 How to Use the /USERVA Switch in the Boot.ini File to Tune /3GB
319642 Maximum Paged Pool Size no longer limited to 160 mb on Windows .NET
Comments
Anonymous
January 01, 2003
Olá Marcelo, Primeiramente obrigado por sua participação no Blog. Quanto a sua pergunta veja que no ítem 5 deste artigo inicio o parágrafo justamente tocando neste ponto: "...se o sistema operacional só gerencia 4GB, o que vou fazer com meu servidor que comprei com 8GB?" Neste caso a reposta foi: "Essa é uma pergunta cabível e felizmente tem uma boa resposta. Para tirar proveito do espaço de endereçamento superior a 4GB é necessário o uso do parâmetro /PAE no arquivo boot.ini." Então, essa resposta também é cabível para a sua pergunta. Aqui mais uma referência sobre este assunto: 283037 Large memory support is available in Windows Server 2003 and in Windows 2000 http://support.microsoft.com/default.aspx?scid=kb;EN-US;283037 Mais uma vez obrigado pelo seu post... Yuri DiógenesAnonymous
January 01, 2003
Cláudio, Voce pode encontrar informaçőes relacionadas a plataforma x64 bits em http://download.microsoft.com/download/9/e/9/9e9b9c02-4e68-46d5-83e3-86258e9e780c/Benefits_of_Windows_x64.docAnonymous
November 13, 2006
Boa Tarde Como ficaria a sintaxe do boot para um memoria Ram de 20 Gb no windows 2003 grato MarceloAnonymous
February 26, 2008
Ótima explicação. No caso de usar um Windows XP 32bits com 4GB ele só msotra 3,5GB se eu mudar o boot.ini para 4GB ele vai reconhecer e gerenciar os 4GB?Anonymous
April 07, 2008
Olá, gostaria de saber se este processo é valido para x64 também.