Koherenca predpomnilnika
Predpomnilnik se lahko uporablja za izboljšanje zmogljivosti dostopa do določenega vira. Če je za isti vir več takih predpomnilnikov, kot je prikazano na sliki, lahko to povzroči težave. Skladnost predpomnilnika ali koherenca predpomnilnika se nanaša na več načinov, kako zagotoviti, da imajo vsi predpomnilniki vira enake podatke in da so podatki v predpomnilnikih smiselni (imenovano integriteta podatkov). Skladnost predpomnilnika je poseben primer skladnosti pomnilnika.
Če je veliko predpomnilnikov skupnega pomnilniškega vira, lahko pride do težav, saj podatki v predpomnilniku niso več smiselni ali pa en predpomnilnik nima več enakih podatkov kot drugi. Pogost primer, kjer se pojavi težava, je predpomnilnik procesorjev v večprocesorskem sistemu. Kot je razvidno iz slike, če ima zgornji odjemalec kopijo pomnilniškega bloka iz prejšnjega branja in spodnji odjemalec ta pomnilniški blok spremeni, lahko zgornji odjemalec ostane z neveljavnim pomnilniškim predpomnilnikom,ne da bi za to vedel. Koherenca predpomnilnika je namenjena obvladovanju takšnih konfliktov in ohranjanju skladnosti med predpomnilnikom in pomnilnikom.
Več predpomnilnikov skupnega vira
Opredelitev
Koherenca opredeljuje obnašanje pri branju in pisanju na isto pomnilniško lokacijo. Predpomnilnika sta koherentna, če so izpolnjeni vsi naslednji pogoji:
- Ko procesor P prebere lokacijo X, mora po pisanju na to lokacijo dobiti vrednost, ki jo je zapisal, če noben drug procesor na to lokacijo ni zapisal druge vrednosti. To velja tudi za enoprocesorske sisteme, to pomeni, da je pomnilnik sposoben obdržati zapisano vrednost.
- Predpostavimo, da obstajata dva procesorja, P1 in P2, in da je P 1zapisal vrednost X1, nato pa je P 2zapisal vrednost X2, če P 1prebere vrednost, mora dobiti vrednost, ki jo je zapisal P2, X2, in ne vrednosti, ki jo je zapisal, X1, če med njima ni drugih zapisov. To pomeni, da je pogled na pomnilnik koherenten. Če lahko procesorji preberejo enako staro vrednost po zapisu, ki ga je opravil P2, pomnilnik ne bi bil koherenten.
- Na določeno mesto v pomnilniku je lahko naenkrat zapisano samo enkrat. Če je zapisov več, si morajo slediti drug za drugim. Z drugimi besedami, če je lokacija X prejela dve različni vrednosti A in B v tem vrstnem redu s strani katerih koli dveh procesorjev, procesorja nikoli ne moreta prebrati lokacije X kot B in jo nato prebrati kot A. Lokacijo X je treba videti z vrednostma A in B v tem vrstnem redu.
Ti pogoji so opredeljeni ob predpostavki, da se operacije branja in pisanja izvajajo takoj. Vendar se to v računalniški strojni opremi ne zgodi zaradi zakasnitve pomnilnika in drugih vidikov arhitekture. Pisanje procesorja X morda ne bo vidno pri branju procesorja Y, če bo branje opravljeno v zelo kratkem času po opravljenem pisanju. Model konsistentnosti pomnilnika opredeljuje, kdaj mora biti zapisana vrednost vidna v naslednjem ukazu za branje, ki ga izvedejo drugi procesorji.
Mehanizmi usklajenosti predpomnilnika
- Mehanizmi skladnosti, ki temeljijo na imeniku, vzdržujejo osrednji imenik blokov v predpomnilniku.
- Snooping je postopek, pri katerem vsak predpomnilnik spremlja naslovne vrstice za dostop do pomnilniških lokacij, ki so v njegovem predpomnilniku. Ko se opazi zapisovanje na lokacijo, katere kopijo ima predpomnilnik, kontroler predpomnilnika razveljavi svojo kopijo opazovane pomnilniške lokacije.
- Snarfing je postopek, pri katerem krmilnik predpomnilnika opazuje tako naslov kot podatke in poskuša posodobiti svojo kopijo lokacije v pomnilniku, ko drugi vodja spremeni lokacijo v glavnem pomnilniku.
Porazdeljeni sistemi deljenega pomnilnika posnemajo te mehanizme, tako da lahko vzdržujejo skladnost med bloki pomnilnika v ohlapno povezanih sistemih.
Dve najpogostejši vrsti koherence, ki se običajno preučujeta, sta Snooping in Directory-based. Vsaka ima svoje prednosti in slabosti. Če je na voljo dovolj pasovne širine, so protokoli Snooping praviloma hitrejši, saj so vse transakcije zahteva/odgovor, ki jih vidijo vsi procesorji. Pomanjkljivost je, da se snooping ne da skalirati. Vsako zahtevo je treba poslati vsem vozliščem v sistemu. Z večanjem sistema se morata povečati velikost (logičnega ali fizičnega) vodila in pasovna širina, ki jo zagotavlja. Po drugi strani imajo imeniki običajno daljše zakasnitve (z zahtevo/preposlanjem/odgovorom s tremi skoki), vendar porabijo veliko manj pasovne širine, saj so sporočila od točke do točke in se ne razširjajo. Zato veliko večjih sistemov (>64 procesorjev) uporablja to vrsto usklajenosti predpomnilnika.
Vprašanja in odgovori
V: Kaj je koherenca predpomnilnika?
O: Skladnost predpomnilnika se nanaša na zagotavljanje, da imajo vsi predpomnilniki vira enake podatke in da so podatki v predpomnilnikih skladni (celovitost podatkov).
V: Kakšen je namen usklajenosti predpomnilnika?
O: Namen usklajenosti predpomnilnika je upravljanje konfliktov med več predpomnilniki skupnega pomnilniškega vira in ohranjanje doslednosti med predpomnilnikom in pomnilnikom.
V: Kakšne so lahko posledice, če predpomnilnik ni skladen?
O: Brez skladnosti predpomnilnika lahko podatki v predpomnilniku nimajo več smisla ali pa en predpomnilnik nima več enakih podatkov kot drugi, kar lahko povzroči nedoslednosti in napake.
V: V katerem pogostem primeru se pojavijo težave s skladnostjo predpomnilnika?
O: Pogost primer težav s skladnostjo predpomnilnika je predpomnilnik procesorjev v večprocesorskem sistemu.
V: Kako deluje usklajenost predpomnilnika?
O: Koherenca predpomnilnika deluje tako, da z različnimi metodami zagotavlja, da imajo vsi predpomnilniki vira enake podatke in da so podatki v predpomnilnikih konsistentni.
V: Kaj pomeni skladnost pomnilnika?
O: Skladnost pomnilnika se nanaša na skladnost podatkov v skupnem pomnilniškem viru.
V: Kako lahko skladnost predpomnilnika izboljša zmogljivost?
O: Skladnost predpomnilnika lahko izboljša zmogljivost, saj omogoča hitrejši in učinkovitejši dostop do določenega vira.