Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Bár az illesztőprogram-rutin rendelkezik spin lockmal, nem okozhat hardverkivételt, és nem emelhet szoftverkivételt a rendszer leállása nélkül. Más szóval az illesztőprogram ISR-jének és a SynchCritSection rutinnak, amelyet az illesztőprogram a KeSynchronizeExecution hívásában biztosít, nem okozhat hibát vagy csapdát, például oldalhibát vagy számtani kivételt, és nem okozhat szoftverkivételt. A KeAcquireSpinLockot vagy a KeAcquireInStackQueuedSpinLockot meghívó rutin szintén nem okozhat hardverkivételt, és nem emelhet szoftverkivételt, amíg ki nem adta a végrehajtó spin lockját, és már nem fut az IRQL = DISPATCH_LEVEL.
Lapozható adatok és támogatási rutinok
Spin lock tartása közben az illesztőprogramok nem hívhatnak olyan rutinokat, amelyek hozzáférnek a lapozható adatokhoz. Ne feledje, hogy az illesztőprogramok meghívhatnak bizonyos támogatási rutinokat, amelyek csak akkor és csak akkor férnek hozzá a lapozható adatokhoz, ha a hívásaik a szigorúan DISPATCH_LEVEL-nél kisebb IRQL-en való végrehajtás során történnek. Ez az IRQL-korlátozás megakadályozza ezen támogatási rutinok meghívását spin lock birtoklása közben. Az adott támogatási rutinra vonatkozó IRQL-követelményekért tekintse meg a rutin referenciaoldalát.
Rekurzió
A spin lock rekurzív megszerzésének kísérlete garantáltan holtpontot okoz: a rekurzív rutin által tartott példány nem tudja elengedni a spin lockot, miközben egy másik példány próbálja megszerezni ugyanazt a spin lockot.
Az alábbi irányelvek ismertetik, hogyan használja a forgózárakat rekurzív rutinokkal.
A rekurzív rutin nem hívhatja meg magát, amíg pörgetési zárat tart, vagy nem kísérelheti meg ugyanazt a pörgetési zárat megszerezni a későbbi hívásoknál.
Bár a rekurzív rutin spinzárat tartalmaz, egy másik illesztőprogram-rutin nem hívhatja meg a rekurzív rutint, ha a rekurzió holtpontot okozhat, vagy ha a hívó 25 mikroszekundumnál hosszabb ideig tartja a spinzárat.
A rekurzív illesztőprogram-rutinokról további információt a Kernel Stack használata című témakörben talál.
Beágyazott Spin Lock-beszerzések
Ha egy második pörgetési zárat próbál meg beszerezni, miközben egy másik pörgetési zárat tart, holtpontot vagy gyenge illesztőprogram-teljesítményt is okozhat.
Az alábbi irányelvek leírják, hogyan kell az illesztőprogramoknak tartaniuk a spinlockokat:
Az illesztőprogram nem hívhat meg olyan támogatási rutint, amely pörgetési zárat használ, hacsak nem biztos, hogy holtpont nem fordulhat elő.
Még akkor sem, ha holtpont nem fordulhat elő, az illesztőprogram nem hívhat meg olyan támogatási rutint, amely spin lockot használ, kivéve, ha más kódolási technikák nem tudnak hasonló illesztőprogram-teljesítményt és funkciókat biztosítani.
Ha egy illesztőprogram beágyazott hívásokat tesz a pörgetési zárak megszerzésére, akkor azokat mindig ugyanabban a sorrendben kell megszereznie minden egyes alkalommal. Ez a sorrend segít elkerülni a holtpontok.
Általában ne használjon egymásba ágyazott pörgetőzárakat, hogy megvédje az átfedésben lévő részhalmazokat vagy a megosztott adatok és erőforrások különálló halmazait. Gondolja át, mi történhet, ha egy illesztőprogram két vezetői spin-zárolással védi a különálló erőforrásokat, például egy időzítőobjektumot, amelyeket egyenként és együttesen különböző illesztőprogram-rutinok állíthatnak be. Az illesztő időnként holtpontot okozott egy SMP-gépen, amikor a két rutin közül bármelyik, amelyik már birtokolta az egyik spinzárat, megpróbálta megszerezni a másik spinzárat.
A beágyazott pörgetési zárolások beszerzéséről további információt a Zárolások, a Holtpontok és a Szinkronizálás című témakörben talál.