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

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

Автор Π¦ΠΈΠ»ΡŽΡ€ΠΈΠΊ ОлСг Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡

Β exit(EXIT_SUCCESS);

}

Π”Π²Π° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ процСсса Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ симмСтричны ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ PID послС выполнСния

fork()
, ΠΎΠ½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² максимальном Ρ‚Π΅ΠΌΠΏΠ΅ Β«ΠΏΠ΅Ρ€Π΅ΠΏΠ°ΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚Β» Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ волСйболисты Π΄Π΅Π»Π°ΡŽΡ‚ это с мячом (рис. 2.2).

QNX/UNIX: Анатомия ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° - img_3.png

Рис. 2.2. Π‘ΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ΅ взаимодСйствиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Рисунок 2.2 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ взаимодСйствиС Π΄Π²ΡƒΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… процСссов: вся ΠΈΡ… Β«Ρ€Π°Π±ΠΎΡ‚Π°Β» состоит лишь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ быстрСС ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Ρƒ. Π’Π°ΠΊΡƒΡŽ схСму, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ процСссов Π² максимально высоком Ρ‚Π΅ΠΌΠΏΠ΅ (Π½Π° порядок прСвосходящСм ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ «СстСствСнной» RR-диспСтчСризации) ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² дальнСйшСм для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², называя Π΅Π΅ для простоты «симмСтричной схСмой».

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ максимально ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ прилоТСния, ΠΏΡ€ΠΈ Π΅Π³ΠΎ написании ΠΌΡ‹ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π»ΠΈ события «СстСствСнной» диспСтчСризации, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ мСсто ΠΏΡ€ΠΈ RR-диспСтчСризации ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 4 систСмных Ρ‚ΠΈΠΊΠ° (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это ~4 миллисСкунды). Как сСйчас ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, события ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ диспСтчСризации происходят с ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ порядка 1 микросСкунды, Ρ‚.e. Π² 4000 Ρ€Π°Π· Ρ‡Π°Ρ‰Π΅, ΠΈ возмущСния, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ вносимыС RR-диспСтчСризациСй, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ сущСствСнными.

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

# nice -n-19 p5 1000000

1069102 : cycles - 1234175656; on sched β€” 617

0Β Β Β Β Β Β  : cycles - 1234176052; on sched - 617

# nice -n-19 p5 100000

1003566 : cycles - 123439225; on sched β€” 617

0Β Β Β Β Β Β Β : cycles - 123440347; on sched - 617

# nice -n-19 p5 10000

1019950 : cycles - 12339084; on sched β€” 616

0Β Β Β Β Β Β  : cycles - 12341520; on sched - 617

# nice -n-19 p5 1000

1036334 : cycles - 1243117; on sched β€” 621

0Β Β Β Β Β Β Β : cycles - 1245123; on sched - 622

# nice -n-19 p5 100

1052718 : cycles - 130740; on sched β€” 653

0Β Β Β Β Β Β  : cycles - 132615; on sched - 663

Π’ΠΈΠ΄Π½Π° Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ устойчивая ΠΎΡ†Π΅Π½ΠΊΠ°, практичСски Π½Π΅ зависящая ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ числа Π°ΠΊΡ‚ΠΎΠ² диспСтчСризации, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π½Π° 4 порядка.

ΠžΡ‚Π±Ρ€ΠΎΡΠΈΠ² ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ, привносимыС ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ счСтчика Ρ†ΠΈΠΊΠ»Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° управлСния ΠΎΡ‚ процСсса ΠΊ процСссу Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ порядка 600 Ρ†ΠΈΠΊΠ»ΠΎΠ² процСссора (это порядка 1,2 микросСкунды Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ 533 ΠœΠ“Ρ†, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполнялся этот тСст).

ΠŸΠΎΡ‚ΠΎΠΊΠΈ

ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ [14]POSIX ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Β«Π»Π΅Π³ΠΊΠΈΡ… процСссов» β€” ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π³Ρ€ΡƒΠΏΠΏΠ° API

pthread_*()
). Π’Π΅Ρ…Π½ΠΈΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ программирования вмСсто ΡƒΠΆΠ΅ ΡΡ‚Π°Π²ΡˆΠΈΡ… Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ UNIX-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ часто нСдооцСниваСтся. НапримСр, использованиС
pthread_create()
вмСсто
fork()
ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π° порядки ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΉ, особСнно Π² ОБ с отсутствиСм ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² COW (copy on write) ΠΏΡ€ΠΈ создании Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² физичСских страниц RAM сСгмСнтов Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ QNX, хотя ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ COW вряд Π»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Π² ОБ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ) [4]. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: использованиС мноТСствСнных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² вмСсто ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΉ Π½Π° мноТСствС дСскрипторов Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅
select()
.

Однако ΠΎΡ‡Π΅Π½ΡŒ часто эти Π΄Π²Π΅ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹, традиционная ΠΈ потоковая, Π½Π΅ ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ·-Π·Π° нСбСзопасности (not thread safe) Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² UNIX (

fork()
,
select()
ΠΈ Π΄Ρ€.) Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС. Π’ΠΎΠ³Π΄Π° приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½Ρƒ, Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, Π½Π΅ смСшивая ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой. Или ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ, Π½ΠΎ с большой ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ случаС.

ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ любой Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ (Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ) Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ процСссора. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΎΠΌ этого Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ:

β€’Β Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ», Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ систСмой ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹

spawn()
запускаСтся Π½ΠΎΠ²Ρ‹ΠΉ процСсс ΠΈ создаСтся Π΅Π³ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΉΠΏΠΎΡ‚ΠΎΠΊ;

β€’Β Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ ΠΊΠΎΠ΄Π° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° [15]процСсса родитСля ΠΏΡ€ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ процСссов Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ

fork()
(Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°);

‒ участок ΠΊΠΎΠ΄Π°, ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (

void*()(void*)
); это ΠΎΠ±Ρ‰ΠΈΠΉ случай ΠΏΡ€ΠΈ создании Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² процСсса (ΠΏΡ€ΠΈ создании ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… процСссов) Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ
pthread_create()
. Π’Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсный для нас случай.

Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ нСявноС созданиС (Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ) ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ, ΠΊΠ°ΠΊ слСдствиС, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса. Π’ послСднСм случаС - явноС созданиС ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅, собствСнно, ΠΈ имСнуСтся «созданиСм ΠΏΠΎΡ‚ΠΎΠΊΠ°Β». Π₯отя ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ происходящСго ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²ΠΎ всСх случаях всС ΠΆΠ΅ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠšΡ€ΠΎΠΌΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π½ΡƒΠΆΠ½ΠΎ отнСсти ΠΈ Ρ‚Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ собствСнный стСк ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ΠΎ врСмя приостановки систСмой выполнСния (диспСтчСризации) ΠΊΠΎΠ΄Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сохранСния Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ рСгистров (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ рСгистры FPU, сСгмСнтныС рСгистры) ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ спСцифичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, относящихся ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, называСтся контСкстом ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, обСспСчиваСт связь ΠΏΠΎΡ‚ΠΎΠΊΠ° с Π΅Π³ΠΎ экзСмпляром собствСнных Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎ Ρ‡Π΅ΠΌ ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅. Π”Π΅Ρ‚Π°Π»ΡŒΠ½Π°Ρ структура ΠΈ объСм Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… контСкст ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самой ОБ, Π½ΠΎ ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ процСссорной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° выполняСтся (для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… ОБ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΈ QNX).

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ считаСтся, Ρ‡Ρ‚ΠΎ врСмя ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкстов ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΈ врСмя ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкстов процСссов ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, особСнно для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. [16]Однако удобства Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ стрСмлСниС ΠΊ однородности ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅ΡΠΈΡ‚ΡŒ соблазн Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ОБ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ вскорС ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ QNX.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ° (Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса!) являСтся TID (Thread ID), присваиваСмый ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΏΡ€ΠΈ Π΅Π³ΠΎ создании Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ

pthread_create()
. TID позволяСт процСссу (Π° Ρ‚Π°ΠΊΠΆΠ΅ систСмС Π² Ρ€Π°ΠΌΠΊΠ°Ρ… процСсса) ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. НумСрация TID Π² QNX начинаСтся с 1 (это всСгда Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ процСсса, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ
main()
) ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ возрастаСт ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ создания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π΄ΠΎ 32767). [17]