O cálculo de um endereço de paginação envolve a tradução de um endereço lógico (o endereço usado pelo programa) em um endereço físico (o endereço na memória principal). Esta tradução é tratada pela Unidade de Gerenciamento de Memória (MMU). O processo depende das especificidades do sistema de paginação, mas as etapas gerais são:
1. Divida o endereço lógico em partes: O endereço lógico é dividido em duas partes:
*
Número da página (PN): Isso indica qual página do espaço de endereço lógico o programa está referenciando. O número de bits usados para o número da página depende do tamanho da página e do tamanho do espaço de endereço lógico.
*
Offset da página (PO): Isso indica o deslocamento na página que está sendo referenciada. O número de bits usados para o deslocamento da página é determinado pelo tamanho da página (por exemplo, um tamanho de página de 4kb usa 12 bits para o deslocamento porque 2
12
=4096).
Exemplo: Digamos que temos um endereço lógico de 32 bits e um tamanho de página de 4KB (2
12
bytes).
*
Offset da página (PO): 12 bits (2
12
=4096 bytes)
*
Número da página (PN): 20 bits (32 - 12 =20 bits)
2. Consulte a tabela de páginas: O número da página (PN) é usado como um índice na tabela de páginas. A tabela de páginas é uma estrutura de dados mantida pelo sistema operacional que mapeia as páginas lógicas para os quadros físicos. Cada entrada na tabela de páginas contém:
*
Número do quadro (fn): O número do quadro físico na memória principal onde reside a página correspondente.
*
bit válido/inválido: Indica se a página está atualmente na memória principal (válida) ou não (inválido - provavelmente no armazenamento secundário). Outras bandeiras também podem estar presentes (por exemplo, bit sujo, bits de proteção).
3. Construa o endereço físico: Se a entrada da tabela da página para o PN especificada for válida, o endereço físico será construído concatenando o número do quadro (FN) e o deslocamento da página (PO).
*
endereço físico =número do quadro (fn) || Offset da página (PO) Exemplo (continuação): Digamos que o endereço lógico seja `0x0000ffff`.
*
po: `0xffff` (12 bits)
*
pn: `0x0000` (20 bits)
O MMU usa PN (`0x0000`) para procurar a entrada correspondente na tabela de páginas. Vamos supor que a entrada da tabela de páginas para PN `0x0000` contém:
*
fn: `0x1000` (este é o número do quadro na memória física)
*
Bit válido: 1 (válido)
Portanto, o endereço físico é:
*
endereço físico =`0x1000ffff` Paging multinível: Em sistemas com grandes espaços de endereço, a paginação de vários níveis é usada. Isso envolve várias tabelas de página (por exemplo, um diretório de página apontando para tabelas de página, que apontam para os quadros físicos). O processo é semelhante, mas requer várias pesquisas de tabela para determinar o número do quadro final.
Segmentação: A segmentação é um esquema de gerenciamento de memória diferente que divide a memória em segmentos de tamanho variável. Pagagem e segmentação também podem ser combinadas. O cálculo do endereço nesses esquemas é mais complexo.
Em resumo, o cálculo do endereço de paginação envolve o uso do endereço lógico para encontrar o endereço físico correspondente através de uma série de pesquisas de tabela. Os detalhes exatos dependem da arquitetura específica e da implementação de gerenciamento de memória do sistema operacional.