Direct Mapping ist ein Cache-Speicherdesign, bei dem jede Speicheradresse einer bestimmten Cache-Zeile zugeordnet wird. Das bedeutet, dass es für jede Speicheradresse nur einen möglichen Cache-Speicherort gibt. Die direkte Zuordnung ist einfach zu implementieren und erfordert einen geringen Hardware-Overhead. Sie kann jedoch zu Cache-Konflikten führen, wenn mehrere Speicheradressen derselben Cache-Zeile zugeordnet sind.
Um den Cache-Zeilenindex für eine bestimmte Speicheradresse zu berechnen, wird die Speicheradresse durch die Cache-Zeilengröße geteilt. Der Rest dieser Unterteilung ist der Cache-Zeilenindex. Wenn die Speicheradresse beispielsweise 0x100 ist und die Cache-Zeilengröße 16 Byte beträgt, beträgt der Cache-Zeilenindex 4.
Die Direktzuordnungsfunktion ordnet eine Speicheradresse einem Cache-Zeilenindex gemäß der folgenden Formel zu:
„
CacheLineIndex =MemoryAddress mod CacheLineSize
„
Wo:
* cacheLineIndex ist der Cache-Zeilenindex
* Speicheradresse ist die Speicheradresse
* cacheLineSize ist die Cache-Zeilengröße
Hier ist ein Beispiel dafür, wie die direkte Zuordnung funktioniert. Stellen Sie sich einen Cache mit einer Cache-Zeilengröße von 16 Byte vor. Die folgende Tabelle zeigt die Speicheradressen, die jedem Cache-Zeilenindex zugeordnet sind:
| Cache-Zeilenindex | Speicheradressen |
|---|---|
| 0 | 0x000, 0x010, 0x020, ..., 0x0F0 |
| 1 | 0x100, 0x110, 0x120, ..., 0x1F0 |
| 2 | 0x200, 0x210, 0x220, ..., 0x2F0 |
| 3 | 0x300, 0x310, 0x320, ..., 0x3F0 |
| ... | ... |
Nehmen wir nun an, wir möchten auf die Speicheradresse 0x123 zugreifen. Um den Cache-Zeilenindex für diese Adresse zu berechnen, teilen wir 0x123 durch 16. Der Rest dieser Division ist 3. Daher ist der Cache-Zeilenindex für die Speicheradresse 0x123 3.
Gemäß der obigen Tabelle ist der Cache-Zeilenindex 3 den Speicheradressen 0x300, 0x310, 0x320, ..., 0x3F0 zugeordnet. Daher wird die Speicheradresse 0x123 der Cache-Zeile zugeordnet, die die Speicheradressen 0x300, 0x310, 0x320, ..., 0x3F0 enthält.