Coerența cache este o proprietate a cache-urilor , ceea ce înseamnă integritatea datelor stocate în cache-urile locale pentru o resursă partajată. Coerența cache este un caz special de coerență a memoriei .
Când procesele din sistem utilizează cache pentru resurse partajate, cum ar fi memoria, pot apărea probleme de inconsecvență a datelor. Acest lucru este valabil mai ales pentru procesoarele dintr-un sistem multiprocesor . Coerența cache-ului este concepută pentru a gestiona astfel de conflicte prin menținerea coerenței datelor în diferite cache-uri.
Coerența definește comportamentul citirilor și scrierilor în aceeași locație de memorie. Un cache se numește coerent dacă sunt îndeplinite următoarele condiții [1] :
În aceste condiții, se presupune că operațiunile de citire și scriere sunt instantanee. Cu toate acestea, acest lucru nu se întâmplă în practică din cauza întârzierilor de memorie și a altor caracteristici arhitecturale. Modificările făcute de procesor pot să nu fie vizibile pentru procesor dacă citirea are loc la scurt timp după scriere. Modelul de consistență a memoriei determină când o valoare scrisă va fi vizibilă atunci când este citită dintr-un alt fir.
Cele trei mecanisme principale pentru asigurarea coerenței cache-ului sunt utilizarea unui director ( director ), urmărire ( snooping ) și interceptare ( snarfing ).
La utilizarea directorului, informațiile despre starea blocului de memorie fizică sunt conținute într-un singur loc, numit director (în acest caz, directorul poate fi distribuit fizic între nodurile sistemului).
În mecanismul de urmărire, fiecare cache care conține o copie a datelor unui bloc de memorie fizică are și o copie corespunzătoare a informațiilor de serviciu despre starea sa. Nu există un sistem centralizat de înregistrare. De obicei, cache-urile sunt situate pe o magistrală partajată (partajată), iar controlorii tuturor cache-urilor urmăresc (se uită prin) magistrala pentru a determina dacă acestea conțin o copie a blocului corespunzător.
Când se aplică interceptarea, când datele dintr-un cache sunt scrise în RAM, controlorii celorlalți primesc un semnal despre această modificare (informații („interceptare” despre modificarea datelor) și, dacă este necesar, schimbă datele corespunzătoare din cache-urile lor.
Sistemele de memorie partajată distribuită folosesc mecanisme similare pentru a menține consistența între blocurile de memorie în sistemele slab cuplate.
Protocoalele de coerență sunt responsabile pentru menținerea corectitudinii datelor între toate cache-urile dintr-un sistem de memorie partajată distribuită. Protocolul menține coerența memoriei conform modelului de coerență ales . Majoritatea protocoalelor hardware din procesoare (inclusiv cele care furnizează acces neuniform la memorie coerent în cache ) corespund modelului de consistență secvențială , iar protocoalele software din sistemele de memorie distribuită software implementează mai des modele de consistență a ieșirii ( consistența versiunii în limba engleză ) sau consistență slabă ( engleză ) consistență slabă ).
Principalele modele și protocoale pentru susținerea coerenței cache-ului sunt: