Um cache está sendo projetado para um computador com 2^32 bytes de memória. O cache terá 2K slots e usará um bloco de 32 bytes. Calcule, tanto para um cache associativo quanto para um cache com mapeamento direto, quantos bytes o cache precisará ter capacidade de armazenar.

Passo 1

Primeiro, vamos entender o que está sendo pedido. Temos um computador com uma memória principal de 2^32 bytes. Estamos projetando um cache que possui 2K slots, onde cada slot pode armazenar um bloco de 32 bytes. Precisamos calcular quanto espaço, em bytes, esse cache ocupará tanto em um cache associativo quanto em um cache com mapeamento direto.
Para resolver isso, vamos precisar entender dois conceitos principais:
  1. Cache Associativo: Onde um bloco da memória pode ser colocado em qualquer slot do cache.
  2. Cache com Mapeamento Direto: Onde cada bloco da memória é mapeado para exatamente um slot no cache.
Vamos resolver passo a passo para cada tipo de cache.

Passo 2

Calculando para o Cache Associativo
Em um cache associativo, qualquer bloco da memória pode ser armazenado em qualquer slot do cache. Para calcular a capacidade total do cache, precisamos considerar tanto os dados armazenados quanto as informações adicionais necessárias para gerenciar o cache, como as tags.
Primeiro, calculamos o número total de blocos na memória principal:
Número de blocos na memória = Tamanho da memóriaTamanho do bloco = 2^32 bytes32 bytes = 2^27 blocos úóó
Como o cache é associativo, precisamos de uma tag para identificar de qual bloco da memória principal cada bloco no cache pertence. O número de bits da tag é igual ao número de bits necessários para endereçar todos os blocos da memória menos o número de bits usados para o deslocamento dentro do bloco.
Número de bits da tag = log2(2^27) = 27 bits ú
Agora, cada slot do cache precisará armazenar:
  • Dados: 32 bytes
  • Tag: 27 bits (aproximadamente 4 bytes, já que 27 bits ≈ 4 bytes)
Portanto, o tamanho de cada slot é aproximadamente Capacidade total do cache associativo = 2 times 1024 times 36 bytes = 73,728 bytes bytes.
Multiplicando pelo número total de slots (2K, onde K = 1024):

Passo 3

Calculando para o Cache com Mapeamento Direto
No cache com mapeamento direto, cada bloco da memória principal mapeia para exatamente um slot no cache. Isso simplifica a estrutura, pois não precisamos de uma tag completa para cada bloco, apenas de uma parte dela para identificar o bloco específico dentro do conjunto mapeado.
Primeiro, calculamos o número de bits necessários para indexar os slots:
Número de bits do índice = log2(2 times 1024) = log2(2048) = 11 bits úí
A tag neste caso será:
Número de bits da tag = log2(2^32/32) - 11 = 27 - 11 = 16 bits ú
Cada slot do cache precisará armazenar:
  • Dados: 32 bytes
  • Tag: 16 bits (aproximadamente 2 bytes)
Portanto, o tamanho de cada slot é aproximadamente Capacidade total do cache com mapeamento direto = 2 times 1024 times 34 bytes = 69,632 bytes bytes.
Multiplicando pelo número total de slots (2K):

Resposta

O cache precisará ter uma capacidade de 73.728 bytes no modo associativo e 69.632 bytes no modo com mapeamento direto.

Exercícios relacionados