Considere um computador com as seguintes características: memória principal de 1MByte, tamanho de palavra de 1 byte, tamanho de bloco de 16 bytes e cache de 64 KBytes.
a) Para o endereço de memória F 001016, mostre quais são os valores dos campos tag, linha e palavra, considerando uma cache de mapeamento direto.

Passo 1

Beleza, vamos entender o que a questão está pedindo. Temos um computador com memória principal de 1 MByte, palavra de 1 byte, bloco de 16 bytes e cache de 64 KBytes. A pergunta é: para o endereço de memória F001016, quais são os valores dos campos tag, linha e palavra na cache de mapeamento direto.
Para resolver isso, vamos precisar entender como funciona o mapeamento direto na memória cache e como decompor um endereço de memória nesses três campos.

Passo 2

Primeiro, vamos converter as unidades para potências de 2, porque isso facilita os cálculos em sistemas digitais.
  • Memória principal: 1 MByte = 2^20 bytes
  • Tamanho de palavra: 1 byte = 2^0 bytes
  • Tamanho de bloco: 16 bytes = 2^4 bytes
  • Cache: 64 KBytes = 2^16 bytes

Passo 3

No mapeamento direto, cada bloco da memória principal pode ser mapeado para exatamente um bloco na cache. Para isso, precisamos determinar quantos blocos existem na cache.
Número de blocos na cache = Tamanho da cache / Tamanho do bloco = 2^16 / 2^4 = 2^12 blocos.
Isso significa que nosso campo linha precisará de 12 bits para identificar cada um desses blocos.

Passo 4

Agora, vamos decompor o endereço de memória em três partes: tag, linha e palavra.
O endereço total tem 20 bits (pois 2^20 bytes na memória principal).
  • Palavra (offset): determina a posição dentro do bloco. Como o bloco tem 16 bytes, precisamos de 4 bits ( 2^4 = 16) para isso.
  • Linha (index): identifica qual bloco na cache está sendo usado. Como temos 2^12 blocos na cache, precisamos de 12 bits.
  • Tag: os bits restantes servem para identificar se o bloco na cache corresponde ao bloco da memória principal.
Então, a divisão fica:
  • Tag: 20 - 12 - 4 = 4 bits
  • Linha: 12 bits
  • Palavra: 4 bits

Passo 5

Vamos agora converter o endereço F001016 para binário para facilitar a divisão.
F001016 em binário é:
F = 1111
0 = 0000
0 = 0000
1 = 0001
0 = 0000
Então, F001016 = 1111 0000 0000 0001 00002

Passo 6

Agora, vamos separar os bits de acordo com a divisão que fizemos:
  • Tag: primeiros 4 bits → 1111
  • Linha: próximos 12 bits → 0000 0000 0001
  • Palavra: últimos 4 bits → 0000

Passo 7

Convertendo esses campos de binário para hexadecimal para facilitar a compreensão:
  • Tag: 1111 em binário é F16
  • Linha: 0000 0000 0001 em binário é 00116
  • Palavra: 0000 em binário é 016

Resposta

Para o endereço de memória F001016 na cache de mapeamento direto:
  • Tag: F
  • Linha: 1
  • Palavra: 0

Exercícios relacionados