Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«1.Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство Windows (Π³Π». 1-4)Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 39

Автор ΠœΠ°Ρ€ΠΊ Руссинович

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ синхронизируСт доступ ΠΊ своим структурам Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ IRQL уровня Β«DPC/dispatchΒ», ядро ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ систСма Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ привСсти ΠΊ ошибкС страницы ΠΈΠ»ΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ IRQL уровня Β«DPC/dispatchΒ» ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ (эти ΡƒΡ€ΠΎΠ²Π½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ извСстны ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ «высокий IRQLΒ»). Из ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ядро ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ систСма ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ своих Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ высоком IRQL ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ΠΏΡ€ΠΈ Π½ΠΈΠ·ΠΊΠΈΡ… уровнях IRQL (Π½ΠΈΠΆΠ΅ Β«DPC/dispatchΒ»).


Бинхронизация ядра ΠΏΡ€ΠΈ высоком IRQL

Π―Π΄Ρ€ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ процСссор выполняСт ΠΊΠΎΠ΄ Π² критичСской сСкции. ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠΈ сСкциями ядра ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… диспСтчСра ядра ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ DPC ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π½Π΅ смогла Π±Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли Π±Ρ‹ ядро Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ доступ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΊ этим структурам Π΄Π°Π½Π½Ρ‹Ρ….

B этом ΠΏΠ»Π°Π½Π΅ большС всСго ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с прСрываниями. Π’Π°ΠΊ, Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ обновлСния ядром глобальной структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ измСняСт Ρ‚Ρƒ ΠΆΠ΅ структуру. B простых однопроцСссорных систСмах Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ событий ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ всСх ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π½Π° врСмя доступа ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ядрС Windows Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΠ΅Ρ€Π΅Π΄ использованиСм глобального рСсурса ядро Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ маскируСт прСрывания, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ рСсурс. Для этого ядро ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ IRQL процСссора Π΄ΠΎ самого высокого уровня, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ источником ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ. НапримСр, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Β«DPC/dispatchΒ» ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ запуску диспСтчСра ядра, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄ΠΈΡΠΏΠ΅Ρ‚Ρ‡Π΅Ρ€ΡΠΊΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, любая другая Ρ‡Π°ΡΡ‚ΡŒ ядра, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Π΄Π΅Π»ΠΎ с этой Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ IRQL Π΄ΠΎ уровня Β«DPC/dispatchΒ», маскируя прСрывания Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ уровня ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ диспСтчСрской Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π­Ρ‚Π° стратСгия Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² однопроцСссорных систСмах, Π½ΠΎ Π½Π΅ годится для многопроцСссорных ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ. ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ IRQL Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· процСссоров Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ процСссорС, Π° ядро Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ доступ Π½Π° всСх процСссорах.


Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ Ρ„ΠΎΡ€ΠΌΠ° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² синхронизации опираСтся Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ бСзопасных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Ρ†Π΅Π»Ρ‹ΠΌΠΈ значСниями ΠΈ выполнСния сравнСний Π² многопроцСссорной срСдС. Бюда относятся Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ InterlockedIncrement, InterlockedDecrement, InterlockedExcbange ΠΈ Interlocked-CompareExchange. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, функция InterlockedDecrement, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСфикс Ρ…86-инструкции lock (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, lock xadd) для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ многопроцСссорной ΡˆΠΈΠ½Ρ‹ Π½Π° врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вычитания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСссор, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΡ‚ ΠΆΠ΅ участок памяти, Π½Π΅ смог Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свою ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ записью ΠΈΡ… Π½ΠΎΠ²ΠΎΠ³ΠΎ (мСньшСго) значСния. Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ° Π±Π°Π·ΠΎΠ²ΠΎΠΉ синхронизации ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ядром ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ.


Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, примСняСмый ядром для Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² многопроцСссорных систСмах, называСтся спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ (spinlock). Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° β€” это Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ², сопоставлСнный с ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ глобальной структурой Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€ΠΎΠ΄Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ DPC (рис. 3-24).

ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ…ΠΎΠ΄ΠΎΠΌ Π² Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· критичСских сСкций, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½Π° рис. 3-24, ядро Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ DPC Если спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎΠΊΠ° занята, ядро ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ достигнСт успСха. Π’Π΅Ρ€ΠΌΠΈΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ·-Π·Π° повСдСния ядра (ΠΈ соотвСтствСнно процСссора), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ «крутится» (spin) Π² Ρ†ΠΈΠΊΠ»Π΅, повторяя ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ.

Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ…, находятся Π² глобальной памяти. Код для ΠΈΡ… установки ΠΈ снятия написан Π½Π° языкС ассСмблСра для максимального быстродСйствия. Bo ΠΌΠ½ΠΎΠ³ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ… спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° рСализуСтся Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ test-and-set, которая провСряСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ устанавливаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, выполняя всСго ΠΎΠ΄Π½Ρƒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ установкой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

ВсСм спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ° ядра Π² Windows Π½Π°Π·Π½Π°Ρ‡Π΅Π½ IRQL, всСгда ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π½ΡŽ Β«DPC/dispatchΒ» ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ пытаСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, всС дСйствия Π½Π° этом ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ IRQL Π½Π° Π΄Π°Π½Π½ΠΎΠΌ процСссорС ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ диспСтчСризация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² осущСствляСтся ΠΏΡ€ΠΈ ΡƒΡ€ΠΎΠ²Π½Π΅ Β«DPC/dispatchΒ», ΠΏΠΎΡ‚ΠΎΠΊ, ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ вытСсняСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊΠ΄Π°Π½Π½Ρ‹ΠΉ IRQL маскируСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ диспСтчСризации. Вакая маскировка Π½Π΅ Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ критичСской сСкции ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ обСспСчиваСт быстроС Π΅Π΅ снятиС. Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ядрС с большой ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ врСмя.


ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π• ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ IRQL β€” достаточно эффСктивный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ синхронизации для однопроцСссорных систСм, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ установки ΠΈ снятия спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² однопроцСссорных вСрсиях HAL Π½Π° самом Π΄Π΅Π»Π΅ просто ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ ΠΈ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡŽΡ‚ IRQL.


Π―Π΄Ρ€ΠΎ прСдоставляСт доступ ΠΊ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы Ρ‡Π΅Ρ€Π΅Π· Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ядра, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ KeAcqui-reSpinlock ΠΈ KeReleaseSpinlock. НапримСр, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ устройств Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ систСма Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»Π° Π΅Π΄ΠΈΠ½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ доступ ΠΊ рСгистрам устройства ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ структурам Π΄Π°Π½Π½Ρ‹Ρ… со стороны лишь ΠΎΠ΄Π½ΠΎΠΉ части Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСссора). Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ β€” ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ядра Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ ограничСния Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΡ… ΠΊΠΎΠ΄. Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, ΠΈΡ… IRQL всСгда Ρ€Π°Π²Π΅Π½ Β«DPC/dispatchΒ», поэтому ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ²ΡˆΠΈΠΉ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΊΡ€Π°Ρ…Ρƒ систСмы, Ссли попытаСтся Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ диспСтчСризации ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ страницы.


Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ с очСрСдями

B Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях вмСсто стандартной спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ примСняСтся особый Ρ‚ΠΈΠΏ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ β€” с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ (queued spinlock). Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ Π»ΡƒΡ‡ΡˆΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π² многопроцСссорных систСмах, Ρ‡Π΅ΠΌ стандартная. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ лишь стандартныС спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° конкурСнция Π·Π° спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ оТидаСтся Π½ΠΈΠ·ΠΊΠΎΠΉ.

Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ: процСссор, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, которая Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ занята, ставит свой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ с этой спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ. Освободив спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π²ΡˆΠΈΠΉ Π΅Π΅ процСссор ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚ΠΎΠΌΡƒ процСссору, Ρ‡Π΅ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ стоит Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ процСссор, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ Π·Π°Π½ΡΡ‚ΡƒΡŽ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, провСряСт статус Π½Π΅ самой спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π° Ρ„Π»Π°Π³Π° Ρ‚ΠΎΠ³ΠΎ процСссора, Ρ‡Π΅ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ располагаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ прямо ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΆΠ΄ΡƒΡ‰Π΅Π³ΠΎ процСссора.

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ устанавливаСт Ρ„Π»Π°Π³ΠΈ, Π° Π½Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° слСдствия. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ интСнсивный Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, связанный с мСТпроцСссорной синхронизациСй. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, вмСсто случайного Π²Ρ‹Π±ΠΎΡ€Π° процСссора ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ рСализуСтся Ρ‡Π΅Ρ‚ΠΊΠΈΠΉ порядок спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ FIFO (Β«ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ вошСл, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅Π»Β»). Π’Π°ΠΊΠΎΠΉ порядок позволяСт Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π±ΠΎΠ»Π΅Π΅ согласованной Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСссоров, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ.


Windows опрСдСляСт ряд Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ с очСрСдями, сохраняя ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π½ΠΈΡ… Π² массивС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТится Π² Π±Π»ΠΎΠΊΠ΅ PCR (processor control region) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСссора. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ KeAcquireQueuedSpinlock с индСксом Π² массивС PCR, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ сохранСн ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° эту спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ растСт ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ появлСния Π½ΠΎΠ²Ρ‹Ρ… вСрсий ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΡ… индСксов публикуСтся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Ntddk.h, поставляСмом с DDK.


Π­ΠšΠ‘ΠŸΠ•Π Π˜ΠœΠ•ΠΠ’: просмотр Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ с очСрСдями

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° состояниСм Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ с очСрСдями, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ !qlock ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° ядра. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ смысл лишь Π² многопроцСссорной систСмС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² однопроцСссорной вСрсии HAL спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. B ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ (ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ Π² Windows 2000) спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… диспСтчСра ядра удСрТиваСтся процСссором Π½ΠΎΠΌΠ΅Ρ€ 1, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ этого Ρ‚ΠΈΠΏΠ° Π½Π΅ Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½Ρ‹ (ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… диспСтчСра ядра см. Π³Π»Π°Π²Ρƒ 6).