Cachekoherens är en egenskap hos cacher , vilket betyder integriteten hos data som lagras i lokala cacher för en delad resurs. Cachekoherens är ett specialfall av minneskoherens .
När processer i systemet använder cachning för delade resurser, såsom minne, kan datainkonsekvensproblem uppstå. Detta gäller särskilt för processorer i ett multiprocessorsystem . Cachekoherens är utformad för att hantera sådana konflikter genom att upprätthålla datakonsistens över olika cacher.
Koherens definierar beteendet för läsning och skrivning till samma minnesplats. En cache kallas koherent om följande villkor är uppfyllda [1] :
Under dessa förhållanden antas läs- och skrivoperationer vara momentana. Detta händer dock inte i praktiken på grund av minnesfördröjningar och andra arkitektoniska egenskaper. Ändringar gjorda av processorn kanske inte är synliga för processorn om läsningen sker mycket kort efter skrivningen. Minneskonsistensmodellen avgör när ett skrivet värde kommer att synas när det läses från en annan tråd.
De tre huvudsakliga mekanismerna för att säkerställa cache-koherens är att använda en katalog ( katalog ), spårning ( snoopning ) och avlyssning ( snurfing ).
När du använder katalogen finns information om tillståndet för det fysiska minnesblocket endast på ett ställe, kallat katalogen (i detta fall kan katalogen distribueras fysiskt mellan systemnoderna).
I spårningsmekanismen har varje cache som innehåller en kopia av data från något block av fysiskt minne också en motsvarande kopia av tjänsteinformationen om dess tillstånd. Det finns inget centraliserat registersystem. Vanligtvis är cachar placerade på en delad (delad) buss, och styrenheterna för alla cacher tittar igenom bussen för att avgöra om de innehåller en kopia av motsvarande block.
När avlyssning tillämpas, när data från en cache skrivs till RAM, får de andras styrenheter en signal om denna ändring ("avlyssna" information om dataändringen) och, om nödvändigt, ändrar motsvarande data i sina cachar.
Distribuerade delade minnessystem [ använder liknande mekanismer för att upprätthålla överensstämmelse mellan minnesblock i löst kopplade system.
Koherensprotokollen är ansvariga för att upprätthålla datakorrektheten mellan alla cachar i ett distribuerat delat minnessystem. Protokollet upprätthåller minneskoherens enligt den valda koherensmodellen . De flesta hårdvaruprotokoll i processorer (inklusive de som tillhandahåller cache-koherent olikformig minnesåtkomst ) motsvarar den sekventiella konsistensmodellen , och mjukvaruprotokoll i mjukvarudistributerade minnessystem implementerar oftare modeller för utdatakonsistens ( engelsk release-konsistens ) eller svag konsistens ( engelska ) svag konsistens ).
De huvudsakliga modellerna och protokollen för att stödja cachekoherens är: