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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QNX/UNIX: Анатомия ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 67

Автор ОлСг Π¦ΠΈΠ»ΡŽΡ€ΠΈΠΊ

18

Π ΡƒΡΡΠΊΠΎΡΠ·Ρ‹Ρ‡Π½ΡƒΡŽ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, ΠΏΡƒΡΡ‚ΡŒ ΠΈ Π½Π΅ ΡΠ°ΠΌΡƒΡŽ Π±Π»Π°Π³ΠΎΠ·Π²ΡƒΡ‡Π½ΡƒΡŽ, ΠΌΡ‹ здСсь заимствуСм ΠΈΠ· [12].

19

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

20

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

21

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ упоминаСтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° дисциплина β€” «адаптивная» (SCHED_ADAPTIVE), ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ описываСтся, Β«ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Β». Π’ΠΈΠ΄ΠΈΠΌΠΎ, это ΠΌΠΎΠΆΠ½ΠΎ отнСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ отстаСт ΠΎΡ‚ развития самой систСмы. На ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Β«QNX-Россия 2003Β» Π½Π° вопрос ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ADAPTIVE-диспСтчСризации прСдставитСли QSSL ΠΎΡ‚Π²Π΅Ρ‡Π°Π»ΠΈ Ρ‚Π°ΠΊ: Β«Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ диспСтчСризации Π±Ρ‹Π» Π² QNX 4.xx, Π° Π² QNX 6.x вмСсто Π½Π΅Π³ΠΎ Π²Π²Π΅Π΄Π΅Π½Π° Π±ΠΎΠ»Π΅Π΅ продвинутая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° SPORADIC-диспСтчСризации». Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ продвинутая спорадичСская диспСтчСризация Π½Π΅ позволяСт Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠΉ.

22

Π­Ρ‚ΠΎΡ‚ тСст ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ для Linux подсказаны ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· участников (имя Π½Π°ΠΌ нСизвСстно) обсуТдСний Π½Π° http://qnxclub.net.forum.

23

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

24

Π Π°Π·Π½ΠΈΡ†Π° выраТаСтся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ макрос pthread_cleanup_push() Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ Π² Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ скобкой Β«{Β» Π±Π΅Π· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ скобки Β«}Β», Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ pthread_cleanup_pop() закрываСтся Β«}Β», Π½Π΅ имСя ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки. Π­Ρ‚ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°Ρ€Π°ΠΌΠΈ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ лСксичСская ошибка, обнаруТиваСмая компилятором.

25

ΠœΡ‹ ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ Π°ΠΊΡ†Π΅Π½Ρ‚ Π½Π° этом мСстС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сущСствуСт «красивая народная Π»Π΅Π³Π΅Π½Π΄Π°Β» (ΠΈ это ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ встрСчаСтся ΠΏΠΎΡ€ΠΎΠΉ ΠΈ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅), Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π΅ выполнСния Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ эффСктивнСС (Π² смыслС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста), Ρ‡Π΅ΠΌ процСссы.

26

Π—Π΄Π΅ΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ Ρ„ΠΎΡ€ΠΌΠ° Β«Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β»: Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ дСструктор Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Но ΠΈΠΌΠ΅Π½Π½ΠΎ Π² своСм ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ Π²ΠΈΠ΄Π΅ это ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‰Π°Ρ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

27

ИмСнно поэтому, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, стандарту POSIX Ρ‚Π°ΠΊ слоТно ΠΎΡ€Π³Π°Π½ΠΈΡ‡Π½ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… с нововвСдСниями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

28

НаличиС ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок послС ΠΈΠΌΠ΅Π½ΠΈ сигнала β€” ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ для этих сигналов рСакция ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ процСсса; Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ (+) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для этих сигналов прСдусмотрСно созданиС Π΄Π°ΠΌΠΏΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ (-) β€” для этих сигналов Π΄Π°ΠΌΠΏ Π½Π΅ создаСтся. Π’ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках послС ΠΈΠΌΠ΅Π½ΠΈ сигнала ΡƒΠΊΠ°Π·Π°Π½ΠΎ числСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π΄Π°Π½Π½ΠΎΠΌΡƒ сигналу, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² QNX.

29

ВсС это ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описывался Π²Ρ‹ΡˆΠ΅.

30

БпСцификация XSI Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ процСсс использовал Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅ sa_handler, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅ sa_sigaction, Π½ΠΎ Π½Π΅ ΠΎΠ±Π° поля ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ (Π² случаС «классичСской» структуры sigaction, см. Π²Ρ‹ΡˆΠ΅). РСализация QNX Π·Π° счСт объСдинСния Π΄Π²ΡƒΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ union обСспСчиваСт это Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ автоматичСски, хотя опрСдСлСния ΠΏΡ€ΠΈ этом становятся нСсколько Π±ΠΎΠ»Π΅Π΅ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌΠΈ.

31

МодСль ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сигналов Π²Π²Π΅Π΄Π΅Π½Π° Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для обСспСчСния сигналов Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСна Π½ΠΈΠΆΠ΅.

32

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²ΠΈΠ΄Π° sigaction act = { &catchint, 0, (sigset_t)0};, Π±ΡƒΠ΄ΡƒΡ‚ зависимыми ΠΎΡ‚ систСмы ΠΈΠ·-Π·Π° описанных Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ опрСдСлСния struct sigaction Π² Ρ€Π°Π·Π½Ρ‹Ρ… ОБ UNIX.

33

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π£. БтивСнса Π² QNX Π² чистом Π²ΠΈΠ΄Π΅ Π½Π΅ удастся β€” ΠΎΠ½ΠΎ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΏΠΎ сигналу. Π’ΠΎΠ½ΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· этого Ρ„Π°ΠΊΡ‚Π° интСрСсСн сам ΠΏΠΎ сСбС, Π½ΠΎ ΠΎΠ½ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ нашСго рассмотрСния. ΠœΡ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° это ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ лишний Ρ€Π°Π· ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°ΠΊΡ†Π΅Π½Ρ‚ Π½Π° достаточно ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹Ρ… отличиях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ QNX ΠΎΡ‚ схСм POSIX (ΠΈΠ»ΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ эти схСмы ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ОБ).

34

Ѐункция SignalProcmask() ΠΈΠΌΠ΅Π΅Ρ‚ свой Ρ€Π΅Π΅Π½Ρ‚Π΅Ρ€Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ (бСзопасный Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…) эквивалСнт: SignalProcmask_r().

35

И здСсь вопрос Π½Π΅ Π² ΠΏΠ»Π°Π³ΠΈΠ°Ρ‚Π΅. Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π . ΠšΠ΅Ρ€Ρ‚Π΅Π½ Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя сотрудничал с QSSL ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ части написания Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, поэтому ΠΎΠ½Π° Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ слСдуСт Π΅Π³ΠΎ ΠΌΠ°Π½Π΅Ρ€Π΅ излоТСния, хотя Π±ΠΎΠ»Π΅Π΅ поздняя ΠΊΠ½ΠΈΠ³Π° Π . ΠšΠ΅Ρ€Ρ‚Π΅Π½Π° [1] ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π° Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Π΄ΠΎΡ…ΠΎΠ΄Ρ‡ΠΈΠ²Π΅Π΅.

36

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ SyncMutexRevive() ΠΈ SyncMutexRevive_r(), ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вторая являСтся потокобСзопасной Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠΉ, ΠΊΠ°ΠΊ это ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Ρ‚ΠΎΠ»ΡŒΠΊΠΎ способом увСдомлСния ΠΎΠ± ошибкС: пСрвая Ρ„ΠΎΡ€ΠΌΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ -1 Π² случаС ошибки ΠΈ устанавливаСт errno, Π° вторая нСпосрСдствСнно Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки.

37

Π—Π°Π±Π°Π²Π½ΠΎ! Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ± исчСрпании количСства рСкурсивных Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠ² для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°. Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ нСсоотвСтствиС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ синхронизации.

38

ЕстСствСнно, ΠΏΠΎΡ‚ΠΎΠΊ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² процСсса, Π½ΠΎ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ описания Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями сформулированы Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ процСссов, ΠΈ ΠΌΡ‹ Π½Π΅ станСм ΠΎΡ‚Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ этой Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ обусловлСно, скорСС, ΠΏΡ€Π΅Π΅ΠΌΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ рСализациями ОБ QNX β€” 4.X ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠΌΠΈ, Ρ‚.ΠΊ. Π»ΠΎΠ³ΠΈΠΊΠ° функционирования ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями остаСтся практичСски Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° протяТСнии Π±ΠΎΠ»Π΅Π΅ 20 Π»Π΅Ρ‚ развития Π»ΠΈΠ½ΠΈΠΈ QNX.

39

Как ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ spawn*() ΠΈ exec*(), API ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями прСдоставляСт Ρ†Π΅Π»Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ суффиксами ΠΈΠΌΠ΅Π½ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

40

Π’Ρ‹ спроситС, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ thread_pool_create(), ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ thread_pool_t*, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ thread_pool_start() ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ void*? Π­Ρ‚ΠΎ ΠΈΠ»ΠΈ Π½Π΅Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² QNX, ΠΈΠ»ΠΈ глубокая сСрмяТная ΠΏΡ€Π°Π²Π΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ.

41

Π­Ρ‚Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ «сразу» ΠΈ Π½Π΅ случайно: Π΅Π΅ идСология практичСски слоТилась Π·Π° ΠΏΠΎΡ‡Ρ‚ΠΈ 20 Π»Π΅Ρ‚ развития систСмы QNX, Π½ΠΎ Π½Π΅ Π±Ρ‹Π»Π° прСдставлСна Π² Π²ΠΈΠ΄Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ². Π’ QNX 6.X ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ написаниСм ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

42

Π’ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ доступСн прСкрасный ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ΠΎΠΌ Π—Π°ΠΉΡ†Π΅Π²Ρ‹ΠΌ ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π‘Π΅Ρ€Π³Π΅Π΅ΠΌ ΠœΠ°Π»Ρ‹ΡˆΠ΅Π²Ρ‹ΠΌ: http://qnxclub.net/files/articles/resmgr/resmgr.pdf.gz.

43

Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… процСссах QNX 4 ΠΎΠ±ΠΌΠ΅Π½ Ρ‚ΠΎΠΆΠ΅ организовывался ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, просто Ρ‚Π°ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ понятий «процСсс» ΠΈ Β«ΠΏΠΎΡ‚ΠΎΠΊΒ» Π½Π΅ ΠΈΠΌΠ΅Π»ΠΎ смысла ΠΈ поэтому Π²ΡΡŽΠ΄Ρƒ использовался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «процСсс».