Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kritické části jsou oddíly kódu, které vyžadují výhradní přístup k hardwarovým prostředkům nebo datům ovladačů. To znamená, že kód nesmí být přerušen jiným kódem, který může odkazovat na stejné prostředky nebo data, a prostředky nebo data nesmí být odkazovány více procesory najednou.
Kritické části by měly být omezeny na rutiny ISR a SynchCritSection . Systém tyto rutiny volá až po zvýšení IRQL aktuálního procesoru na hodnotu DIRQL zařízení a získání spin locku. Po návratu rutiny SynchCritSection systém uvolní zámek otáčení a sníží irQL procesoru.
Zvýšením irQL procesoru na hodnotu DIRQL zařízení zabrání přerušení aktuálního procesoru s výjimkou zařízení s vyšší prioritou. Získání spin locku brání ostatním procesorům v provádění jakéhokoli kódu kritické sekce přidruženého k danému spin locku. (Tento zámek číselníku se někdy označuje jako zámek pro přerušení otáčení.)
Rutiny StartIo a DpcForIsr nebo CustomDpc ovladače zařízení často musí přistupovat k některým ze stejných hardwarových prostředků (například registrů zařízení nebo jiné paměti relativní sběrnice) nebo dat spravovaných ovladačem jako ISR ovladače. V závislosti na zařízení nebo návrhu ovladače může jeho dispečer, AdapterControl, ControllerControl nebo rutiny časovače také přistupovat k hardwarovým prostředkům nebo datům spravovaným ovladačem.
Aby bylo možné volat jakoukoli kritickou sekci mimo ISR, musí ovladač použít rutinu KeSynchronizeExecution. Tato rutina přijímá adresu rutiny SynchCritSection jako vstup spolu s informacemi o kontextu definovanými ovladačem a ukazatelem objektu přerušení. Systém používá ukazatel objektu přerušení k určení DIRQL a spin lock pro použití s rutinou SynchCritSection . (Ovladač dříve zadal tyto hodnoty pomocí parametrů SpinLock a SynchronizeIrql funkce IoConnectInterrupt.)