Considere uma máquina com uma memória principal endereçável por byte (ou seja, 1 célula =1 palavra=1 byte) com 2^16 bytes e um tamanho de bloco de 8 bytes. Suponha que essa máquina utilize uma cache de 32 linhas mapeadas diretamente. Responda as questões abaixo.
b) Em que linha da cache seria armazenado o byte com o seguinte endereço de memória: 000100010001 10102 ?

Passo 1

Primeiro, vamos resumir o enunciado do exercício. Temos uma máquina com memória principal endereçável por byte, totalizando 2^16 bytes. O tamanho de cada bloco é de 8 bytes, e a máquina utiliza uma cache com 32 linhas mapeadas diretamente. Precisamos determinar em qual linha da cache seria armazenado o byte com o endereço de memória 000100010001 10102.
Para resolver isso, vamos precisar entender como a memória é mapeada para a cache em um sistema de mapeamento direto. Vamos usar conceitos como divisão do endereço em parte para o índice da cache, para o deslocamento dentro do bloco e para a tag.

Passo 2

Entendendo a estrutura do endereço de memória:
A memória tem 2^16 bytes, o que significa que os endereços de memória têm 16 bits. Vamos dividir esses 16 bits em três partes:
  1. Tag: Identifica qual bloco está armazenado na linha da cache.
  2. Índice (Index): Identifica qual linha da cache a memória vai mapear.
  3. Deslocamento (Offset): Identifica a posição específica dentro de um bloco de 8 bytes.
Dado que o tamanho do bloco é 8 bytes, precisamos de log2(8) = 3 bits para o deslocamento. A cache tem 32 linhas, então precisamos de log2(32) = 5 bits para o índice. O restante dos bits será usado para a tag.
Então, a divisão fica assim:
  • Tag: 16 - 5 - 3 = 8 bits
  • Índice: 5 bits
  • Deslocamento: 3 bits

Passo 3

Separando o endereço de memória:
Vamos separar o endereço 000100010001 10102 em suas partes componentes.
Primeiro, combinamos todos os bits: 00010001000110102
Agora, dividimos conforme a estrutura definida:
  • Tag (8 bits): Os primeiros 8 bits: 00010001
  • Índice (5 bits): Os próximos 5 bits: 00011
  • Deslocamento (3 bits): Os últimos 3 bits: 010

Passo 4

Convertendo o índice para decimal:
O índice em binário é 00011. Para descobrir a linha da cache, precisamos converter isso para decimal.
000112 = 0 times 2^4 + 0 times 2^3 + 0 times 2^2 + 1 times 2^1 + 1 times 2^0 = 0 + 0 + 0 + 2 + 1 = 3

Passo 5

Determinando a linha da cache:
Como a cache tem 32 linhas numeradas de 0 a 31, e o índice convertido é 3, o byte com o endereço 000100010001 10102 será armazenado na linha 3 da cache.

Resposta

O byte com o endereço de memória 000100010001 10102 seria armazenado na linha 3 da cache.

Exercícios relacionados