traduzir o endereço virtual para o endereço físico
a tabela seguinte é para um sistema com endereços virtuais e físicos de 16 bits e com 4.096 páginas de bytes. O bit de referência é definido para 1 quando a página foi referenciada. Periodicamente, um thread elimina todos os valores do bit de referência.Todos os números são fornecidos em casas decimais.
quero converter os seguintes endereços virtuais (em hexadecimal) para os endereços físicos equivalentes. Também eu quero definir o bit de referência para a entrada apropriada no mesa de página.
• 0xE12C
• 0x3A9D
• 0xA9D9
• 0x7001
• 0xACA1
0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
Encontrei e experimentei isto, mas não me ajudou muito.
3 answers
É dado que o endereço virtual tem 16 bits de comprimento.Assim, existem 2^16 endereços no espaço de endereços virtuais.
O tamanho da página é dado para ser 4 KB ( existem 4K (4 * (2 ^ 10) endereços em uma página), de modo que o número de páginas será ( 2^16 ) / ( 2 ^ 12 ) = 2 ^ 4.
para cada página são necessários 4 bits.
Os 4 bits mais significativos no endereço virtual denotarão o número da página a ser referido e os restantes 12 bits serão o deslocamento da página.
Para obter o endereço da moldura na memória principal basta usar os primeiros 4 bits.
Exemplo: considere o endereço virtual 0xACA1
Aqui a in aCA1 denota o número da Página (10 ) e o quadro correspondente no é 5 (0101) daí o endereço físico resultante será → 0x5CA1.
Para traduzir um endereço virtual para um endereço físico, precisamos de saber 3 coisas:
- Tamanho da memória física (por exemplo, não é importante.. olha
[1]
- Tamanho Da Página
- Número de bits para o endereço virtual
Neste exemplo: sistema de 16 bits, 4KB page size and physical memory size is 64KB .
log2(Page-Size)
= log2(4096)
= 12 bits para deslocamento
Dos 16 bits para o endereço virtual, 12 são para compensação, o que significa que cada processo tem 2^4 = 16
páginas virtuais. Cada entrada na tabela de páginas armazena a moldura correspondente acomodando a página. Por exemplo:
Em primeiro lugar, para facilitar o trabalho, vamos converter 0xE12C
para binary
.
0xE12C = (1110 0001 0010 1100) in base 2
1110 = 14 in decimal
Entry 14 in P.T => Page frame 3.
Vamos. concatená-lo aos 12 bits de offset
Answer: (0011 0001 0010 1100) = 0x312C
Outro exemplo: 0x3A9D
0x3A9D = 0011 1010 1001 1101
0011 = 3
PageTable[3] = 10
10 in decimal = 1010 in binary
1010 1010 1001 1101 in binary = 0xAA9D
[1]
Se as entradas da tabela de página contivessem mais informações, teríamos precisado saber o número de bits necessários para referenciar cada quadro. No nosso caso são pedaços. isto é, se a entrada da tabela da página contivesse 6 bits, sabemos que apenas 4
deles são para o número da moldura e o resto são para bandeiras.
Por exemplo:
| page | page frame |
|-------------------|
| 5 | 100101 |
Page 5 is mapped to frame number 1001 = frame number 9.
- 16 bits de espaço de endereços virtuais = 2^16 = 65,536 espaço de endereços
- 16 bits de espaço de endereçamento físico = 2^16 = 65,536 espaço de endereçamento
- 4096 Byte tamanho da Página determina o deslocamento, que é Log(4096) / Log (2) = 12 bits. Isto significa, 2^12 para o tamanho da Página
- de acordo com @Akash Mahapatra, o deslocamento do endereço virtual é mapeado directamente para o endereço físico
Como assim, agora temos:
- 2^16 (16bit) para o endereço virtual-2^12 (12bit) para offset = 4-bit para páginas, ou melhor, o número total de páginas disponíveis. Não vou repetir o cálculo físico, já que são os mesmos números.
- 2^4 (4bit) para páginas = 16, que se correlaciona com o número de entradas do quadro acima!
O endereço de memória 0xE12C na notação hex também é conhecido por ter 16 bits de endereço. (Desde está escrito na pergunta.)
Vamos cortar a morada agora...Primeiro removemos ' 0x ' da informação.
Podemos converter E12C em notação binária como @Tony Tannous, mas vou aplicar um atalho.Eu simplesmente uso uma proporção. Bem, o endereço é anotado em 4 caracteres acima, e desde 16/4 = 4, Eu posso definir a primeira letra como endereço virtual, enquanto os outros 3 são endereço offset.
Com a informação, ' E ' em formato hexadecimal, preciso converter para Decimal = 14. Então eu olho para a sua mesa fornecida, e eu encontrei a moldura de Página '3'. Page frame 3 é anotado em formato decimal, que então precisa ser convertido de volta para o formato Hexadecimal... Duh!... que são três!
Assim, o mapeamento físico do endereço da localização da memória virtual de 0xE12C pode ser encontrado em 0x312C na memória física.
Você irá então voltar para a tabela, e se referir à coluna de bits de referência e colocar um ' 1 ' na linha 14.
Aplicar o mesmo conceito para estes -
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
Se você notar, os últimos 3 dígitos são os mesmos (que determina o deslocamento). E o primeiro dos 4 dígitos é mapeado de acordo com o quadro:
table entry 3 -> page frame 10 -> hex notation A
table entry A (10) -> page frame 5 -> hex notation 5
table entry 7 -> page frame 15 -> hex notation F
table entry A (10) -> page frame 5 -> hex notation 5
Espero que esta explicação te ajude a ti e a outros como eu! :)