Na plataforma NT, o espaço de endereço virtual de 4 GB é dividido, por padrão, em duas partes, os 2 GB mais baixos para o espaço de endereço do processo e os 2 GB superiores para o uso do sistema.
Este espaço de endereço é virtual e não é influenciado pelo tamanho da RAM. O gerenciador de memória da CPU e do SO mapeia partes da RAM no espaço de endereço virtual, conforme necessário. Isso é muito complexo e não será descrito aqui. Esta foi uma decisão de design feita no interesse do desempenho, segurança e confiabilidade.
Cada processo tem seu próprio espaço de endereço privado de 2 GB, mas existe apenas um espaço de endereço do sistema. Os processos são isolados em seu próprio espaço de endereço privado e não podem ver os outros. Há disposição para compartilhar endereços entre dois ou mais processos, quando necessário. O espaço de endereço do sistema está fora dos limites dos processos normais e é acessível apenas aos componentes no nível do kernel, como o próprio SO e os drivers de dispositivo. Se um processo se desgarra, só pode se machucar; outros processos e o SO não são afetados.
Mas por que não dar ao sistema seu próprio espaço de endereço privado, assim como para os processos? Isso permitiria que o espaço de endereço completo de 4 GB estivesse disponível para o sistema e para cada processo. Isso poderia ter sido feito - mas houve um problema.
Suponha que isso foi feito. O processo em execução teria acesso total ao seu próprio código e dados e tudo pareceria bem. Mas e se esse processo fizer uma chamada de sistema operacional que requeira acesso ao espaço de endereço do sistema, como para uma operação de E / S? Ou o que acontece se houver uma interrupção que precisa ser tratada pelo kernel?
Apenas o espaço de endereço do processo em execução pode ser visto pela CPU. O que fazer? A solução é fazer um comutador de contexto que exiba o espaço de endereço do sistema. O sistema operacional pode fazer isso de forma bastante eficiente, mas leva tempo. Se o espaço de endereço do sistema precisava ser acessado com freqüência, a sobrecarga das chaves de contexto se tornaria excessiva e o desempenho sofreria.
Tinha que haver uma maneira melhor.
A solução adotada era dividir o espaço total de endereços de 4 GB em duas partes de 2 GB cada. Espaço de endereço do processo nos 2 GB mais baixos e o sistema no superior. Isso permite que o espaço de endereço do sistema esteja sempre no escopo e acessível sempre que necessário sem uma alternância de contexto. Como acontece com frequência, as decisões de design são tomadas por razões práticas.
2 GB pode parecer muito pequeno e restritivo agora, mas foi enorme quando o NT foi lançado em 1993. E não se esqueça que cada processo tem seus próprios 2 GB para si.