Pergunta

Considere um sistema de memória virtual com um endereço de byte virtual de 38 bits, páginas de 1KB e 512 MB de memória física. Qual é o tamanho total da tabela de páginas para cada processo nesta máquina, assumindo que as bits válidas, de proteção, suja e uso levam um total de 4 bits e que todas as páginas virtuais estejam em uso? (Suponha que os endereços de disco não sejam armazenados na tabela de páginas.)

Foi útil?

Solução

Bem, se a pergunta é simplesmente "Qual é o tamanho da tabela de páginas?" Independentemente de se encaixará na memória física, a resposta pode ser calculada assim:

Primeira memória física. Existem 512k páginas de memória física (512m / 1k). Isso requer 19 bits para representar cada página. Adicione isso aos 4 bits de informações contábeis e você obterá 23 bits.

Agora memória virtual. Com um espaço de endereço de 38 bits e um tamanho de página de 10 bits (1k), você precisa de 228 entradas na sua tabela de páginas.

Portanto 228 As entradas da mesa da página a 23 bits são 6.174.015.488 bits ou 736m.

Esse é o tamanho máximo necessário para um subsistema de VM de nível único para cada processo.

Agora, obviamente, isso não vai funcionar se você tiver apenas 512m de RAM física para ter algumas opções.

  1. Você pode reduzir o número de páginas físicas. Por exemplo, permita que apenas metade da memória esteja sujeita a paginação, mantendo a outra metade residente o tempo todo. Isso economizará um pouco por entrada, não o suficiente para fazer a diferença.

  2. Aumente o tamanho da página, se possível. Uma página de 1k em um espaço de endereço de 38 bits é o motivo das tabelas de página muito grossas. Por exemplo, acho que o '386, com seu espaço de endereço de 32 bits, usa páginas de 4K. Isso resultaria em um milhão de entradas na tabela de páginas, muito menos do que os 260 milhões necessários aqui.

  3. Vá multi-nível. Um pouco mais avançado, mas basicamente significa que as mesas de página estão sujeitas a paginação. Você precisa manter o primeiro nível de tabelas de página residentes na memória física, mas o segundo nível pode entrar e sair conforme necessário. Isso reduzirá bastante os requisitos físicos, mas ao custo da velocidade, pois dois níveis de falhas de página podem ocorrer para obter uma página de processo real (uma para as tabelas secundárias de paginação e depois uma para a página de processo).


Vamos olhar um pouco mais perto na opção 3.

Se permitirmos 32m para a tabela de paginação primária e fornecermos a cada entrada 4 bytes (32 bits: apenas 23 são necessários, mas podemos controlar a eficiência aqui), isso permitirá 8.388.608 páginas para a tabela de páginas secundárias.

Como cada uma dessas páginas secundárias da tabela de páginas tem 1 mil de comprimento (permitindo armazenar 256 entradas da tabela de páginas secundárias em 4 bytes cada), podemos abordar um total de 2.147.483.648 páginas virtuais.

Isso permitiria 8.192 processos totalmente carregados (ou seja, usando todo o seu espaço de endereço de 28 bits) para executar lado a lado, supondo que você tenha um pedaço justo de espaço em disco para armazenar as páginas não residentes.

Agora, obviamente, a tabela de paginação primária (e o subsistema da VM, e provavelmente um pedaço justo do restante do sistema operacional) deve permanecer residente o tempo todo. Você não pode pagar uma das páginas primárias, pois você pode precisar dessa página para trazê-la de volta :-)

Mas esse é um custo residente de apenas 32m dos 512m para a tabela de paginação primária, muito melhor que o (no mínimo, para um processo totalmente carregado) de 736m.

Outras dicas

Tamanho da tabela de páginas = NO TOTAL NO DA PÁGINA TABELA Entradas*Tamanho da entrada da tabela de páginas

Etapa 1: Encontrando o número de entradas na tabela de páginas:

no of page table entries=virtual address space/page size

=2^38/2^10=2^28

Portanto, existem 2^28 entradas na tabela de páginas

Etapa2: nenhum dos quadros na memória física:

no of frames in the physical memory=(512*1024*1024)/(1*1024)=524288=2^19

Então nós precisamos 19 bits e adicional 4 bits Para bits válidos, de proteção, suja e uso totalmente 23 bits = 2,875 bytes

size of the page table=(2^28)*2.875=771751936B=736MB

Páginas de 1kb = 2^10, 512MB = 2^29 => deslocamento = 29 - 10 = 19 bits.

O virtual inclui duas partes: quadro da página + deslocamento => quadro da página + bit sujo = 38 - 19 = 29 bits. 29 bits inclui 4 bits sujos (acima) => 25 bits para o quadro de página real, cada quadro de página tem 10 bits.

Então, tamanho da tabela da página: 2^25 * 10 = 320m.

Espero que isso seja correto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top