A DISPATCH LEVEL ( Windows operációs rendszerben ) annak a szálnak a prioritási szintje (üzemmódja) , amelyben a megelőző többfeladatos munkavégzés fel van függesztve .
Ebben a módban a végrehajtás csak az operációs rendszer kernelében lehetséges, a felhasználói módú kód ebben a módban nem hajtható végre.
A DISPATCH szint az alacsonyabb prioritási szintekhez hasonlóan (APC és PASSIVE) nem kapcsolódik a processzor hardveres üzemmódjaihoz, és csak szoftver biztosítja.
Ez a szint olyan műveletek végrehajtására szolgál, amelyek nem teszik lehetővé az aktuális szál és a processzor ( processzormag ) közötti megfelelés megsértését - mind a processzor átváltását egy másik szálra, mind a szálat egy másik processzorra. Egyprocesszoros rendszereken ez egyszerűen azt jelenti, hogy nem kerül végrehajtásra felhasználói módú kód , amíg a prioritási szintet le nem csökkentik. Többprocesszoros rendszeren ez csak az aktuális processzorra (mag) igaz, de azt is biztosítja, hogy az aktuális szál ne kerüljön át másik processzorba (mag) .
Különösen a DISPATCH szintet használják a Spin Locks implementálásakor . Ha a zárolás a megelőző multitasking fenntartása mellett történik , akkor az aktuális szál bármikor megszakítható, amikor a processzor új szálra vált. Mivel nem ismert, hogy az új szál milyen műveleteket hajt végre, lehetséges, hogy újra rögzíti ugyanazt a Spin Lock-ot, ami mindkét szál kölcsönös blokkolásához vezet. Mivel csak a rendszerkód kerül végrehajtásra magasabb prioritási szinteken, ez nagy valószínűséggel a teljes rendszer teljes blokkolásához ( lógásához ) vezet.
Ennek elkerülése érdekében az operációs rendszer szünetelteti a megelőző többfeladatos munkát, mielőtt megragadja a Spin Lock funkciót. Sőt, egyetlen processzor esetén ez elég a zárolási szemantika biztosításához ; a tényleges zárra már nincs szükség, és az egyetlen processzorra épített operációs rendszer kernelében sem használják.
A szálváltás letiltásával elkerülhető a hosszú zárolás-kioldási várakozási ciklus is többprocesszoros rendszeren, ami a processzorerőforrások terméktelen felhasználásához vezetne. A prioritási szint emelése biztosítja, hogy egy másik processzoron/magon zárolt szálat csak megszakításkezelők szakíthassák meg , amelyek futási ideje nem haladhatja meg a több tíz mikroszekundumot .
A kód végrehajtása a DISPATCH_LEVEL szinten:
Korlátozások a DISPATCH_LEVEL szinten:
A DISPATCH_LEVEL szinten végrehajtott kód továbbra is megszakítható bármely megszakítással , bár azzal a garanciával, hogy a megszakítás nem változtatja meg az aktuális szálat. Ha szinkronizálni kell a megszakításból és más kódból használt adatokhoz és hardverregiszterekhez való hozzáférést, akkor megszakításhoz kapcsolódó zárolást kell használnia, azaz KeSynchronizeExecution vagy KeAcquireInterruptSpinLock. A normál zárak használata ebben a helyzetben, valamint magukban a megszakításkezelőkben tilos.
A Linuxban egy hozzávetőleges analóg a „nem blokkolható kód” (nem blokkolható). Az a Linux-szabály, amely szerint a spinlock-ot birtokló kód nem blokkolhatja, pontosan megegyezik a Windows megfelelő szabályával.