Embora partições variáveis seja um mecanismo mais flexível, o desperdício de memória em função da fragmentação externa é um grande problema. Sempre cada programa necessitou para sua execução de uma área contínua de memória. Para que outras técnicas pudessem ser aplicadas, esta regra precisava ser quebrada. A técnica de paginação possibilita exatamente isso.
O espaço de endereçamento lógico de um processo é dividido em páginas lógicas de tamanho fixo. A memória física é dividida em páginas com tamanho fixo, com tamanho igual ao da página lógica.
Um programa é carregado página por página, a página lógica do processo ocupa uma página física da memória física, área ocupada não precisa ser contigua, pois a ordem que as paginas lógicas está na memória física não precisa ser a mesma da memória lógica.
Tabela de páginas é montada durante o processo, sua função é informar para cada pagina lógica sua pagina física correspondente. A tabela transforma o endereço lógico de cada instrução em endereço físico que corresponde.
Na figura acima mostra o endereço de Y2 na memória lógica que ao passar pela tabela de páginas é transformado no endereço físico correspondente. Para se transformar o endereço lógico em físico acontece o seguinte processo: no exemplo o byte Y2 seu endereço lógico é 001 01, sua página lógica é designada por 001 e eu deslocamento é 01, na tabela de paginas é carregado seu endereço físico que é a pagina 101, com a união se forma o endereço físico final que é 101 01.
Não existe fragmentação externa, pois cada pagina lógica pode ser carregada em qualquer página física livre. A unidade de alocação é a página , e o tamanho de um processo raramente é igual a um múltiplo do tamanho de página , isso introduz uma fragmentação interna.
Quando usamos páginas grandes significa que o processo terá menos páginas, tabela de páginas será menor, a leitura de disco será mais eficiente. A utilização de páginas maiores resulta em uma fragmentação maior. O tamanho das páginas é fixado pelo hardware que suporta a gerencia de memória, ou seja, a MMU.
A gerência de memória deve controlar as áreas livres da memória, ou seja, manter uma lista de páginas físicas livres, uma forma de representar é através de um mapa de bits, onde 0 representa uma página livre e 1 página ocupada.
O maior problema do gerenciamento de memória não é decidir que página carregar, mas sim, qual página deve ser removida da memória.
Antes de remover uma página o sistema verifica se a mesma foi alterada (bit de modificação), a página é removida e salva na memória secundária. Quando ela for referenciada novamente o sistema a carrega de volta.
Estratégias para realocação de páginas
1 – ALEATÓRIA: não utiliza nenhum critério de seleção, todas as páginas possuem a mesma chance;
2 – FIFO: a página que entrar primeiro vai ser a primeira a sair;
3 – LRU: seleciona a página que está a mais tempo sem ser referenciada;
4 – LFU: seleciona a página menos freqüentemente usada.
Tamanho da página
O problema da fragmentação também é encontrado na paginação, mas ocorre apenas na ultima página usada pelo programa. A fragmentação é conseqüência do tamanho da página, páginas pequenas diminuem a fragmentação, mas aumenta o acesso a memória secundária.