Buscar

Mapeamento da Memória Cache em Arquitetura de Computadores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Arquitetura de Computadores
Aula Pra´tica
Prof. Pedro Carlos da Silva Lara
Centro Federal de Educac¸a˜o Tecnolo´gica Celso Suckow da Fonseca
Mapeamento da Memo´ria Cache
1 Mapeamento Direto
Esta pra´tica tem o objetivo de simular o mapeamento entre a memo´ria principal e a memo´ria cache. Cada bloco da
memo´ria principal e´ mapeado em uma linha da cache seguindo a seguinte equac¸a˜o:
i = j mod m,
onde,
• i e´ a i-e´sima linha de cache
• j e´ j-e´simo bloco da memo´ria principal
• m e´ o nu´mero de blocos da cache.
Seja s tal que a memo´ria principal possua 2s blocos de 2w bytes. Enta˜o o mapeamento e´ feito usando a seguinte
lo´gica
Linha da Cache Poss´ıveis Blocos da Mem. Principal
0 0, 2m, 3m, . . . , 2s −m
1 1, 2m+ 1, 3m+ 1, . . . , 2s −m+ 1
2 2, 2m+ 2, 3m+ 2, . . . , 2s −m+ 2
...
...
m− 1 2, 2m+m− 1, 3m+m− 1, . . . , 2s − 1
Considerando m = 2r enta˜o temos um valor de s − r bits que identifica unicamente um bloco (entre os poss´ıveis)
alocado na memo´ria cache. Chamaremos de ro´tulo. Assim a cache armazena em cada linha s− r bits para representar
o ro´tulo mais 2w bytes para representar os dados efetivamente. O mapeamento e´ feito usando a seguinte configurac¸a˜o
do enderec¸o.
s− r bits (ro´tulo) r bits (linha da cache) w bits (palavra no bloco)
Exemplo Considere uma memo´ria principal com 16MB (ou seja, 224 bytes) e blocos de 22 bytes. Assim, s = 22 e
w = 2. Considere tambe´m uma memo´ria cache com 214 linhas (assim, r = 14). Desta forma o bloco 0x8FB314 da
memo´ria principal possui as seguintes caracter´ısticas:
Formato Ro´tulo Linha de Cache Palavra no bloco
Bina´rio 1000 1111 1011 0011 0001 10 00
Hexadecimal 8F 2CC6 0
Vamos supor que este bloco tenha os seguites 4 bytes armazenados 0xF134CC1A enta˜o a cache ficaria
Enderec¸o da Cache (linha) Ro´tulo Bloco
0x2CC6 0x8F 0xF134CC1A
14 bits 1 byte 4 bytes
Exerc´ıcio Considerando este exemplo crie um programa para simular o comportamento de uma cache com mape-
amento direto. O programa deve ser escrito em linguagem C e deve possuir as seguintes funcionalidades:
• Um vetor de 224 bytes para representar a memo´ria principal.
• Um vetor de 214 · 5 bytes para representar a memo´ria cache.
• Uma func¸a˜o que verifica se um dado esta´ na cache com a seguinte assinatura
int acessaCache( byte * cache, int endereco );
Retorna o byte requerido caso ele esteja na cache (cache hit) ou -1 se na˜o esta´ (cache miss). Este enderec¸o possui
24 bits.
• Uma func¸a˜o para copiar um bloco da memo´ria principal para a cache.
int copiarParaCache( byte * cache, byte * RAM, int endereco );
Neste caso os u´ltimos 2 bits do enderec¸o sera˜o desprezados. O acesso completo a memo´ria devera´ ser implementado
da seguinte forma:
int valor = acessaCache(cache, endereco);
if( valor == -1 ) {
cacheMiss++;
copiarParaCache(cache, RAM, endereco);
} else
cacheHit++;
• Com estas func¸o˜es implementadas fazer um procedimento para contar a proporc¸a˜o de cache miss quando:
– o acesso e´ completamente aleato´rio.
– o acesso e´ em apenas um array de 1024 bytes alocado na posic¸a˜o 0x0F12B8.
– o acesso e´ em feito em dois arrays com 128 bytes. O primeiro esta´ alocado na posic¸a˜o 0x310018 e o segundo
esta´ na posic¸a˜o 0x4312BC.
– o acesso e´ em feito em dois arrays com 128 bytes. O primeiro esta´ alocado na posic¸a˜o 0x4A0004 e o segundo
esta´ na posic¸a˜o 0xFF0004.
• Torne o programa geral. Ou seja, crie as memo´rias principal e cache usando paraˆmetros s, r e w. Qual seria um
tamanho adequado para uma cache quando a memo´ria principal possui 4MB?
2

Outros materiais