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

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

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

Помимо статичСских спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ с очСрСдями, опрСдСляСмых глобально, ядра Windows XP ΠΈ Windows Server 2003 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ динамичСски создаваСмыС спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ с очСрСдями. Для ΠΈΡ… создания ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ KeAcquireInStackQueuedSpinlock ΠΈ KeReleaseInStackQueuedSpin-lock. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколькими ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, Π² Ρ‚ΠΎΠΌ числС диспСтчСром кэша, диспСтчСром ΠΏΡƒΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы (executive pool manager) ΠΈ NTFS. УпомянутыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² DDK для сторонних Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ².

KeAcquireInStackQueuedSpinlock ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру Π΄Π°Π½Π½Ρ‹Ρ… спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ являСтся структурой Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ядро Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состоянии Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π² частности свСдСния ΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠ± ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ процСссоров, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… освобоТдСния этой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.


Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмС

Π―Π΄Ρ€ΠΎ прСдоставляСт ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ синхронизации, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ для Π±ΠΎΠ»Π΅Π΅ слоТных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для добавлСния ΠΈ удалСния элСмСнтов ΠΈΠ· ΠΎΠ΄Π½ΠΎ- ΠΈ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… связанных списков. K Ρ‚Π°ΠΊΠΈΠΌ функциям, Π² частности, относятся ExfoterlockedPopEntryList ΠΈ ExInterlockedPushEntryList (для ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… связанных списков), ExInterlockedInsertHeadList ΠΈ ExInter-lockedRemoveHeadList (ддя Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… связанных списков). ВсС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ стандартной спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ядрС ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°Ρ… устройств.


Бинхронизация ΠΏΡ€ΠΈ Π½ΠΈΠ·ΠΊΠΎΠΌ IRQL

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

Однако спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° лишь частично удовлСтворяСт потрСбности ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы Π² синхронизации. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ остановку процСссора, ΠΎΠ½Π° примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π΄Π²ΡƒΡ… условиях:


β€’ трСбуСтся Π½Π΅ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ рСсурсам Π±Π΅Π· слоТного взаимодСйствия с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ;

β€’ ΠΊΠΎΠ΄ критичСской сСкции нСльзя Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² страничный Ρ„Π°ΠΉΠ», ΠΎΠ½ Π½Π΅ ссылаСтся Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ памяти, Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ внСшниС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ систСмныС сСрвисы) ΠΈ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ прСрывания ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‰ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ограничСния нСльзя ΡΠΎΠ±Π»ΡŽΡΡ‚ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ…. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ систСма Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ синхронизации, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ Ρ€Π΅ΠΆΠΈΠΌΡƒ.

БущСствуСт нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² синхронизации, примСняСмых, ΠΊΠΎΠ³Π΄Π° спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ годятся:

β€’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ диспСтчСра ядра (kernel dispatcher objects);

β€’ быстрыС ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ (fast mutexes) ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ (guarded mu-texes);

β€’ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ с Π·Π°Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ указатСля (push locks);

β€’ рСсурсы ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы (executive resources).


B Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 3–9 ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ возмоТности этих ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΈ ΠΈΡ… взаимосвязь с доставкой APC Ρ€Π΅ΠΆΠΈΠΌΠ° ядра.


ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ диспСтчСра ядра

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

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы Π½Π°Π·Π²Π°Π½ (Π±Π΅Π· особой Π½Π° Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹) рСсурсами ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы (executive resources). Π­Ρ‚ΠΈ рСсурсы ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ (ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°ΠΌΠΈ), Ρ‚Π°ΠΊ ΠΈ раздСляСмый доступ для чтСния (ΠΊΠΎΠ³Π΄Π° нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²-Β«Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉΒ» обращаСтся ΠΊ ΠΎΠ΄Π½ΠΎΠΉ структурС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния). Однако ΠΎΠ½ΠΈ доступны лишь ΠΊΠΎΠ΄Ρƒ Ρ€Π΅ΠΆΠΈΠΌΠ° ядра, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, нСдоступны Ρ‡Π΅Ρ€Π΅Π· Windows API. РСсурсы ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ диспСтчСра ядра, Π° скорСС структурами Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выдСляСтся прямо ΠΈΠ· Π½Π΅ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡƒΠ»Π°, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ свои спСциализированныС сСрвисы для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, освобоТдСния, запроса ΠΈ оТидания. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° рСсурсов ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ntddk.h, Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ описаны Π² DDK.

B ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ обсудим, ΠΊΠ°ΠΊ рСализуСтся ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… диспСтчСра ядра.


ОТиданиС Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… диспСтчСра ядра

ΠŸΠΎΡ‚ΠΎΠΊ синхронизируСтся с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ диспСтчСра ядра, оТидая освобоТдСния Π΅Π³ΠΎ описатСля. ΠŸΡ€ΠΈ этом ядро приостанавливаСт ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ соотвСтствСнно мСняСт состояниС диспСтчСра, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 3-25. Π―Π΄Ρ€ΠΎ удаляСт ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ пСрСстаСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.


ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π• Ha рис. 3-25 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° схСма ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° состояний с Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ состояний Β«Π³ΠΎΡ‚ΠΎΠ²Β» (ready), Β«ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Β» (waiting) ΠΈ «выполняСтся» (running) β€” ΠΎΠ½ΠΈ относятся ΠΊ оТиданию Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…. ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ состояния ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 6.


B любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ находится Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… состояний: свободном (signaled) ΠΈΠ»ΠΈ занятом (nonsignaled). Для синхронизации с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· систСмных сСрвисов оТидания, прСдоставляСмых диспСтчСром ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ слСдуСт ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹) Π½Π΅ освободился Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ядро ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² свободноС состояниС, функция KiWaitTest ядра провСряСт, ΠΆΠ΄ΡƒΡ‚ Π»ΠΈ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Π½Π΅ ΠΆΠ΄ΡƒΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Если Π΄Π°, ядро Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ· состояния оТидания, послС Ρ‡Π΅Π³ΠΎ ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ.


Π’Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΡŒ синхронизации с диспСтчСризациСй ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с использованиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° «событиС».

β€’ ΠŸΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΆΠ΄Π΅Ρ‚ Π½Π° описатСлС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° «событиС» (Ρ‚. Π΅. ΠΆΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² свободноС состояниС).

β€’ Π―Π΄Ρ€ΠΎ измСняСт состояниС ΠΏΠΎΡ‚ΠΎΠΊΠ° с Β«Π³ΠΎΡ‚ΠΎΠ²Β» Π½Π° Β«ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Β» ΠΈ добавляСт Π΅Π³ΠΎ Π² список ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΆΠ΄ΡƒΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «событиС».

β€’ Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ устанавливаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «событиС».

β€’ Π―Π΄Ρ€ΠΎ просматриваСт список ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Если условия оТидания ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ (см. ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅), ядро ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ ΠΈΠ· состояния Β«ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Β» Π² состояниС Β«Π³ΠΎΡ‚ΠΎΠ²Β». Если это ΠΏΠΎΡ‚ΠΎΠΊ с динамичСским ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, ядро ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ для выполнСния.

β€’ ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ, происходит пСрСраспрСдСлСниС процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Если ΠΏΡ€ΠΈ этом диспСтчСр ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ выполняСмого ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π² состояниС Β«Π³ΠΎΡ‚ΠΎΠ²Β», ΠΎΠ½ вытСснит ΠΏΠΎΡ‚ΠΎΠΊ с Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΈ выдаст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ.

β€’ Если Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ вытСснСниС Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· процСссоров, диспСтчСр Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ.


ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π• НСкоторыС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΈΡ… ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ продолТаСтся.


Условия ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² свободноС состояниС

Π­Ρ‚ΠΈ условия Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НапримСр, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β«ΠΏΠΎΡ‚ΠΎΠΊΒ» находится Π² занятом состоянии Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго срока своСй ΠΆΠΈΠ·Π½ΠΈ ΠΈ пСрСводится ядром Π² свободноС состояниС лишь ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ. Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ядро ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «процСсс» Π² свободноС состояниС Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ послСднСго ΠΏΠΎΡ‚ΠΎΠΊΠ° процСсса. Ho Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠ°ΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, пСрСводится Π² свободноС состояниС ΠΏΠΎ истСчСнии Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Выбирая ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ синхронизации, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². B Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 3-10 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° пСрСходят Π² свободноС состояниС ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².