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?


http://technet2.microsoft.com/WindowsServer/en/Library/efc41320-713f-4004-bc81-ddddfc8552651033.mspx?mfr=true


 


 


 


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 (5)

  1. LatamBlog says:

    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ógenes

  2. Marcelo says:

    Boa Tarde

    Como ficaria a sintaxe do boot para um memoria Ram  de 20 Gb no windows 2003

    grato

    Marcelo

  3. Paulo Beeny says:

    Ó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?

  4. Cláudio says:

    Olá, gostaria de saber se este processo é valido para x64 também.