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?

https://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