O motivo da supercomprometimento é evitar a subutilização da RAM física. Há uma diferença entre quanto de memória virtual um processo alocou e quanto dessa memória virtual foi realmente mapeada para quadros de página física. Na verdade, logo após o início de um processo, ele reserva muito pouca memória RAM. Isso ocorre devido à demanda de paginação: o processo tem um layout de memória virtual, mas o mapeamento do endereço de memória virtual para um quadro de página físico não é estabelecido até que a memória seja lida ou gravada.
Normalmente, um programa nunca usa todo o espaço da memória virtual e as áreas de memória tocadas variam durante a execução do programa. Por exemplo, os mapeamentos para quadros de páginas contendo códigos de inicialização que são executados somente no início da execução podem ser descartados e os quadros de páginas podem ser usados para outros mapeamentos.
O mesmo se aplica aos dados: quando um programa chama malloc
, ele reserva um espaço de endereço virtual contíguo suficientemente grande para armazenar dados. No entanto, os mapeamentos para quadros de páginas físicas não são estabelecidos até que as páginas sejam realmente usadas, se alguma vez . Ou considere a pilha do programa: cada processo obtém uma área de memória virtual contígua razoavelmente grande reservada para a pilha (normalmente 8 MB). Um processo geralmente usa apenas uma fração desse espaço de pilha; programas pequenos e bem comportados usam ainda menos.
Um computador Linux normalmente possui muitos processos heterogêneos em execução em diferentes estágios de suas vidas úteis. Estatisticamente, em qualquer momento, eles não precisam coletivamente de um mapeamento para cada página virtual que foram atribuídos (ou serão atribuídos posteriormente na execução do programa).
Um esquema estritamente não excessivo criaria um mapeamento estático de páginas de endereço virtuais para quadros de página de RAM física no momento em que as páginas virtuais são alocadas. Isso resultaria em um sistema que pode executar muito menos programas simultaneamente, porque muitos quadros de página RAM seriam reservados para nada.
Não nego que a supercomprometimento de memória tenha seus perigos e possa levar a situações de falta de memória que são complicadas de se lidar. É tudo sobre encontrar o compromisso certo.