Mi az a memóriazár?

Történelmileg minden számítógépes program teljesen szekvenciális módon íródott. Ezt könnyű olvasni, írni és megérteni. A számítógép számára is egyszerű a végrehajtás, és viszonylag egyszerű hardvert igényel. Ezzel a tervezési paradigmával a rendszer teljesítményének növelésének egyetlen két módja a hatékonyabb kód írása és a CPU sebességének növelése. Lehetséges a kód hatékonyságának növelése, de ez általában összetett folyamat, gyakran korlátozott eredménnyel.

Évtizedeken keresztül a teljesítmény csökkenthető, ha új, hatékonyabb CPU-kra várunk. A Moore-törvényben leírtak szerint a CPU-k teljesítménye nagyjából megduplázódik két-három évente. Sajnos a legtöbb ilyen teljesítménynövekedés az egyre kisebb gyártási csomópontok használatából származott. A modern technológia a nanométeres léptékű munkavégzés anyagi nehézségeinek köszönhetően a korábbi ütemben csökkenti a csomópontok méretét.

Ennek elkerülése érdekében a modern CPU-tervezők úgy döntöttek, hogy több processzormagot adnak a CPU-khoz. Minden processzormag külön-külön más-más feladatot tud végrehajtani. Ugyan nem tudják kombinálni ugyanazt a problémát, de egyszerre két problémán dolgozhatnak. Ez az alapvető felépítési változás rengeteg extra teljesítményt biztosít, de nem tesz közvetlen előnyt az egyes folyamatoknak, bár csökkenti a processzoridőért folytatott versengést.

A többmagos CPU-k előnyeinek kihasználásához a kódot többszálas módon kell megírni. Ezután minden szál egyidejűleg futtatható, a teljesítményelőny a rendelkezésre álló szálak és CPU magok számával skálázható. Ezzel azonban egy új kihívás, a „versenyfeltétel” elé kerül.

Megjegyzés: Egyes feladatok nem lehetnek többszálúak, míg mások nagyon sokszálúak lehetnek. A lehetséges teljesítményelőnyök az elvégzett munkától függenek.

A verseny feltételei

A többszálú szoftverek több mag előnyeit is kihasználhatják. Veszélyek leselkednek ezekre a vizekre, készen arra, hogy csapdába ejtsék a tapasztalatlan programozót. Versenyhelyzet akkor fordulhat elő, ha két különböző szál kölcsönhatásba lép ugyanazzal a memóriabittel.

Egy egyszerű példa lehet két szál, amelyek egyszerre próbálnak ellenőrizni és növelni egy változót. Tegyük fel, hogy a=0 . Ezután két különböző szál teljesíti a funkcióját, és egy bizonyos ponton ellenőrzi a-t , és eggyel növeli. Általában azt várjuk, hogy két szál egy nullához hozzáadásának eredménye kettő lesz. Legtöbbször ennek így kell lennie. Eltérő eredményt kaphat, ha mindkét szál pontosan a megfelelő időben megy keresztül az adott funkción.

Ebben az esetben az első szál egy értékét olvassa be . Mielőtt az első szál növelhetné egy bár értékét, a második szál beolvassa azt. Most az első szál egyet ad a nullához, de a második szál már nullának hiszi az értéket, és egyet ad a nullához. Ennek az az eredménye, hogy a végső értéke 1 , nem 2.

Versenyzés a legrosszabb forgatókönyv felé

Bár a fenti példa nem hangzik különösebben rosszul, drámai hatásai lehetnek. Mi van akkor, ha a értéke egy gép működési módját választja ki? Mi van akkor, ha a gép bizonyos működési módjai veszélyesek vagy akár életveszélyesek lehetnek?

A versenyfeltételeknek sem kell ilyen egyszerűnek lenniük. Például lehetséges, hogy egy szál egy memóriaszakaszt olvassa be, miközben egy másik szál ír rá. Ebben az esetben az olvasószál furcsa keveréket kaphat az előtte és utána származó adatokból. Tegyük fel, hogy az ellenőrzés egy egyszerű igaz/hamis ellenőrzés.

Ha a változó igazat mondott az olvasás elején, de éppen a false szóra írták felül, akkor az olvasási művelet eredménye valami olyasmi lehet, mint a „trlse”. Ez nem „igaz” vagy „hamis”. Ha a két opció egyike sem szerepel a bináris választásban, az szinte biztosan az alkalmazás összeomlását eredményezné. Ez a memóriasérülés számos biztonsági problémához vezethet, mint például a szolgáltatás megtagadása és a jogosultságok kiterjesztése.

A verseny kizárása

Annak ismerete, hogy egy programban mely memóriabitek vannak megosztva a különböző szálak között, elengedhetetlen a versenyhelyzet megelőzéséhez. Semmit sem kell tenni, ha egy változót mindig csak egyetlen szál vezérel és érhet el. Ha két vagy több szál hozzá tud férni egy változóhoz, akkor gondoskodnia kell arról, hogy az adott memóriadarabon végzett összes művelet egymástól függetlenül legyen végrehajtva.

Ez a függetlenség egy zárnak köszönhetően érhető el. Egy program kódjában zárolást kell tenni, amikor olyan függvényt ír, amely egy megosztott memórián működik. Ez a zár megakadályozza, hogy más szálak hozzáférjenek ahhoz a memóriarészhez, amíg a zárolást fel nem oldják.

A zár nem a legelegánsabb megoldás. Egyrészt több memóriával rendelkezik. Arra is képes, hogy egy szál lógjon, és várja, hogy a zár kioldódjon. A helyzettől függően előfordulhat, hogy a zár nagyon hosszú ideig nem, vagy egyáltalán nem oldódik ki. A legrosszabb forgatókönyv szerint a zár feloldása attól függhet, hogy valami történik egy másik blokkolt szálban, ami holtponthoz vezet.

Elengedhetetlen a zárak használatának optimalizálása. Szabályozhatja, hogy milyen szemcsés legyen a zár. Ha például adatokat szerkeszt egy táblázatban, zárolhatja a teljes táblázatot vagy csak a szerkesztett sort. Az egész asztal lezárása durva szemcsésségű zárolás lenne. Minimálisra csökkenti a túl sok zárolásból származó többletköltséget, de növeli annak esélyét, hogy egy másik szálat blokkoljon a zár. Csak a sor zárolása finom részletességű zárolás lenne. Ez sokkal kisebb valószínűséggel zavarja a többi szálat, de azt jelenti, hogy leszakadt zárakra lesz szükség, ami növeli a teljes költséget.

Következtetés

A memóriazár egy olyan kódeszköz, amely a memórián belüli atomi műveletek biztosítására szolgál többszálú környezetben. Ha egy memóriadarabot zárol a művelet előtt, akkor biztos lehet benne, hogy nem fordulhat elő váratlan viselkedés versenyhelyzet miatt. A memóriazárak memóriával rendelkeznek, de blokkolást is okozhatnak.

A blokkolás az az eset, amikor egy másik szál megpróbálja működtetni a zárolt pemory-t. A cérna ott ül, blokkolva, amíg a zár ki nem oldódik. Ez problémákat okozhat, ha a zárolás feloldásához egy másik szálra van szükség, hogy tegyen valamit, mivel az blokkolhat, mielőtt teljesítené az azt blokkoló zár feloldásának előfeltételét. A memória zárolása nem blokkoló kódok írásával elkerülhető. Ez azonban bonyolult és kevésbé hatékony lehet, mint a zárak használata. Ne felejtse el hagyni megjegyzéseit alább.


Leave a Comment

SSD Telepítése Asztali és Laptop PC-ken

SSD Telepítése Asztali és Laptop PC-ken

Rendelkezik egy SSD-vel, hogy frissítse a számítógép belső tárolóját, de nem tudja, hogyan telepítse? Olvassa el ezt a cikket most!

5 Ok, amiért a laptopod túlmelegszik

5 Ok, amiért a laptopod túlmelegszik

Tudd meg, miért melegszik túl a laptopod, és milyen tippeket és trükköket alkalmazhatsz, hogy elkerüld ezt a problémát és a készüléked hűvös maradjon.

Hogyan találjuk meg a nyomtató IP címét

Hogyan találjuk meg a nyomtató IP címét

Problémája van a nyomtató IP címének megtalálásával? Megmutatjuk, hogyan találhatja meg.

GeForce Now hibaelhárítás: 0xC272008F kód

GeForce Now hibaelhárítás: 0xC272008F kód

Egy nagy játéknak indulsz – éppen most szerezted meg a “Star Wars Outlaws”-t a GeForce Now streaming szolgáltatáson. Fedezd fel az egyetlen ismert megoldást a GeForce Now 0xC272008F hibaelhárításához, hogy újra játszhass az Ubisoft játékokkal.

Hogyan használj AirPods-ot Samsung telefonokkal

Hogyan használj AirPods-ot Samsung telefonokkal

Ha nem vagy biztos abban, hogy vásárolj-e AirPods-ot a Samsung telefonodhoz, ez az útmutató segíthet. Az első kérdés az, hogy a kettő kompatibilis-e, és a válasz: igen, kompatibilisek!

Hogyan csatlakoztassuk a Windows 11 laptopot projektorhoz/TV-hez

Hogyan csatlakoztassuk a Windows 11 laptopot projektorhoz/TV-hez

Olvassa el ezt a cikket az egyszerű, lépésről lépésre történő folyamatról, amely a Windows 11 és Windows 10 operációs rendszeren történő laptop projektor vagy TV-hez való csatlakoztatásához szükséges.

3D Nyomtatás Alapjai: Karbantartási Tippjei a 3D Nyomtatójához

3D Nyomtatás Alapjai: Karbantartási Tippjei a 3D Nyomtatójához

A 3D nyomtatók karbantartása nagyon fontos a legjobb eredmények eléréséhez. Íme néhány fontos tipp, amit érdemes megjegyezni.

Mi a teendő, ha a Powerbeats Pro nem töltődik az ügyben?

Mi a teendő, ha a Powerbeats Pro nem töltődik az ügyben?

Ha a Powerbeats Pro nem töltődik, használjon másik áramforrást és tisztítsa meg a fülhallgatókat. Töltés közben hagyja nyitva az ügyet.

Canon Pixma MG5220: Szkennelés Tinta Nélkül

Canon Pixma MG5220: Szkennelés Tinta Nélkül

Hogyan lehet engedélyezni a szkennelést a Canon Pixma MG5220-on, ha kifogyott a tinta.

10 Legjobb NAS Tárolóeszköz Otthoni és Professzionális Használatra

10 Legjobb NAS Tárolóeszköz Otthoni és Professzionális Használatra

Akár otthoni, akár irodai NAS-t keresel, nézd meg ezt a legjobb NAS tárolóeszközök listáját.