Ett litet exempel kan nog belysa saker
Antag till att börja med att ingen MMU är inblandad, utan virtuella addresser är identiska med fysiska addresser. Detta bara för att inte krångla till saker i onödan.
Antag att vi har 128kB cache, och varje cache-linje innehåller 64 byte data. Då har vi 128k/64 = 2048 cache-linjer (eller cache-block).
Antag även att det är en direkt-mappad cache, vilket innebär att en given minnesaddress mappas mot exakt en cache-linje.
Eftersom addressrymden är mycket större än cachen så kommer ju många olika minnesaddresser att mappas till samma cache-linje.
64-bytes cache-linje betyder att vi behöver 6 bitar för att välja byte inom blocket. De 6 bitarna motsvarar "Offset" i din modell, och är de 6 minst signifikanta bitarna i addressen.
2048 olika cache-linjer innebär 11 bitar för att ange vilken cache-linje som används. Dessa motsvarar "Index" i din modell.
Återstående 32-(11+6) = 15 bitar blir Tag.
En given cache-linje innehåller förutom de 64 bytes data, även 15 (i det här fallet) bitar Tag, och en Valid bit.
Vid en läsning så används Index för att välja rätt cache-linje. Cachens Valid bit kollas för att se om det överhuvudtaget finns riktig data i cache-blocket.
Sedan jämförs minnesaddressens Tag fält med Tag fältet i cachen. Är de lika så är det rätt minnesblock som ligger lagrat i cachen, och det blir en cache-träff. Om Tag fälten inte matchar så var det något annat minnesblock som låg i cachen, och det blir en cache-miss.
Vid en skrivning så slår man upp rätt cache-block via Index, skriver datat till cachen och det riktiga minnet, sätter cachens Valid bit, och sätter cache-blockets Tag fält till samma som minnesaddressen.
Ovanstående är nästintill enklast möjliga cache-implementation, och sådana används i verkligheten.
Det finns dock en hel del extra finesser som ofta används och krånglar till det och gör att det krävs extra bitar i cachen:
Write-back cache kontra write-through (ovanstående är write-through)
Associativ cache (där en minnesaddress kan mappas mot flera cache-linjer
Virtually indexed/Physically tagged kontra Virtually Indexed/Virtually tagged cache (när man har virtuella minnesaddresser som översätts till fysiska)
Flera nivåer av cachear med olika egenskaper
Multi-CPU system som delar på en eller flera cache-nivåer och där koherens mellan CPUerna behöver upprätthållas
Och så vidare....