Többprocesszoros gyorsítótár-koherencia

Többprocesszoros gyorsítótár-koherencia

Kezdőlap | Rólunk | visszacsatolás

A szóban forgó probléma abból fakad, hogy a két különböző processzorban tárolt memóriában lévő adatelem értékét csak az egyes cache-okon keresztül lehet elérni. Az 1. ábrán. A 10.3. Ábrán egy egyszerű példa mutatja ezt a problémát.

A multiprocesszorok és I / O eszközök memória koherencia problémája számos szempontot tartalmaz. A kis multiprocesszorok tipikusan hardver mechanizmust használnak, amelyet protokollnak neveznek a probléma megoldására. Az ilyen protokollokat cache coherency protokolloknak nevezik. Az ilyen protokollok két csoportja létezik:

  1. Könyvtár alapú protokollok. A fizikai memóriablokk állapotára vonatkozó információ csak egy helyen található, amelyet könyvtárnak neveznek (fizikailag a könyvtár a rendszer csomópontjai között oszlik meg). Ez a megközelítés a Sec. 10.3.
  2. Megfigyelési protokollok (snooping). Mindegyik gyorsítótár, amely egy bizonyos fizikai memóriablokk adatainak másolatát tartalmazza, szintén rendelkezik az állapotáról szóló szolgáltatásinformáció megfelelő másolatával. Hiányzik egy centralizált felvételi rendszer. Általában a gyorsítótárak egy megosztott buszon találhatók, és minden cache-vezérlő megnézheti a buszon (megnézheti), hogy meghatározzák-e a megfelelő blokk másolatát.

Ábra. 10.3. A cache memória koherencia problémájának illusztrációja

A többprocesszoros rendszerek mikroprocesszor a cache memória csatlakozik a központi osztott memóriát megfigyelési jegyzőkönyvek népszerű lett lehívásához az állam a cache, tudják használni a már meglévő fizikai kapcsolat - egy memória buszt.

Informális módon a memória koherenciájának problémája abból áll, hogy biztosítani kell, hogy az adatelem minden olvasata visszatérjen a legutoljára hozzáadott értékbe. Ez a meghatározás nem teljesen helyes, mivel lehetetlen megkövetelni, hogy az olvasási művelet pillanatok alatt megtekintsen egy másik processzorhoz ezt az adatelemet. Ha például egy processzor írási művelet megelőzi az olvasási művelet az azonos cellában egy másik processzor egy nagyon rövid időintervallum, lehetetlen garantálni, hogy az olvasási bevallási adatok rögzített érték, hiszen ebben az időpontban, az adatok rögzítése nem is hagyja el a processzort. Az a kérdés, hogy mikor kell pontosan írt értéket elérni az olvasást végző processzor számára, a modell által választott következetes (állandó) memóriaállapot modellje határozza meg, és a párhuzamos számítások szinkronizálásának végrehajtásával jár. Ezért az egyszerűség kedvéért feltesszük, hogy ehhez csak rögzíti a tranzakció értéke rekord elérhető olvasási műveletek történt egy kicsit később, hogy a rögzítésére és feldolgozására az írási művelet mindig látható a végrehajtásuk sorrendjének.

A következetes memóriaállapot egyszerű meghatározásával garantálhatjuk a koherenciát két tulajdonság biztosításával:

  1. Az a memóriaegység olvasása, amelyet egy processzor egy processzort olvas, amely egy processzortól ugyanazon memóriahelyre írja az írási műveletet, megkapja a rögzített értéket, ha az olvasási és írási műveletek időben megfelelően egymástól elválnak.
  2. írási műveleteket az ugyanazon memória cella végzik szigorúan egymás után (néha azt mondják, hogy sorozatban): ez azt jelenti, hogy a két szomszédos átirányítások a memóriahely fogják megfigyelni más processzorok pontosan abban a sorrendben, amelyben úgy tűnik, az író műveleteket végző processzor programjában.

Az első tulajdonság nyilvánvalóan összefüggésben van a koherens (állandó) memóriaállapot meghatározásával: ha a processzor mindig csak a régi adatértéket olvasná, azt mondanánk, hogy a memória inkoherens.

A szigorúan egymást követő felvételi műveletek szükségessége finomabb, de nagyon fontos is. Képzelje el, hogy az írási műveletek szigorúan következetes végrehajtását nem tartják be. Ezután a P1 processzor képes adatokat írni a cellára, majd a P2 processzor írja ezt a cellát. Az írási műveletek szigorú szekvenciális végrehajtása két fontos következményt biztosít az írási műveletek sorrendjéhez. Először is biztosítja, hogy a gép minden egyes processzora egy bizonyos időpontban megfigyelje a P2 processzor által készített felvételt. Ha a sorrend írási művelet nem tartják be, a helyzet állhat elő, amikor valamilyen processzor fogja tartani az első P2 processzor írási művelet, majd a P1 processzor írási művelet, és tárolja a rögzített értékének P1 végtelenségig. Egy finomabb probléma merül fel a program végrehajtásának és a memória koherenciájának ésszerű modelljének fenntartása érdekében: képzeljük el, hogy a harmadik processzor folyamatosan ugyanazt a memóriakártyát olvasja, amelybe a P1 és P2 processzorok írják; először meg kell figyelnie a P1 által rögzített értéket, majd a P2 által rögzített értéket. Talán soha nem fogja tudni látni a P1 által rögzített értéket, mivel a P2-től származó felvétel az olvasás előtt keletkezett. Ha még a P1 által feljegyzett értéket is látja, akkor a P2 értéket a későbbi olvasás során fel kell tüntetnie. Hasonlóképpen, bármely más processzor, amely képes figyelni a P1 és P2 által írt értékeket, ugyanazt a viselkedést kell figyelembe vennie. Az ilyen tulajdonságok elérésének legegyszerűbb módja az írási műveletek sorrendjének szigorú betartása, hogy ugyanabban a cella összes rekordja ugyanabban a sorrendben figyelhető meg. Ezt a tulajdonságot az írási műveletek szekvenciális végrehajtásának (szerializációnak) nevezik (írási sorozatok). Az a kérdés, hogy mikor kell egy processzort egy másik processzor által írt értéknek látni, elég összetett és észrevehető hatással van a teljesítményre, különösen a nagygépeknél.

Kapcsolódó cikkek