Pagrindinis » kaip » Kada procesoriaus talpykla nusilpsta atgal į pagrindinę atmintį?

    Kada procesoriaus talpykla nusilpsta atgal į pagrindinę atmintį?

    Jei tik pradėsite sužinoti, kaip veikia kelių branduolių procesoriai, talpyklos, talpyklos nuoseklumas ir atminties darbai, tai gali atrodyti šiek tiek paini. Turint tai omenyje, šiandieninis „SuperUser“ atsakymas ir atsakymas į atsakymus į įdomų skaitytojo klausimą.

    Šiandienos „Klausimų ir atsakymų“ sesija mums suteikiama pagal „SuperUser“ - „Stack Exchange“ padalinį, bendruomenės sukurtą „Q&A“ svetainių grupavimą.

    Klausimas

    „SuperUser“ skaitytuvas „CarmeloS“ nori sužinoti, kada CPU talpyklė nuvaloma atgal į pagrindinę atmintį:

    Jei aš turiu CPU su dviem šerdimis ir kiekviena šerdis turi savo L1 talpyklą, ar įmanoma, kad Core1 ir Core2 tuo pačiu metu saugo tą pačią atminties dalį? Jei įmanoma, kokia bus pagrindinės atminties reikšmė, jei ir Core1, ir Core2 redagavo jų vertes talpykloje?

    Kada CPU talpykla nuvaloma atgal į pagrindinę atmintį?

    Atsakymas

    „SuperUser“ autoriai David Schwartz, sleske ir Kimberly W atsako už mus. Pirma, David Schwartz:

    Jei aš turiu CPU su dviem šerdimis ir kiekviena šerdis turi savo L1 talpyklą, ar įmanoma, kad Core1 ir Core2 tuo pačiu metu talpina tą pačią atminties dalį?

    Taip, našumas būtų baisus, jei taip nebūtų. Apsvarstykite dvi temas, kuriose veikia tas pats kodas. Norite, kad šis kodas būtų abiejose L1 talpyklose.

    Jei įmanoma, kokia bus pagrindinės atminties reikšmė, jei ir Core1, ir Core2 redagavo jų vertes talpykloje?

    Senoji vertė bus pagrindinėje atmintyje, kuri nesvarbu, nes nė vienas iš jų neišmoks. Prieš išleidžiant modifikuotą vertę iš talpyklos, jis turi būti parašytas į atmintį. Paprastai naudojamas kai kuris MESI protokolo variantas. Tradiciniame MESI diegime, jei vertė yra keičiama vienoje talpykloje, ji negali būti jokioje kitoje talpykloje tame pačiame lygyje.

    Po to atsako sleske:

    Taip, gali būti įvykdytos dvi talpyklos talpyklos tame pačiame atminties regione ir iš tikrųjų tai yra problema, kuri praktiškai vyksta daug. Yra įvairių sprendimų, pavyzdžiui:

    • Abi talpyklos gali bendrauti, kad įsitikintų, jog jos nesutinka
    • Jūs galite turėti tam tikrą prižiūrėtoją, kuris stebi visas talpyklas ir atitinkamai jas atnaujina
    • Kiekvienas procesorius stebi atminties sritis, kurias jis išsaugojo, ir kai aptinka rašymą, išmeta jo (dabar netinkamą) talpyklą

    Problema vadinama talpyklos nuoseklumu, o Vikipedijos straipsnis apie šią temą turi puikią problemos ir galimų sprendimų apžvalgą.

    Ir galutinis atsakymas iš Kimberly W:

    Jei norite atsakyti į klausimą savo įrašo pavadinime, tai priklauso nuo talpyklos protokolo. Jei tai yra nurašymas, laikinoji atmintis bus nuleista tik į pagrindinę atmintį, kai talpyklos valdiklis neturi kito pasirinkimo, kaip įdėti naują talpyklos bloką jau užimtoje erdvėje. Anksčiau užimtas blokas pašalinamas, o jo vertė įrašoma į pagrindinę atmintį.

    Kitas protokolas yra perrašymas. Tokiu atveju bet kuriuo metu įrašomas talpyklos blokas n, atitinkamą bloką lygiu n + 1 atnaujinamas. Koncepcija panaši į formos užpildymą su anglies popieriumi; ką rašote viršuje, nukopijuokite žemiau esančiame lape. Tai yra lėtesnė, nes akivaizdu, kad ji apima daugiau rašymo operacijų, tačiau tarp talpyklų esančios vertės yra nuoseklesnės. Atkūrimo schemoje tik aukščiausio lygio talpyklai būtų naujausios vertės konkrečiam atminties blokui.


    Ar ką nors papildyti paaiškinimu? Garsas išjungtas komentaruose. Norite perskaityti daugiau atsakymų iš kitų „tech-savvy Stack Exchange“ vartotojų? Čia rasite visą diskusijų temą.

    Vaizdo kreditas: Lemsipmatt (Flickr)