A memória cache é uma memória especial de alta velocidade. É usado para acelerar e sincronizar com CPU de alta velocidade. A memória cache é mais cara do que a memória principal ou a memória do disco, mas econômica do que os registros da CPU. A memória cache é um tipo de memória extremamente rápido que atua como um buffer entre a RAM e a CPU. Ele contém dados e instruções solicitados com frequência para que estejam imediatamente disponíveis para a CPU quando necessário.

A memória cache é usada para reduzir o tempo médio de acesso aos dados da memória principal. O cache é uma memória menor e mais rápida que armazena cópias dos dados de locais da memória principal usados ​​com frequência. Existem vários caches independentes diferentes em uma CPU, que armazenam instruções e dados.

Níveis de memória:

  • Nível 1 ou Registro -
    É um tipo de memória na qual são armazenados e aceitos dados que são armazenados imediatamente na UCP. O registro mais comumente usado é o acumulador, contador de programa, registro de endereço, etc.
  • Nível 2 ou memória Cache -
    É a memória mais rápida que tem tempo de acesso mais rápido, onde os dados são armazenados temporariamente para acesso mais rápido.
  • Nível 3 ou Memória Principal -
    É a memória na qual o computador funciona atualmente. É pequeno em tamanho e, uma vez que a alimentação é desligada, os dados não permanecem mais na memória.
  • Memória de nível 4 ou secundária -
    é a memória externa que não é tão rápida quanto a memória principal, mas os dados permanecem permanentemente nesta memória.

Desempenho do cache:
quando o processador precisa ler ou gravar um local na memória principal, ele primeiro verifica se há uma entrada correspondente no cache.

  • Se o processador descobrir que o local da memória está no cache, ocorreu um acerto no cache e os dados são lidos do cache
  • Se o processador não encontrar o local da memória no cache, ocorreu uma falha no cache . Para uma perda de cache, o cache aloca uma nova entrada e copia os dados da memória principal, então a solicitação é atendida a partir do conteúdo do cache.

O desempenho da memória cache é freqüentemente medido em termos de uma quantidade chamada taxa de acertos.

Hit ratio = hit / (hit + miss) =  no. of hits/total accesses

Podemos melhorar o desempenho do Cache usando um tamanho de bloco de cache maior, associatividade mais alta, reduzir a taxa de falha, reduzir a penalidade de falha e reduzir o tempo de acerto no cache.

Mapeamento de cache:
Existem três tipos diferentes de mapeamento usados ​​para fins de memória cache, que são os seguintes: mapeamento direto, mapeamento associativo e mapeamento conjunto-associativo. Eles são explicados a seguir.

  1. Mapeamento direto -
    A técnica mais simples, conhecida como mapeamento direto, mapeia cada bloco da memória principal em apenas uma linha de cache possível. ou
    No mapeamento direto, atribua cada bloco de memória a uma linha específica no cache. Se uma linha for ocupada anteriormente por um bloco de memória quando um novo bloco precisar ser carregado, o bloco antigo será descartado. Um espaço de endereço é dividido em um campo de índice de duas partes e um campo de tag. O cache é usado para armazenar o campo do tag, enquanto o resto é armazenado na memória principal. O desempenho do mapeamento direto é diretamente proporcional à taxa de acerto.
    i = j módulo m
    Onde
    i = número da linha do cache
    j = número do bloco de memória principal
    m = número de linhas no cache

    Para fins de acesso ao cache, cada endereço de memória principal pode ser visto como consistindo em três campos. Os bits w menos significativos identificam uma palavra ou byte exclusivo em um bloco da memória principal. Na maioria das máquinas contemporâneas, o endereço está no nível do byte. Os bits restantes especificam um dos blocos de 2 segundos da memória principal. A lógica do cache interpreta esses s bits como uma etiqueta de bits sr (parte mais significativa) e um campo de linha de r bits. Este último campo identifica uma das m = 2 r linhas do cache.

  2. Mapeamento associativo -
    neste tipo de mapeamento, a memória associativa é usada para armazenar conteúdo e endereços da palavra de memória. Qualquer bloco pode entrar em qualquer linha do cache. Isso significa que os bits de id de palavra são usados ​​para identificar qual palavra do bloco é necessária, mas a tag torna-se todos os bits restantes. Isso permite a colocação de qualquer palavra em qualquer lugar da memória cache. É considerada a forma de mapeamento mais rápida e flexível.

  3. Mapeamento associativo de conjuntos -
    esta forma de mapeamento é uma forma aprimorada de mapeamento direto, onde as desvantagens do mapeamento direto são removidas. O conjunto associativo aborda o problema de possível thrashing no método de mapeamento direto. Ele faz isso dizendo que, em vez de ter exatamente uma linha para a qual um bloco pode mapear no cache, agruparemos algumas linhas criando um conjunto . Então, um bloco na memória pode ser mapeado para qualquer uma das linhas de um conjunto específico. O mapeamento associativo do conjunto permite que cada palavra presente no cache possa ter duas ou mais palavras na memória principal para o mesmo endereço de índice. O mapeamento de cache associativo definido combina o melhor das técnicas de mapeamento de cache direto e associativo.

    Nesse caso, o cache consiste em vários conjuntos, cada um dos quais consiste em várias linhas. Os relacionamentos são

    m = v * k
    i = j mod v
    
    Onde
    i = número do conjunto de cache
    j = número do bloco de memória principal
    v = número de conjuntos
    m = número de linhas no cache número de conjuntos 
    k = número de linhas em cada conjunto 

    Aplicação de Cache de Memória -

    1. Normalmente, a memória cache pode armazenar um número razoável de blocos a qualquer momento, mas esse número é pequeno em comparação com o número total de blocos na memória principal.
    2. A correspondência entre os blocos de memória principal e os do cache é especificada por uma função de mapeamento.


    Tipos de Cache -

    • Cache primário -
      um cache primário está sempre localizado no chip do processador. Esse cache é pequeno e seu tempo de acesso é comparável ao dos registradores do processador.
    • Cache secundário - o
      cache secundário é colocado entre o cache primário e o resto da memória. É conhecido como cache de nível 2 (L2). Freqüentemente, o cache de Nível 2 também está alojado no chip do processador.


    Localidade de referência - já
    que o tamanho da memória cache é menor em comparação com a memória principal. Portanto, a verificação de qual parte da memória principal deve receber prioridade e carregá-la no cache é decidida com base na localidade de referência.

    Tipos de localidade de referência

    1. Localidade espacial de referência
      Isso indica que há uma chance de que o elemento esteja presente nas proximidades do ponto de referência e da próxima vez se for pesquisado novamente, então mais próximo ao ponto de referência.
    2. Localidade temporal de referência
      Neste algoritmo menos usado recentemente será usado. Sempre que ocorrer uma falha de página dentro de uma palavra, não apenas a palavra será carregada na memória principal, mas a falha de página completa será carregada porque a regra de localidade espacial de referência diz que se você estiver referenciando qualquer palavra, a próxima palavra será referenciada em seu registro é por isso que carregamos tabela de página completa para que o bloco completo seja carregado.



    Perguntas práticas do GATE -

    Que-1: Um computador tem um cache de dados de gravação de volta de 256 KByte, 4-way associativo, com o tamanho de bloco de 32 bytes. O processador envia endereços de 32 bits ao controlador de cache. Cada entrada de diretório de tag de cache contém, além da tag de endereço, 2 bits válidos, 1 bit modificado e 1 bit de substituição. O número de bits no campo de tag de um endereço é

    (A) 11
    (B) 14
    (C) 16
    (D) 27 

    Resposta: (C)

    Explicação: https://www.geeksforgeeks.org/gate-gate-cs-2012-question-54/

    Que-2: Considere os dados fornecidos na pergunta anterior. O tamanho do diretório da tag de cache é

    (A) 160 Kbits
    (B) 136 bits
    (C) 40 Kbits
    (D) 32 bits 

    Resposta: (A)

    Explicação: https://www.geeksforgeeks.org/gate-gate-cs-2012-question-55/

    Que-3: um cache de write-back de mapeamento direto de 8 KB é organizado como vários blocos, cada um com tamanho de 32 bytes. O processador gera endereços de 32 bits. O controlador de cache mantém as informações de tag para cada bloco de cache compreendendo o seguinte.

    1 bit válido
    1 bit modificado 

    Tantos bits quanto o mínimo necessário para identificar o bloco de memória mapeado no cache. Qual é o tamanho total da memória necessária no controlador de cache para armazenar metadados (tags) para o cache?

    (A) 4864 bits
    (B) 6144 bits
    (C) 6656 bits
    (D) 5376 bits 

    Resposta: (D)

    Explicação: https://www.geeksforgeeks.org/gate-gate-cs-2011-question-43/

    Artigo Contribuído por Pooja Taneja e Vaishali Bhatia . Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.

    Atenção leitor! Não pare de aprender agora. Pratique o exame GATE bem antes do exame real com os questionários sobre o assunto e gerais disponíveis no curso GATE Test Series .

    Aprenda todos os conceitos do GATE CS com aulas gratuitas ao vivo em nosso canal do youtube.