O mapeamento direto é um projeto de memória cache em que cada endereço de memória é mapeado para uma linha de cache específica. Isso significa que existe apenas um local de cache possível para cada endereço de memória. O mapeamento direto é simples de implementar e tem baixa sobrecarga de hardware, mas pode resultar em conflitos de cache se vários endereços de memória forem mapeados para a mesma linha de cache.
Para calcular o índice da linha de cache para um determinado endereço de memória, o endereço de memória é dividido pelo tamanho da linha de cache. O restante desta divisão é o índice da linha de cache. Por exemplo, se o endereço de memória for 0x100 e o tamanho da linha de cache for 16 bytes, o índice da linha de cache será 4.
A função de mapeamento direto mapeia um endereço de memória para um índice de linha de cache de acordo com a seguinte fórmula:
```
cacheLineIndex =mod_memoryAddress cacheLineSize
```
Onde:
*
cacheLineIndex é o índice da linha de cache
*
memoryAddress é o endereço da memória
*
cacheLineSize é o tamanho da linha do cache
Aqui está um exemplo de como funciona o mapeamento direto. Considere um cache com tamanho de linha de cache de 16 bytes. A tabela a seguir mostra os endereços de memória mapeados para cada índice de linha de cache:
| Índice de linha de cache | Endereços de memória |
|---|---|
| 0 | 0x000, 0x010, 0x020, ..., 0x0F0 |
| 1 | 0x100, 0x110, 0x120, ..., 0x1F0 |
| 2 | 0x200, 0x210, 0x220, ..., 0x2F0 |
| 3 | 0x300, 0x310, 0x320, ..., 0x3F0 |
| ... | ... |
Agora digamos que queremos acessar o endereço de memória 0x123. Para calcular o índice da linha de cache para este endereço, dividimos 0x123 por 16. O restante desta divisão é 3. Portanto, o índice da linha de cache para o endereço de memória 0x123 é 3.
De acordo com a tabela acima, o índice de linha de cache 3 é mapeado para os endereços de memória 0x300, 0x310, 0x320, ..., 0x3F0. Portanto, o endereço de memória 0x123 é mapeado para a linha de cache que contém os endereços de memória 0x300, 0x310, 0x320, ..., 0x3F0.