Você está na página 1de 33

Memria cache

CPU

Cache Transferncia de blocos

Memria Principal

Transferncia de palavras

Tpica organizao de um cache

Nmero da linha 0 1 2 3 C-1 16K-1

CACHE rtulo bloco de k palavras

endereo MEMRIA na palavra memria 0 bloco 1 2 de 3 4 k palavras 4 5 6


n 24 2 1 1 2

Exemplo: cache com capacidade de 64 Kbytes blocos de 4 bytes memria principal com 16 Mbytes palavra de 8 bits

k=4 n= 24 C = 64K/4 =16K

Incio Recebimento de endereo da CPU NO acessa a memria principal e localiza o bloco que contm a palavra

a palavra est no cache?


SIM busca a palavra e envia para a CPU

entrega a palavra para a CPU e copia o bloco no cache

Fim

Mapeamento direto
nmero da linha no cache = nmero do bloco % nmero de linhas do cache

Nmero da linha i

endereo MEMRIA na palavra rtulo bloco de 4 palavras(K) memria j 0 P1 - P2 - P3 - P4 0 P1 1 1 P2 0 2 2 P3 3 3 P4 4 5 16.383 1 6 7 Exemplo: 8 9 cache com 14 capacidade de 64 kbytes 2 i blocos 2 = j % 10 de 4 bytes 11 memria principal com 16 Mbytes 12 14 14 14 0 0 2 1 palavra = 1 % 2% = 16384 % de 8 bits 2 13 CACHE 16.777.215

4.194.303

i 0 1
. . . 0

endereo da primeira endereo posio do bloco em HEX


0 4 000000 000004

16383

16383

65532

00FFFC

i 0 1
. . .

j
16384 16385

endereo da primeira endereo posio do bloco em HEX


65536 65540 010000 010004

16383

32767

131068

01FFFC

i 0 1
. . .

j
32768 32769

endereo da primeira endereo posio do bloco em HEX


131072 131076 020000 020004

16383

49151

196604

02FFFC

i 0 1
. . .

j
4177920 4177921

endereo da primeira endereo posio do bloco em HEX


16711680 16711684 FF0000 FF0004

16383

4194303

1677212

FFFFFC

i 0 1
. . .

j
4177920 16384 0 32768 4177921 16385 1 32769

endereo da primeira endereo posio do bloco em HEX


16711680 65536 0 131072 16711684 65540 4 131076 FF 00 01 02 0000 FF 00 01 02 0004 0004

16383

4194303 16383 32767 49151

1677212 131068 65532 196604

FF FFFC 00 01 FFFC 02FFFC

usado como identificador (tag)

Exemplo do mapeamento direto 1: (apresentao) cache com capacidade de 64 Kbytes blocos de 4 bytes memria principal com 16 Mbytes palavra de 8 bits MAPEAMENTO DIRETO palavra do endereo com 24 bits

224 16 M
14 28 22 4 256 16 K

8 bits para identificar bloco(tag)

14 bits para identificar a linha

2 bits para identificar a palavra

2 bits para K = 4 palavras Por linha de cache

Exemplo do mapeamento direto 1: (apresentao/Continuao) cache com capacidade de 64 Kbytes blocos de 4 bytes memria principal com 16 Mbytes palavra de 8 bits 8 bits para 14 bits para 2 bits para identificar identificar a identificar bloco(tag) linha a palavra Porque: Organizao da cache = Mem.Cache / Palavra Organizao da cache = 64 * 1024 / 4 = 16384 = 16KBytes Linha = Mem.Cache / PalavrasPorLinhas / BytePalavra Linha = 65536 / 4 / 1 = 16384 Log2 (16384) = 14 ou 214 = 16384 Tag = Tam. End. Mem. Ram (Log2 (Linha) + ID. Palavra) Tag= 24 (14 + 2) = 8

Exemplo do mapeamento direto 2: (apresentao)

Identificador de quadro ou linha

Exemplo do mapeamento direto 2: (apresentao)

Com endereo acima temos o quadro/linha que 11001(2) = 25(10) ou seja devemos parar na linha/quadro 25. Com o valor de Tag do endereo verificamos na tabela do cache. Se igual o cache tem os o bloco, se no devemos atualiza-lo. Com o valor de palavra que no caso 1000(2) = 8(10) devemos pegar a oitava palavra dentro da linha de cache.

Exemplo do mapeamento direto 3: (Real na memria) 16(16) o tag 339C(16) o nmero da linha esse divido por K(numero de palavras por linha) que neste caso 4 portanto o nmero na linha no cache 0CE7(16)

Neste caso o cache tem no total 40 bits por linha de dados

Anlise do mapeamento direto

Fcil de implementar em hardware. Problema: acesso a duas palavras em blocos diferentes que ocupam a mesma linha no cache

Mapeamento associativo
Permite a colocao de um bloco em qualquer linha. O endereo deve ser analisado como sendo um rtulo (tag) e um campo para identificar uma palavra. Para identificar se um bloco est no cache, deve-se examinar todas as linhas do cache.

Exemplo associativo 1: (Apresentao) cache com capacidade de 64 Kbytes blocos de 4 bytes memria principal com 16 Mbytes palavra de 8 bits MAPEAMENTO ASSOCIATIVO palavra do endereo com 24 bits

224 16 M
Problema: complexidade na implementao No harware

8 bits para 14 bits para 22 bits para identificar identificar identificar ao linha o bloco bloco e alinha

2 bits para identificar a palavra

Exemplo associativo 1: (Apresentao/Continuao) cache com capacidade de 64 Kbytes blocos de 4 bytes 224 16 M memria principal com 16 Mbytes palavra de 8 bits

22 bits para identificar o bloco e a linha

2 bits para identificar a palavra

Porque: Linha = Mem.Cache / PalavrasPorLinhas / BytePalavra Tag(Bloco+linha) = Tam. End. Mem. Ram ID. Palavra Tag= 24 - 2) = 22

Exemplo do mapeamento associativo 2: (Apresentao)

26 bits identificam o bloco e a linha(tag) e os 6 bits restantes identificam a palavra dentro da linha pois 26 = 64, e neste caso so 64 bytes por linha

Exemplo do mapeamento associativo 3: (Real)


Computador de 24 bits Que no mximo pode enderear 224 = 16777216 = 16MBytes Considere o endereo 16339C em binrio : 0001 0110 0011 0011 1001 1100 Para esse computador usaremos: 22 bits para linha+rotulo(tag) e 2 bits para a palavra pois K 4. Ento no cache s sero armazenados 22 de 24 bits. Logo os pois ultimo bits no sero salvos e fica assim: Original: 0001 0110 0011 0011 1001 1100 Eliminando os 2 bits 0001 0110 0011 0011 1001 11 Ajustando a direita: 0000 0101 1000 1100 1110 0111 Ficando com o valor em Hexadecimal de: 58CE7 A operao acima chamada de shift(deslocar) direita de dois bits

Mapeamento associativo por conjunto


Procura usar as vantagens de ambos os mtodos anteriores. O cache dividido em v conjuntos, cada um com k linhas. Nos v conjuntos usas-se o mtodo direto e nas k linhas de um conjunto, o mtodo associativo.

Exemplo mapeamento associativo por conjunto 1: cache com capacidade de 64 Kbytes blocos de 4 bytes memria principal com 16 Mbytes palavra de 8 bits MAPEAMENTO ASSOCIATIVO POR CONJUNTO palavra do endereo com 24 bits

224 16 M

com duas linhas por conjunto

9 bits para 8 identificar o bloco

13 bits para 14 identificar o a conjunto linha

2 bits para identificar a palavra

Exemplo mapeamento associativo por conjunto 1 (continuao): cache com capacidade de 64 Kbytes blocos de 4 bytes memria principal com 16 Mbytes com duas linhas por conjunto palavra de 8 bits

9 bits para 8 identificar o bloco

14 13 bits para identificar o a conjunto linha

2 bits para identificar a palavra

Porque: Conj. = Mem.Cache / PalavrasPorLinhas / Linhasporconj. /BytePalavra Conj. = 65536 / 4 / 2 / 1 = 8192 Log2 (8192) = 13 ou 213 = 8192 Tag = Tam. End. Mem. Ram (Log2 (Conj.) + ID. Palavra) Tag= 24 (13 + 2) = 9

Exemplo mapeamento associativo por conjunto 2:

Mapeamento Direto

. . .

. . . x

comparao

hit no cache

. . .

. . .

no disponvel no cache

Mapeamento Associativo

. . .

. . . x

comparao

hit no cache

. . .

. . .

no disponvel no cache

Mapeamento Associativo por Conjunto

. . .

. . . x

comparao

hit no cache

. . .

. . .

no disponvel no cache

Algoritmos de troca de contedo


LRU (least recently used): troca o bloco que est no cache a mais tempo sem referncia. FIFO (first-in-first-out): troca o bloco que est a mais tempo no cache. LFU (least frequently used): troca o bloco com menor nmero de referncias. Aleatrio: troca qualquer bloco ao acaso.

Poltica de atualizao
Write Through: todas as operaes de escrita levam a atualizao no cache e na memria principal.
Gera muito trfego

Write Back: as atualizaes so feitas no cache. Quando um bloco for atualizado, feita uma verificao para se avaliar se a memria precisa ser atualizada.
Acessos por I/O devem ser feito via cache

Exerccios 1) Dado um sistema hipottico com 64MB de memria principal, expansvel a at 512MB, barramento de dados com 32 bits (cada endereo acessa 1 palavra de 32 bits), contando com cache de 512KB, 4 palavras por linha, especifique, espeficique um sistema de cache para os casos abaixo:

a) Cache com mapeamento direto (direct mapped cache) b) Cache com mapeamento associativo (associative cache) c) Cache com mapeamento associativo por conjunto, 4 linhas por conjunto (four-way set associative cache)
2) Uma varivel de memria de um certo programa est no endereo FF1255(16) com dado 10 (16). Como ficaria o endereo dentro da tabela de cache para os trs casos acima?

Você também pode gostar