Por que uma região da memória ser marcado não armazenada em cache?
Pergunta
Em um aplicativo embutido, temos uma tabela que descreve os vários intervalos de endereços que são válidos em fora placa alvo. Esta tabela é usada para configurar o MMU.
O intervalo de endereços RAM é marcado como em cache, mas outras regiões são marcadas por não cacheable. Por que isso?
Solução
Se uma região de memória é acessado por hardware e software simultaneamente (EX: hardware registro de configuração ou lista de dispersão-se reúnem para DMA), esta região deve ser definida como não armazenada em cache. Para DMA real, o buffer de memória pode ser definida como cache, e na maioria dos casos, é aconselhável para o buffer para ser armazenada em cache para permitir que o nível de aplicação acesso rápido a esse buffer. É responsabilidade do motorista para rubor cache / invalidar antes de passar o buffer para DMA ou a aplicação.
update pequeno, acima de deve não é correto no caso, temos um hardware especializado, ou seja, de coerência de cache Interconnect (CCI), que irá sincronizar o acesso de vários blocos de hardware para a memória.
Outras dicas
Isto é feito para que o processador não usa valores obsoletos devido ao cache. Quando você acessa (regular) RAM em cache, o processador pode "lembrar" o valor que você acessou. A próxima vez que você olhar para essa mesma posição de memória, o processador irá retornar o valor que ele se lembra, sem olhar na RAM. Este é o cache.
Se o conteúdo da localização pode ser alterado sem o processador saber como poderia ser o caso se você tiver um dispositivo de memória mapeada (um FPGA retornando alguns pacotes de dados, por exemplo), o processador poderia retornar o valor é "lembrado" de última tempo, o que seria errado.
Para evitar esse problema, você marcar esse espaço de endereço como não-cacheable. Isto garante que o processador não tente se lembrar o valor.
Qualquer região de memória usado para DMA ou outras interações de hardware não deve ser armazenado em cache.
Talvez ele é usado para mapeamento de memória I / O?
Algumas áreas como o Flash pode ser lido em um ciclo, por isso não precisa ser armazenada em cache.
Controladores modernos podem usar o cache L2 para DMA, o que significa que preservar a coerência da região de memória cache usado para DMA acessos. Isso também é denominado como "transações de memória snoop-able" realizados pelo controlador (via DMA).