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.


Merevlemez klónozása

Merevlemez klónozása

A modern digitális korban, ahol az adatok értékes eszközök, a merevlemez klónozása Windows rendszeren sokak számára döntő fontosságú folyamat lehet. Ez az átfogó útmutató

Hogyan javítható a WUDFRd illesztőprogram betöltése a Windows 10 rendszeren?

Hogyan javítható a WUDFRd illesztőprogram betöltése a Windows 10 rendszeren?

A számítógép indításakor a hibaüzenet azt jelzi, hogy nem sikerült betölteni a WUDFRd illesztőprogramot a számítógépére?

Az NVIDIA GeForce Experience hibakód 0x0003 kijavítása

Az NVIDIA GeForce Experience hibakód 0x0003 kijavítása

Az NVIDIA GeForce tapasztalati hibakód 0x0003 az asztalon? Ha igen, olvassa el a blogot, hogy megtudja, hogyan javíthatja ki ezt a hibát gyorsan és egyszerűen.

Mi az SMPS?

Mi az SMPS?

Mielőtt SMPS-t választana számítógépéhez, ismerje meg, mi az SMPS és mit jelent a különböző hatékonysági besorolások.

Miért nem kapcsol be a Chromebookom?

Miért nem kapcsol be a Chromebookom?

Válaszokat kaphat a következő kérdésre: Miért nem kapcsol be a Chromebookom? Ebben a Chromebook-felhasználóknak szóló hasznos útmutatóban.

Az adathalász csalások bejelentése a Google-nak

Az adathalász csalások bejelentése a Google-nak

Ebből az útmutatóból megtudhatja, hogyan jelentheti be a csalókat a Google-nak, hogy megakadályozza, hogy átverjenek másokat.

A Roomba megáll, kiáll és megfordul – Javítás

A Roomba megáll, kiáll és megfordul – Javítás

Javítsa ki azt a problémát, amikor a Roomba robotporszívója leáll, beragad, és folyamatosan megfordul.

Grafikai beállítások módosítása a Steam Decken

Grafikai beállítások módosítása a Steam Decken

A Steam Deck robusztus és sokoldalú játékélményt kínál az Ön keze ügyében. Azonban a játék optimalizálása és a lehető legjobb biztosítása érdekében

Mi az elszigetelésen alapuló biztonság?

Mi az elszigetelésen alapuló biztonság?

Egy olyan témában készültek elmélyülni, amely egyre fontosabbá válik a kiberbiztonság világában: az elszigeteltségen alapuló biztonsággal. Ez a megközelítés a

Az Auto Clicker használata Chromebookhoz

Az Auto Clicker használata Chromebookhoz

Ma egy olyan eszközzel készültünk, amely képes automatizálni az ismétlődő kattintási feladatokat a Chromebookon: az Automatikus klikkelőt. Ezzel az eszközzel időt takaríthat meg és