Relação entre a linha de cache e a página de memória

9
  1. Se estiver correto, uma página na memória principal é a menor unidade de transferência de dados entre a memória principal e um dispositivo de armazenamento externo, como um disco rígido. Uma linha de cache de uma memória principal é a menor unidade para transferir dados entre a memória principal e os caches da CPU.

  2. Gostaria de saber se o tamanho da página é sempre ou melhor para ser um número natural de tamanho da linha de cache? Se o tamanho da linha de cache for de 64 bytes e o tamanho da página de memória for de 4KB, cada página terá 4KB / 64 bytes == 64 linhas de cache.

  3. Uma página e uma linha de cache são objetos fixos na memória? Ou eles são apenas qualquer bloco contíguo de uma memória de um determinado tamanho, que pode iniciar e flutuar em qualquer lugar da memória?

  4. É sempre que uma linha de cache não pode abranger mais de uma página, ou seja, parte de uma linha de cache está em uma página e a outra parte da linha de cache está em outra página?

Obrigado.

Tim
fonte
2
As respostas para suas perguntas são altamente dependentes da arquitetura da CPU.
TMN

Respostas:

8
  1. Uma linha de cache é a menor unidade com a qual você pode tocar na memória física. Ou seja, quando você lê / grava 1 byte, uma linha de cache completa que o contém é lida no cache da CPU e gravada novamente. Observe que mesmo as instruções que ignoram o cache para gravação (instruções efêmeras de streaming) gravam em tamanhos de linha de cache. Dependendo da CPU, os tamanhos das linhas de cache são tipicamente 32/64/128 bytes. Quando as páginas de memória são gravadas no disco, elas são gravadas na íntegra. Isso acontecerá quando a pressão da memória estiver muito alta ou com processos de hibernação (e possivelmente para outros usos). Eles também serão lidos inteiros quando necessário novamente. Isso ocorre principalmente porque o kernel não tem como saber se a página é parcial ou totalmente usada. Outras operações de leitura / gravação de armazenamento externo podem ter granularidade arbitrária (por exemplo: fwrite (..)).

  2. O tamanho da página depende da CPU / GPU. Para a maioria das CPUs, os tamanhos de página são de pelo menos 4KB e geralmente oferecem suporte a uma mistura de 4KB / 64KB / 2MB / 4MB / 16MB / 1GB (nem todos são suportados ao mesmo tempo). O tamanho sempre será uma potência de dois.

  3. Uma página e uma linha de cache são contíguas e precisam estar alinhadas ao seu tamanho respectivo. Uma linha de cache de 64 bytes está sempre alinhada em 64 bytes e uma página de 2 MB está sempre alinhada em 2 MB.

  4. Por causa do nº 3, uma linha de cache nunca pode abranger 2 páginas, pois os tamanhos de página sempre serão maiores que uma linha de cache e sempre serão múltiplos do tamanho de uma linha de cache.

Veja esta excelente fonte para obter muitas informações sobre memória: http://lwn.net/Articles/250967/

Nicholas Frechette
fonte