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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ядра LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 55

Автор Π ΠΎΠ±Π΅Ρ€Ρ‚ Π›Π°Π²

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Linux сСмафоры (semaphore) β€” это Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСводят процСссы Π² состояниС оТидания. Когда Π·Π°Π΄Π°Π½ΠΈΠ΅ пытаСтся Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ сСмафор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ удСрТиваСтся, сСмафор ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ это Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ оТидания (wait queue) ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ это Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² состояниС оТидания (sleep). Когда процСссы[49], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ сСмафор, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ оТидания возвращаСтся ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ сСмафор.

Π”Π°Π²Π°ΠΉΡ‚Π΅ снова возвратимся ΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Π΄Π²Π΅Ρ€ΠΈ ΠΈ ΠΊΠ»ΡŽΡ‡Π°. Когда Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π²Π΅Ρ€ΡŒ, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΄Π²Π΅Ρ€ΠΈ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ ΠΈ Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΊ Π΄Π²Π΅Ρ€ΠΈ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ. Π’ этом случаС ΠΎΠ½ записываСт своС имя Π² список Π½Π° Π΄Π²Π΅Ρ€ΠΈ ΠΈ лоТится ΠΏΠΎΡΠΏΠ°Ρ‚ΡŒ.

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

Из Ρ‚Π°ΠΊΠΎΠ³ΠΎ повСдСния сСмафоров, связанного с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ процСссов Π² состояниС оТидания, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ интСрСсныС Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

β€’ Π’Π°ΠΊ ΠΊΠ°ΠΊ задания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‚ ΠΏΡ€ΠΈ Π·Π°Ρ…Π²Π°Ρ‚Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, пСрСводятся Π² состояниС оТидания ΠΈ Π² этом состоянии ΠΆΠ΄ΡƒΡ‚, ΠΏΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСна, сСмафоры Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

β€’ Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, сСмафоры Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ процСссов Π² состояниС оТидания ΠΌΠΎΠ³ΡƒΡ‚ "ΠΏΠ΅Ρ€Π΅Π²Π΅ΡΠΈΡ‚ΡŒ" врСмя, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ удСрТиваСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°.

β€’ Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния Π²ΠΎ врСмя ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΏΡ€ΠΈ Π·Π°Ρ…Π²Π°Ρ‚Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ находится Π² состоянии оТидания, Ρ‚ΠΎ сСмафоры ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² контСкстС процСсса. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ прСрывания ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ Π½Π΅ управляСтся.

β€’ ΠŸΡ€ΠΈ ΡƒΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠΈ сСмафора (хотя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ этого) процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² состояниС оТидания. Π­Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΡƒΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ ситуации, ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс попытаСтся Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ (ΠΎΠ½ просто ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС оТидания, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ процСссу).

β€’ ΠŸΡ€ΠΈ Π·Π°Ρ…Π²Π°Ρ‚Π΅ сСмафора нСльзя ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² состояниС оТидания, оТидая Π½Π° освобоТдСниС сСмафора, Π° ΠΏΡ€ΠΈ ΡƒΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠΈ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² состояниС оТидания ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ нСльзя.

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

ПослСдняя полСзная функция сСмафоров β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любоС количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ сСмафор. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ заданию Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, количСство Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ сСмафор, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ сСмафора. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ называСтся счСтчиком использования (usage count) ΠΈΠ»ΠΈ просто счСтчиком (count). НаиболСС часто встрСчаСтся ситуация, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ΅ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ сСмафор, Ρ€Π°Π²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΈ для спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС счСтчик использования Ρ€Π°Π²Π΅Π½ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ ΠΈ сСмафоры Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ сСмафорами (binary semaphore) (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ совсСм Π½ΠΈΠΊΠ΅ΠΌ Π½Π΅ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ) ΠΈΠ»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (mutex, ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ) (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ доступ β€” mutual exclusion). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, счСтчику ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, большСС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. Π’ этом случаС сСмафор называСтся счСтным сСмафором (counting semaphore, сСмафор-счСтчик), ΠΈ ΠΎΠ½ допускаСт количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π½Π΅ большСС Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика использования. Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹-счСтчики Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для обСспСчСния Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ доступа, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ нСскольким ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ выполнСния ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² критичСском участкС. ВмСсто этого ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для установки Π»ΠΈΠΌΠΈΡ‚ΠΎΠ² Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π’ ядрС ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ°Π»ΠΎ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ сСмафор, Ρ‚ΠΎ, скорСС всСго, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ (сСмафор со счСтчиком, Ρ€Π°Π²Π½Ρ‹ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅).

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹ Π±Ρ‹Π»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ЭдсгСром Π’Π°ΠΉΠ±ΠΎΠΌ ДСйкстрой[50] (Edsger Wybe Dijkstra) Π² 1968 Π³ΠΎΠ΄Ρƒ ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ. Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π΅ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ P() ΠΈ V(), Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… происходит ΠΎΡ‚ голландских слов Proben (Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) ΠΈ Verhogen (Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚). ПозТС эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Ρ‡Π°Π»ΠΈ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ down() ΠΈ up() соотвСтствСнно.

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Linux ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ down() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ сСмафор ΠΏΡƒΡ‚Π΅ΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π΅Π³ΠΎ счСтчика Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого счСтчика большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° захватываСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² критичСский участок. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика мСньшС нуля, Ρ‚ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ помСщаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ оТидания ΠΈ процСссор ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Об использовании этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ говорят Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π³Π»Π°Π³ΠΎΠ»Π°β€” сСмафор опускаСтся (down) для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ. ΠœΠ΅Ρ‚ΠΎΠ΄ up() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ сСмафор послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния критичСского участка. Π­Ρ‚Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ поднятиСм (upping) сСмафора.

ПослСдний ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° значСния счСтчика. Если ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ оТидания сСмафора Π½Π΅ пуста, Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π°Π΄Π°Π½ΠΈΠΉ этой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ возвращаСтся ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΈ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сСмафор.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ инициализация сСмафоров

РСализация сСмафоров зависит ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ„Π°ΠΉΠ»Π΅ <asm/semaphore.h>. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° struct semaphore прСдставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° сСмафор. БтатичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сСмафоров выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

static DECLARE_SEMAPHORE_GENERIC(name, count);

Π³Π΄Π΅ name β€” имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ сСмафора, a count β€” счСтчик сСмафора. Π‘ΠΎΠ»Π΅Π΅ короткая запись для создания Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (mutex), которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто, ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄.

static DECLARE_MUTEX(name);

Π³Π΄Π΅ name β€” это снова имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° сСмафор. Π§Π°Ρ‰Π΅ всСго сСмафоры ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ динамичСски, ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… структур Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСмафора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся динамичСски ΠΈ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСпрямая ссылка Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

sema_init(sem, count);

Π³Π΄Π΅ sem β€” это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, a count β€” счСтчик использования сСмафора. Аналогично для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСски создаваСмой Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

init_MUTEX(sem);

НСизвСстно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ слово "mutex" Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ init_MUTEX() Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ большими Π±ΡƒΠΊΠ²Π°ΠΌΠΈ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ слово "init" ΠΈΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sema_init() Ρ‚Π°ΠΊΠΈΡ… особСнностСй Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ясно, Ρ‡Ρ‚ΠΎ это выглядит Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, ΠΈ я ΠΏΡ€ΠΈΠ½ΠΎΡˆΡƒ свои извинСния Π·Π° это нСсоотвСтствиС. НадСюсь, Ρ‡Ρ‚ΠΎ послС прочтСния Π³Π»Π°Π²Ρ‹ 7 Π½ΠΈ Ρƒ ΠΊΠΎΠ³ΠΎ ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ символам ядра.