O cache na CPU não armazena os dados, apenas acelera o acesso.
A explicação mais básica do cache é que quando a CPU vai ler um byte específico da RAM, esses dados são copiados para o cache também. Na próxima vez em que a CPU precisar ler esse byte, o controlador de memória vê que está no cache e, em vez de fazer a chamada lenta para a RAM, ele apenas entrega à CPU os dados do cache.
Existem dois problemas específicos com esta explicação:
-
O cache é um tamanho finito. Por causa disso, quando dados são adicionados, você eventualmente precisa se livrar de (ou 'soltar') dados antigos para dar espaço para isso. Existem várias maneiras de fazer isso, e a metodologia exata não importa exatamente para essa discussão, mas o que importa é que depois de um tempo, os dados podem não estar mais no cache, e então você precisa sair para a memória principal de qualquer maneira.
-
Quando os dados são gravados, você também precisa atualizar ou remover os dados do cache que foi armazenado anteriormente nesse endereço. Existem três maneiras principais de lidar com isso:
- Writeback: Usando o método de write-back, os dados são gravados primeiro no cache e depois, eventualmente, gravados na memória principal. Isso tem várias vantagens para o desempenho, mas pode causar problemas em algumas circunstâncias.
- Escrita: Usando o método writethrough, os dados são gravados simultaneamente no cache e na memória principal. Este é um desempenho inferior ao write-back, mas é mais seguro.
- Write-around: Usando o método write-around, os dados são gravados diretamente na memória principal e, em seguida, os dados que estavam no mesmo local são removidos do cache. Isso raramente é usado, exceto em casos de uso muito específicos.
Portanto, para responder à sua pergunta sobre RAM versus o cache da CPU, tecnicamente, ambos, mas os dados, em última instância, vêm da RAM em quase todos os casos. Se você estiver interessado em aprender mais sobre isso especificamente, sugiro ler os seguintes dois artigos da Wikipédia:
Agora, quanto à questão do espaço de troca, esse é um conceito completamente diferente que está ligado à memória virtual e à paginação. Tentar explicar isso aqui resultaria em mim escrevendo a maior parte de alguns artigos da Wkipedia, então vou apenas te apontar diretamente nos artigos em questão: