A função de mapeamento irá informar o local exato que um dado da memória principal ocupará na memória cache. Entretanto, é necessário saber algumas coisas.
O que é necessário saber ?
- Qual é a capacidade total da memória cache ?
- Quantos bytes cabem em cada linha de cache ? Isso é, qual o tamanho por bloco ?
- Quantas linhas tem nessa memória cache ?
- Qual é o tipo de barramento utilizado ?
- Qual é o tipo de mapeamento utilizado ?
Com essas informações, é necessário saber exatamente onde um certo dado está na cache. Lembra da estrutura da cache ?
Estrutura da Cache de Acordo com o Tipo de Mapeamento:
- Mapeamento Direto:
- Endereço da Memória Principal:
- Tag
- Endereço da Linha
- Endereço da Palavra
- Endereço da Memória Cache
- Tag
- Dados
- Mapeamento Associativo
- Endereço da Memória Principal
- Tag
- Palavra
- Endereço da Memória Cache
- Tag
- Dados
- Mapeamento em Conjunto
- Endereço da Memória Principal
- Tag
- Conjunto
- Palavra
- Endereço da Memória Cache
- Tag
- Dados
Analisaremos agora o Mapeamento Direto:
Fonte: http://docplayer.com.br/docs-images/24/2523101/images/31-0.png
Mapeamento Direto:
- Mapeia cada bloco da memória princial a apenas uma linha de cache possível.
- Utilizando os dados acima para entender os itens abaixo
As informações abaixo foram retiradas do livro: Arquitetura e Organização de Computadores - William Stallings, páginas: 100 e 101.
- Descrição dos itens:
i = j módulo m (é o mesmo que o resto da divisão -> j % m), onde
i = número da linha da cache
j = número do bloco da memória principal
m = número de linhas da cache
- Dados da Memória Principal:
- W: É a palavra ou o byte a ser mapeado -> São os bits menos significativos (mais a direita)
- R: É o Endereço do bloco
- S: Especificam um dos 2S blocos da Memória Principal
- Dados da Memória Cache:
- TAG: Utiliza os S bits da Memória principal -> S-R (parte mais significativa (mais a esquerda))
- Campo de Linha de R bits
- M: Identifica uma das M=2R linhas da cache
- Resumindo:
- Tamanho do Endereço = ( S + W ) bits
- Número de unidade endereçáveis = 2( S + W ) palavras ou bytes
- Tamanho do Bloco = Tamanho da Linha = 2W palavras ou bytes
- Número de Blocos na Memória Principal = (2( S + W ) ) / 2W = 2S
- Número de Linhas na Cache = (M=2R)
- Tamanho da Cache = 2( R + W ) palavras ou bytes
- Tamanho da Tag = ( S - R ) bits
- De acordo com o Exemplo 4.2 apresentado abaixo retirado do livro Stallings - Pág 100:
- A cache pode manter 64 KBytes
- Os dados são transferidos entre a memória principal e a memória cache em blocos de 4 bytes cada
- Isso significa que cada linha de cache terá 4 bytes
- A cache é organizada como 16 K = 16*1024 = 16384 = 2¹⁴ linhas de 4 bytes cada
- 16384 bytes é a mesmo que 2¹⁴ que representa o número de linhas de cache
- E cada uma dessas linhas suporta até 4 bytes
- A memória principal consistem em 16 MBytes, com cada byte endereçável diretamente por um endereço de 24 bits (2²⁴ = 16M = 16*1024 = 16384K = 16384*1024 = 16777216 bytes). Assim, para fins de mapeamento, podemos considerar que a memória principal consiste em 4M blocos de 4 bytes cada.
Diga qual é o:
- Tamanho do Endereço
- Número de unidade endereçáveis
- Tamanho do Bloco
- Número de Blocos na Memória Principal
- Número de Linhas na Cache
- Tamanho da Cache
- Tamanho da Tag
Fonte: http://image.slidesharecdn.com/04cachememory-090507024629-phpapp01/95/04-cache-memory-30-728.jpg?cb=1241664432
Explicação sobre Mapeamento direto semelhante ao apresentado no livro do Stallings >> Mapeamento de Memória Cache - Matheus Lima
Obs.: Para uma leitura completa e análise dos outros dois tipos de mapeamentos, recomendo a leitura das páginas 100 até a 109 do Stallings, 8 ed.
Próximo Tópico: Algoritmos de Substituição