Memória cache (cont.) Sistemas de Computação
Memórias cache CPU procura por dados em L, depois em L2 e finalmente na memória principal CPU registradores barramento de cache L cache ALU barramento de sistema barramento de memória L2 cache interface de barramento ponte E/S memória principal
Organização geral da memória cache bit válido t bits para por linha por linha B = 2 b bytes por bloco de cache conj. : B B E linhas por conjunto S = 2 s sets conj. : B B conj. S-: B B Tamanho da cache: C = B x E x S bytes
Endereçamento de cache Endereço A: t bits s bits b bits conj.: v v B B m- <> <índ. conj.> <offset> conj : conj. S-: v v v v B B B B A palavra no endereço A está na cache se os bits de em uma das linhas válidas no conjunto <ind. conj.> são idênticos aos bits do campo <>. O conteúdo da palavra começa no deslocamento de <offset> bytes a partir do início do bloco
Cache mapeada diretamente Forma mais simples Caracterizada por ter uma linha por conjunto conj. : bloco da cache E= linha por conjunto conj. : bloco da cache conj. S-: bloco da cache
Acesso a caches mapeadas diretamente Seleção do conjunto feita pelos bits de índice de conjunto conj. selecionado conj. : bloco da cache conj. : bloco da cache m- t bits s bits b bits ind. conj offset conj. S-: bloco da cache
Acesso a caches mapeadas diretamente Encontre uma linha válida no conjunto selecionado com campo idêntico a bits de e extrai a palavra desejada conj. (i) selecionado: (2) Os bits de s na linha da cache tem que casar com os bits de do endereço =? () O bit válido tem que ser m- =? t bits 2 3 4 5 6 7 w w w 2 w 3 s bits b bits i ind. conj. offset (3) Se () e (2), então acerto, e offset seleciona o byte inicial.
Exemplo de cache mapeada diretamente t= s=2 b= x xx x M=endereço para 6 células, B=2 bytes/bloco, S=4 conj., E= linha/conj. Acessos a endereços (leituras): [ 2 ], [ 2 ], 3 [ 2 ], 8 [ 2 ], [ 2 ] [ 2 ] (miss) v data m[] M[-] m[] 3 [ 2 ] (miss) v data m[] M[-] m[] () (3) M[2-3] m[3] m[2] (4) 8 [ 2 ] (miss) v data M[8-9] m[9] m[8] M[2-3] (5) [ 2 ] (miss) v data m[] M[-] m[] M[2-3] m[3] m[2]
Caches associativas por conjunto Caracterizadas por mais de uma linha no conjunto conj. : bloco de cache bloco de cache E=2 linhas por conj. conj. : conj. S-: bloco de cache bloco de cache bloco de cache bloco de cache
Acesso a caches associativas por conjuntos Seleção do conjunto é igual à memória mapeada diretamente conj. : bloco de cache bloco de cache Conj. selecionado conj. : bloco de cache bloco de cache m- t bits s bits b bits ìnd. conj. offset conj. S-: bloco de cache bloco de cache
Acesso a caches associativas por conjunto Compara o de cada linha válida do conjunto selecionado =? () Bit válido deve ser. 2 3 4 5 6 7 conj.(i) selecionado): w w w 2 w 3 (2) Os bits de em uma das linhas de cache tem que casar com bits de do endereço m- =? t bits s bits b bits i ind. conj. offset (3) Se () e (2), então acerto, e offset seleciona byte inicial.
Caches totalmente associativas Caracterizadas por um único conjunto conter todas as linhas bloco de cache bloco de cache conj. : bloco de cache bloco de cache bloco de cache bloco de cache E=C/B linhas em um único conjunto
Acesso a caches totalmente associativas Conjunto é sempre selecionado bloco de cache bloco de cache t bits b bits conj. : bloco de cache bloco de cache bloco de cache m- offset bloco de cache
Acesso a caches totalmente associativas Compara do endereço com campo da cache =? () Bit válido deve ser. 2 3 4 5 6 7 cache inteira: w w w 2 w 3 =? (2) Os bits de em uma das linhas de cache tem que casar com bits de do endereço =? t bits b bits m- offset (3) Se () e (2), então acerto, e offset seleciona byte inicial.
Algoritmo de substituição de dados Consiste em determinar qual o bloco da memória cache deve ser retirado para ceder lugar a outro por ocasião de uma falta No mapeamento direto não há opção! Nos demais mapeamentos LRU - Least Recently Used FIFO - First In First Out LFU - Least Frequently Used Escolha aleatória (*)
Política de escrita I A escrita é sempre realizada na cache pela CPU. Quando deve ser realizada na memória principal? Problema: vários processos em várias CPU ou dispositivos de E/S podem acessar um mesmo bloco na MP valores diferentes para um mesmo dado! Políticas de escrita... write through write back write once
Política de escrita II Escrita em ambas (write through) Sempre que se escreve na cache, escreve-se na memória principal Pode haver queda no desempenho Escrita somente no retorno (write back) Escreve apenas quando o bloco é substituído: há bit de alteração A memória principal pode ficar desatualizada (ex: E/S via DMA)