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

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

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

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

Когда ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСводится Π² свободноС состояниС, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ выходят ΠΈΠ· ΠΆΠ΄ΡƒΡ‰Π΅Π³ΠΎ состояния. Однако, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 3-26, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ диспСтчСра ядра ΠΈ систСмныС события Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΈΠ½Π°Ρ‡Π΅.

НапримСр, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «событиС увСдомлСния» β€” Π² Windows API ΠΎΠ½ называСтся событиСм со сбросом Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (manual reset event) β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для увСдомлСния ΠΎ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ событии. Когда этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСводится Π² свободноС состояниС, всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΆΠ΄Π΅Ρ‚ сразу нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ° Π½Π΅ освободятся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

B ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ события ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ прСдусматриваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ владСния. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ доступа ΠΊ рСсурсу, поэтому Π΅Π΄ΠΈΠ½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»Π°Π΄Π΅Ρ‚ΡŒ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠΌ. ΠŸΡ€ΠΈ освобоТдСнии ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° ядро ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² свободноС состояниС ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ для выполнСния ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ядром ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ.


Бобытия с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΈ критичСскиС сСкции

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

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

Если ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «событиС» для критичСской сСкции Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ·-Π·Π° Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ систСмной памяти, EnterCriticalSection ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ глобальноС событиС с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ β€” CritSecOutOjMemoryEvent (Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ \Ker-nel пространства ΠΈΠΌΠ΅Π½ диспСтчСра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²). Если EnterCritica amp;ection Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π° Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ CritSecOutOjMemoryEvent вмСсто стандартного события, ΠΏΠΎΡ‚ΠΎΠΊ, ΠΆΠ΄ΡƒΡ‰ΠΈΠΉ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ адрСс этой сСкции ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡. Π­Ρ‚ΠΎ обСспСчиваСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ критичСских сСкций Π΄Π°ΠΆΠ΅ Π² условиях Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти.

ΠœΡ‹ Π½Π΅ ставили сСбС Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы, Π° лишь Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π΄Π°Ρ‚ΡŒ прСдставлСниС ΠΎΠ± ΠΈΡ… Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… синхронизации. Об использовании этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Windows-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… см. ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Windows ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ Π”ΠΆΠ΅Ρ„Ρ„Ρ€ΠΈ Π ΠΈΡ…Ρ‚Π΅Ρ€Π° Β«Windows для профСссионалов».


Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π£Ρ‡Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² оТидания базируСтся Π½Π° Π΄Π²ΡƒΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… структурах Π΄Π°Π½Π½Ρ‹Ρ…: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… диспСтчСра (dispatcher headers) ΠΈ Π±Π»ΠΎΠΊΠ°Ρ… оТидания (wait blocks). ОбС эти структуры ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Ntddk.h, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ DDK. Для удобства ΠΌΡ‹ воспроизводим здСсь эти опрСдСлСния.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ диспСтчСра содСрТит Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состоянии (занят/свободСн) ΠΈ список ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΆΠ΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ список Π±Π»ΠΎΠΊΠΎΠ² оТидания, Π³Π΄Π΅ пСрСчислСны ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° диспСтчСра ядра β€” список Π±Π»ΠΎΠΊΠΎΠ² оТидания, Π³Π΄Π΅ пСрСчислСны ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. Π­Ρ‚ΠΎΡ‚ список вСдСтся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ освобоТдСнии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° диспСтчСра ядро ΠΌΠΎΠΆΠ΅Ρ‚ быстро ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΡ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. B Π±Π»ΠΎΠΊΠ΅ оТидания ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ оТидания, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ оТидания (Ссли ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). Он Ρ‚Π°ΠΊΠΆΠ΅ рСгистрируСт Ρ‚ΠΈΠΏ оТидания («любой» ΠΈΠ»ΠΈ «всС») ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ описатСлСй, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ WaitForMultipleObjects (позиция 0 β€” Ссли ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ лишь ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚).

Ha рис. 3-27 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° связь ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² диспСтчСра ядра с Π±Π»ΠΎΠΊΠ°ΠΌΠΈ оТидания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². B Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΡ‚ΠΎΠΊ 1 ΠΆΠ΄Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π’, Π° ΠΏΠΎΡ‚ΠΎΠΊ 2 β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ A ΠΈ Π’. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A освободится, ΠΏΠΎΡ‚ΠΎΠΊ 2 Π½Π΅ смоТСт Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ядро ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΆΠ΄Π΅Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. C Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΡ€ΠΈ освобоТдСнии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° B ядро сразу ΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ 1 ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ ΠΆΠ΄Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.


Π­ΠšΠ‘ΠŸΠ•Π Π˜ΠœΠ•ΠΠ’: просмотр ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ оТидания

Π₯отя ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ просмотра процСссов ΡƒΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, находится Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π² состоянии оТидания (отмСчая Π² этом случаС ΠΈ Ρ‚ΠΈΠΏ оТидания), список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ !process ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° ядра. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ !process ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π΅Ρ‚ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅-событии.

Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² отсутствии Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° списка оТидания ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ мСсто (Π½Π° ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ оТидания). Копия Π±Π»ΠΎΠΊΠ° оТидания (ΠΏΠΎ адрСсу 0x8a12a398) Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Если Π² спискС оТидания Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π² ΠΏΠΎΠ»Π΅ WaitListEntry ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° оТидания (ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ !thread ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Π±Π»ΠΎΠΊΠ΅ оТидания) для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ списку ΠΈ просмотра Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΆΠ΄ΡƒΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.


БыстрыС ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹

БыстрыС ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ (fast mutexes), Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Β«ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΒ». ΠŸΠΎΡ‡Π΅ΠΌΡƒ? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ быстрыС ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹, Ρ…ΠΎΡ‚ΡŒ ΠΈ построСны Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… событий диспСтчСра, Π² отсутствиС ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ оТидания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° «событиС» (ΠΈ соотвСтствСнно спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основан этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚). Π­Ρ‚ΠΈ прСимущСства особСнно ярко ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² многопроцСссорной срСдС. БыстрыС ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ядрС ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°Ρ… устройств.

Однако быстрыС ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ годятся, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ доставку ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… APC Ρ€Π΅ΠΆΠΈΠΌΠ° ядра. B ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π·Π°Ρ…Π²Π°Ρ‚Π° быстрых ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ²: ExAcquireFastMutex ΠΈ ExAcquire-FastMutexUnsafe. ΠŸΠ΅Ρ€Π²Π°Ρ функция Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ доставку всСх APC, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ IRQL процСссора Π΄ΠΎ уровня APC_LEVEL, Π° вторая β€” ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΈ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ доставкС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… APC Ρ€Π΅ΠΆΠΈΠΌΠ° ядра (Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ΠΌ IRQL Π΄ΠΎ уровня Β«APCΒ» ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ KeEnterCriticalRegiori). Π”Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ быстрых ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ² Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡ… нСльзя Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ рСкурсивно, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Β«ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΒ».


Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ (guarded mutexes) β€” Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²ΠΎ Windows Server 2003; ΠΎΠ½ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ быстрым ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°ΠΌ (хотя Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, KGATE). Π—Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ KeAcquireGuardedMutex, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ доставку всСх APC Ρ€Π΅ΠΆΠΈΠΌΠ° ядра Ρ‡Π΅Ρ€Π΅Π· KeEnterGuardedRegion, Π° Π½Π΅ KeEnterCritical-Region, которая Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ APC Ρ€Π΅ΠΆΠΈΠΌΠ° ядра. Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ нСдоступны Π²Π½Π΅ ядра ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² основном диспСтчСром памяти для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Ρ€ΠΎΠ΄Π΅ создания страничных Ρ„Π°ΠΉΠ»ΠΎΠ², удалСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΎΠ±Ρ‰Π΅ΠΉ памяти ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ памяти. (ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ диспСтчСрС памяти см. Π³Π»Π°Π²Ρƒ 7.)


РСсурсы ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы

РСсурсы ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы (executive resources) β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ синхронизации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ раздСляСмый (совмСстный) ΠΈ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΈ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с быстрыми ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°ΠΌΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΡŽΡ‡Π΅Π½ΠΈΡ доставки ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… APC Ρ€Π΅ΠΆΠΈΠΌΠ° ядра. Они основаны Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… диспСтчСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ. РСсурсы ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ всСй систСмС, особСнно Π² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.

ΠŸΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ рСсурс для совмСстного доступа, ΠΆΠ΄ΡƒΡ‚ Π½Π° сСмафорС, сопоставлСнном с этим рСсурсом, Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ рСсурс для монопольного доступа, β€” Π½Π° событии. Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ с Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ счСтчиком примСняСтся ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±ΡƒΠ΄ΠΈΡ‚ΡŒ всС ΠΆΠ΄ΡƒΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠΌ доступ ΠΊ рСсурсу, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этот сСмафор ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² свободноС состояниС (рСсурс Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСн ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Π·Π°Ρ…Π²Π°Ρ‚ΠΈΠ²ΡˆΠΈΠΌ Π΅Π³ΠΎ Π² монопольноС Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅). Когда ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π½ΡƒΠΆΠ΅Π½ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ занятому Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ рСсурсу, ΠΎΠ½ ΠΆΠ΄Π΅Ρ‚ Π½Π° ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ «событиС», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ освобоТдСнии события пробуТдаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².