Spin-lock - stadopedia

Előadás száma 11. Szinkronizációs mechanizmusok

A többfeladatos többfeladatos operációs rendszerben, és még több processzor támogatásánál is sürgető a számítógép megosztott erőforrásaihoz való hozzáférés szinkronizálása, függetlenül attól, hogy ez egy hardvereszköz vagy egy memóriában lévő struktúra.

A spin-lock a legegyszerűbb szinkronizáló mechanizmus. A spin-lock rögzíthető. és felszabadult. Ha a spinlockot elfogták, egy későbbi kísérlet a spinlock bármely szálra való rögzítésére végtelen hurkot eredményez, és megpróbál egy spin-lock (busy-waiting thread) befogását. A ciklus akkor fejeződik be, amikor a spinzár előző tulajdonosa feloldja. A spin zárak használata biztonságos többprocesszoros platformokon, pl. Biztosítható, hogy ha két szálat egyszerre két processzornál kér, akkor csak az egyik szál fogja megfogni.

A spin-blokkolás célja az adatok védelme, amelyekhez különféle hozzáférések állnak rendelkezésre, többek között. emelkedett IRQL szinteket. Most képzeljük el ezt a helyzetet: az IRQL szinten működő kód PASSIVE_LEVEL rögzítette a spinzárat bizonyos adatok biztonságos módosításához. A kód megszakadt kód magasabb IRQL DISPATCH_LEVEL, aki megpróbálta megragadni ugyanazt spin-lock, és következik a leírás a spin-lock lépett végtelen ciklusba vár kioldó. Ez a ciklus soha nem fog véget érni, mert az a kód, amelyik rögzítette a spinlock-ot, és fel kell engednie azt, alacsonyabb IRQL szinten van, és soha nem lesz esélye végrehajtani! Ahhoz, hogy egy ilyen helyzet nem merült fel, egy olyan mechanizmust, amely nem teszi lehetővé a kód bizonyos szintű IRQL megszakítás kód alacsonyabb IRQL a pillanatban, amikor a kód alacsonyabb IRQL birtokolja a spinlock. Ilyen mechanizmus az, hogy növelje az aktuális IRQL szintet, amikor a spinlockot a spinlockhoz társított IRQL bizonyos szintjéig zárta, és a régi IRQL szintet helyreállította a kiadás időpontjában. Ebből következik, hogy a futó kód emelt szintű IRQL, nem jogosult hozzáférni az erőforrás által védett spin-lock, ha a szint IRQL spinlocks alacsonyabb IRQL szinten termelő hozzáférést az erőforrás kódot. Amikor megpróbálsz rögzíteni egy spinlock-ot ezzel a kóddal, az IRQL szintjét az IRQL spinzár szintjére kell csökkenteni, ami kiszámíthatatlan következményekhez vezet.

Az NT-ben kétféle spinzár található:

· Hagyományos spin-lock, amelyek egy speciális esete a spin-lock törlési kérelmet / szervezet által alkalmazott kéri sorban / in (cm. Előadás 10 n. [10.3] kéréseket Mégse / w).

· Megszakítja a szinkronizálást

Normál centrifugálással az IRQL DISPATCH_LEVEL kapcsolódik, azaz

1. az IRQL szintjén minden kísérletet el kell végezni<=DISPATCH_LEVEL

2. A spinlock lezárása esetén a jelenlegi IRQL szint a DISPATCH_LEVEL szintre emelkedik.

Az egyik DIRQL szint kapcsolódik a megszakítási szinkronizálás spin interlockjaihoz.

A normál spin zárak használatát az alábbiakban ismertetjük (kivéve a 10.3 fejezetben leírt I / O lekérdezések spin-off blokkolását).

A megszakításos szinkronizáláshoz használt spin-reteszek használatát a megszakításos kezelés előadásában ismertetjük (kísérleti jelleggel, 13. előadás).

Kapcsolódó cikkek