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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² QNX/Neutrino 2. Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² QNX Realtime PlatformΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 51

Автор Π ΠΎΠ± ΠšΡ‘Ρ€Ρ‚Π΅Π½

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ISR

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ вопрос, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт Π²Π·ΡΡ‚ΡŒΡΡ, β€” это список Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ISR.

НСбольшоС отступлСниС. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° основных Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ написании ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ (ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Π΄ΠΎ сих ΠΏΠΎΡ€ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ) Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ISR Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² особом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ.

Одна ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‰ΠΈΡ… написаниС ISR, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ядра ISR Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ являСтся Β«ΠΏΠΎΠ»Π½ΠΎΠΏΡ€Π°Π²Π½Ρ‹ΠΌΒ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π‘ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ядра это, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‚Π°ΠΊΠΎΠΉ таинствСнный Β«Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉΒ» ΠΏΠΎΡ‚ΠΎΠΊ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ISR Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²Π° Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… манипуляций Β«Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°Β» β€” Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±ΠΌΠ΅Π½ сообщСниями, синхронизация, систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, дисковый Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄, ΠΈ Ρ‚.Π΄.

НС услоТняСт Π»ΠΈ это написаниС ISR? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ. И поэтому Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² самом Ρ‚Π΅Π»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ доступ ΠΊΠΎ всСм сСрвисам.

Π’Π°ΡˆΠΈ Ρ†Π΅Π»ΠΈ ΠΏΡ€ΠΈ написании ISR Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

β€’ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΡƒΡŽ (Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅ Π±Ρ‹Π»ΠΎ Β«transientΒ» β€” ΠΏΡ€ΠΈΠΌ. Ρ€Π΅Π΄.) ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ;

β€’ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ источник прСрывания;

β€’ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлаСт Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Вакая Β«Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Β« дСрТится Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ QNX/Neutrino обСспСчиваСт ΠΎΡ‡Π΅Π½ΡŒ быстрыС Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста. Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ смоТСтС быстро ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π² ваш ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ для выполнСния Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠΉ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ событиС для запуска ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚ΠΎΠΆΠ΅ активизируСтся ΠΎΡ‡Π΅Π½ΡŒ быстро. И ΠΈΠΌΠ΅Π½Π½ΠΎ эта философия Β«Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Π² Ρ‚Π΅Π»Π΅ ISRΒ» Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π² QNX/Neutrino ΡΡ‚ΠΎΠ»ΡŒ простыми!

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π΅Π»Π΅ ISR? Π’ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ список:

β€’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСмСйства atomic_*() (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, atomic_set());

β€’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСмСйства mem*() (Ρ‚ΠΈΠΏΠ° memcpy());

β€’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сСмСйства str*() (Ρ‚ΠΈΠΏΠ° strcmp()). ΠžΡΡ‚Π΅Ρ€Π΅Π³Π°ΠΉΡ‚Π΅ΡΡŒ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ всС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ бСзопасными β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, strdup() Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ malloc(), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мутСкс, Π° это Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ.

Π’ΠΎΠΎΠ±Ρ‰Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΡΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ строковых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм Π½Π°Π΄ΠΎ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΡ… описаниС Π² руководствС ΠΏΠΎ Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅;

β€’ InterruptMask();

β€’ InterruptUnmask();

β€’ InterruptLock();

β€’ InterruptUnlock();

β€’ InterruptDisable();

β€’ InterruptEnable();

β€’ in*() ΠΈ out*().

ОсновноС эмпиричСскоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ формулируСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ: «НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большого объСма стСка ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹Β». Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ стСковому пространству проистСкаСт ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ ISR ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ объСм стСка.

Бписок Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, бСзопасных для примСнСния Π² ISR, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ смысл β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π²Π°ΠΌ потрСбуСтся ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚ΠΈΠΏΠ° mem*() ΠΈ str*(). Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Π°ΠΌ потрСбуСтся Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ рСгистры Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… срСдств (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ значСния ΠΈΠ»ΠΈ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ источник прСрывания), Ρ‚ΠΎΠ³Π΄Π° Π²Π°ΠΌ пригодятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ· сСмСйств in*() ΠΈ out*().

А ΠΊΠ°ΠΊ насчСт ΠΎΡˆΠ°Ρ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сСмСйства Interrupt*()? Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΈΡ… ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ.

InterruptMask() ΠΈ InterruptUnmask()

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ отвСтствСнны Π·Π° маскированиС источника прСрывания Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°; это прСдохраняСт прСрывания ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ процСссору. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ источник ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ нСпосрСдствСнно Π² Ρ‚Π΅Π»Π΅ ISR. Π’ этом случаС ISR Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ InterruptMask(), Π° ΠΏΠΎΡ‚ΠΎΠΊ, послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹, β€” InterruptUnmask().

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ число Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² InterruptUnmask() Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ числу Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² InterruptMask() β€” Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π²Ρ‹ обязаны Π΄Π΅ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€ΠΎΠ²Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Ρ€Π°Π· ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ маскировано.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, Ρ‡Ρ‚ΠΎ функция InterruptAttachEvent() выполняСт InterruptMask() автоматичСски (Π² ядрС), поэтому ваш ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ InterruptUnmask().

InterruptLock() ΠΈ InterruptUnlock()

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (InterruptLock()) ΠΈ Π΄Π΅Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (InterruptUnlock()) ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎ- ΠΈΠ»ΠΈ многопроцСссорной систСмС. Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прСрывания, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ ISR (ΠΈΠ»ΠΈ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π² SMP-систСмС β€” Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ISR ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°). Когда Π²Ρ‹ сдСлаСтС Π½ΡƒΠΆΠ½Ρ‹Π΅ манипуляции с критичСскими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π²Ρ‹ смоТСтС Π΄Π΅Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прСрывания ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. ΠžΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Ρ‹ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ вмСсто извСстных Π²Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ InterruptDisable() ΠΈ InterruptEnable(), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² SMP-систСмах. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со «старыми» функциями, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΡΡ‚ΡŒ вносит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π½ΠΎ Π² однопроцСссорной систСмС ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ, поэтому я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ InterruptLock() ΠΈ InterruptUnlock().

InterruptDisable() ΠΈ InterruptEnable()

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ, эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ для Π²Ρ‹Π·ΠΎΠ²Π° инструкций cli ΠΈ sti Π² процСссорах сСрии x86, ΠΊΠΎΠ³Π΄Π° QNX/Neutrino Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠΉ ОБ.

Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со всСми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ процСссоров, Π½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΠ³ΠΎΡ€Ρ‡Π°Ρ‚ΡŒ SMP-систСмы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»ΡƒΡ‡ΡˆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ InterruptLock() ΠΈ InterruptUnlock().

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ Π²Ρ€Π΅Π΄Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² SMP-систСмС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ISR ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

РСзюмС

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с прСрываниями ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ полоТСния:

β€’ ΠΠ΅ ΠΎΡΡ‚Π°Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ прСрывания слишком Π΄ΠΎΠ»Π³ΠΎ β€” выполняйтС Π² Π½Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ объСм Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ.

β€’ ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ InterruptAttach() Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ срСдствам нСпосрСдствСнно послС прСрывания, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π΅Π΅.

β€’ ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ InterruptAttachEvent() Π²ΠΎ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях. Π―Π΄Ρ€ΠΎ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ (Π½Π° основС события, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΡ‚Π΅) для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ возникшСго прСрывания.

β€’ Π—Π°Ρ‰ΠΈΡ‰Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠ°ΠΊ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ (ΠΏΡ€ΠΈ использовании InterruptAttach()), Ρ‚Π°ΠΊ ΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° InterruptLock() ΠΈ InterruptUnlock().

β€’ ΠžΠ±ΡŠΡΠ²Π»ΡΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² качСствС посрСдников ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ volatile, Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор Π½Π΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π» ΠΈΡ… «просрочСнныС» значСния, ΡƒΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ прСрывания.

Π“Π»Π°Π²Π° 5

Администраторы рСсурсов

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ администратор рСсурсов?

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрим всС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ для ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ написания администратора рСсурса.

Администратор рСсурса β€” это просто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с рядом Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… характСристик. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ называСтся Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах β€” Β«Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Β», «устройство», Β«Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ устройства», «администратор Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°Β», «файловая систСма», ΠΈ Ρ‚.ΠΏ. Однако, Π²ΠΎ всСх случаях ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π΅ просто «администратором рСсурса») Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ сСрвиса.

Π’Π°ΠΊΠΆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ QNX/Neutrino являСтся POSIX-совмСстимой ОБ, основу прСдоставляСмой абстракции ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ спСцификации POSIX.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ администраторов рСсурсов

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡƒΠΉΡ‚ΠΈ Π² тонкости ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ°Ρ€Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π² Π½ΠΈΡ… Β«Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΡƒΡŽΡ‚ΡΡΒ» сСрвисы. Рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚) ΠΈ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ абстрактноС (Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму).

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚

Π’ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ систСмС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ сущСствуСт ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ способ программирования ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ интСрфСйсу Ρ‚ΠΈΠΏΠ° RS-232. Π­Ρ‚ΠΎΡ‚ интСрфСйс ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ряд Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… устройств, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ микросхСму UART (Universal Asynchronous Receiver Transmitter β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ асинхронный ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊ), которая ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

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

ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто «абстрагированиС» сСрвиса, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ клиСнтская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (Ρ‚Π°, которая нСпосрСдствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сСрвис) Π½Π΅ Π·Π½Π°Π΅Ρ‚ (Π΄Π° ΠΈ Π½Π΅Π·Π°Ρ‡Π΅ΠΌ Π΅ΠΉ) ΠΎ микросхСмС UART ΠΈ Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ВсС, Ρ‡Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚ клиСнтская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, β€” Ρ‡Ρ‚ΠΎ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ символа ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fprintf() Π° для ΠΏΡ€ΠΈΠ΅ΠΌΠ° символов β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fgets(). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ взаимодСйствия с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ€Ρ‚ΠΎΠΌ ΠΌΡ‹ использовали стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ POSIX.