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

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

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

И Π² тСхничСской Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ QNX, ΠΈ Π² ΠΊΠ½ΠΈΠ³Π΅ Π . ΠšΠ΅Ρ€Ρ‚Π΅Π½Π° [1] ΠΌΠ½ΠΎΠ³ΠΎ страниц ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ описанию Π»ΠΎΠ³ΠΈΠΊΠΈ процСссов, ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², синхронизации ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π²Π΅Ρ‰Π°ΠΌ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… аллСгоричСских Π°Π½Π°Π»ΠΎΠ³ΠΈΠΉ: ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ пользованиС Π²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚ΠΎΠΉ, ΠΊΡƒΡ…Π½Π΅ΠΉ... Если ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Π°Π»Π»Π΅Π³ΠΎΡ€ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡ…ΠΎΠ΄Ρ‡ΠΈΠ²Ρ‹ для качСствСнного описания ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ происходящСго (Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‚Π°ΠΊ ΠΈ Π΅ΡΡ‚ΡŒ), Ρ‚ΠΎ для ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ «опСрационная систСма β€” процСсс — ΠΏΠΎΡ‚ΠΎΠΊΒ» ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ сущСствСнно Π±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΡƒΡŽ Π°Π»Π»Π΅Π³ΠΎΡ€ΠΈΡŽ: Β«Π°ΠΊΠ²Π°Ρ€ΠΈΡƒΠΌΠ½ΠΎΠ΅ хозяйство». Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ:

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

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

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

‒ ВсС ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ рСсурсы (кислород, ΠΊΠΎΡ€ΠΌ, свСт) ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ нСпосрСдствСнно ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ распрСдСлСния (опСрационная систСма выдСляСт рСсурсы процСссу Π² Ρ†Π΅Π»ΠΎΠΌ). ΠžΠ±ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (ΠΏΠΎΡ‚ΠΎΠΊΠΈ) ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ Π·Π° распрСдСлСниС ΠΎΠ±Ρ‰ΠΈΡ… рСсурсов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° основании своих характСристик (ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ²) ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ (дисциплины) распрСдСлСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ «личностных» характСристик: Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ, быстроты Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ ΠΈ двиТСния ΠΈ Ρ‚.Π΄.

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

ΠžΡ‚ΡΡŽΠ΄Π° ΠΈ происходят ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ объСдинСния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² создания ΠΈ манипулирования процСссами ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Β«ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡ€Ρ‹ΡˆΠ΅ΠΉΒ» (Π΅Π΄ΠΈΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ). НапримСр, Π² ОБ Linux созданиС ΠΈ процСсса (

fork()
), ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° (
pthread_create()
) свСли ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ систСмному Π²Ρ‹Π·ΠΎΠ²Ρƒ
_clone()
, Ρ‡Ρ‚ΠΎ явилось ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ»Π»ΡŽΠ·ΠΎΡ€Π½ΠΎΠΉ эйфории, связанной с нСпонятной, мифичСской Β«Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽΒ».

Усилия ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π»Π΅Ρ‚ Π±Ρ‹Π»ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Ρ€Π°Π· Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этих ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², Π»ΠΈΠΊΠ²ΠΈΠ΄Π°Ρ†ΠΈΡŽ этой «гибкости» ΠΈ восстановлСниС POSIX-ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠžΡ‚ΡΡŽΠ΄Π° ΠΆΠ΅ Π²Ρ‹Ρ‚Π΅ΠΊΠ°ΡŽΡ‚ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ послСдних Π»Π΅Ρ‚ Π² области Π½ΠΎΠ²Ρ‹Ρ… «экзотичСских» ОБ, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° сблиТСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ процСсса ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ создания Π½Π΅ΠΊΠΎΠΉ Β«Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΎΠΉΒ» субстанции, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ процСсса ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ссли Ρ‚ΠΎΠ³ΠΎ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ программист (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания). По Π½Π°ΡˆΠ΅ΠΌΡƒ мнСнию, идСя Β«Π³ΠΈΠ±Ρ€ΠΈΠ΄ΠΈΠ·Π°Ρ†ΠΈΠΈΒ» достаточно ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π° ΠΈ согласно нашСй Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° созданиС Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ, Π² Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ своСй части Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ Π°ΠΊΠ²Π°Ρ€ΠΈΡƒΠΌ, Π° Π² Π·Π°Π΄Π½Π΅ΠΉ β€” Ρ€Ρ‹Π±Ρƒ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ Π΄Π°ΠΆΠ΅ ΡΡ‚Ρ€Π°ΡˆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ русалка…

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

По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ нашС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ любом порядкС Π΅Π³ΠΎ «развСртывания» ΠΎΠ±Ρ€Π΅Ρ‡Π΅Π½ΠΎ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Β«Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒΒ». Π˜Ρ‚Π°ΠΊ, слСдуя слоТившСйся Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ, Π½Π°Ρ‡Π½Π΅ΠΌ с рассмотрСния процСссов.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»Π½ΠΎ описано Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ ΠΏΠΎ UNIX, Ρ‡Ρ‚ΠΎ здСсь ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ лишь минимально Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π±Π΅Π³Π»Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€, ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… особСнностях ОБ QNX.

ВсякоС рассмотрСниС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ систСмы понятий. Π˜Π½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ясноС понятиС процСсса Π½Π΅ Ρ‚Π°ΠΊ просто поддаСтся Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ. ΠŸΡ€ΠΎΡ†ΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ (Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ качСствСнноС) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄Π°Π΅Ρ‚ РобачСвский [3]:

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ², Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ исходных тСкстов [8], ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ собствСнно выполняСмый Ρ„Π°ΠΉΠ». Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, опСрационная систСма сначала Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ срСду выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΡƒΠ΄Π° относятся рСсурсы памяти, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ доступа ΠΊ устройствам Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ систСмным рСсурсам, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ услуги ядра.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ всСгда содСрТит хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± исполняСмом, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ΄Π΅. Для процСссов, исходный ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Π½Π° языкС C/C++, Π³Π»Π°Π²Π½Ρ‹ΠΌ потокомпроцСсса являСтся ΠΏΠΎΡ‚ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ исполняСтся функция, Ρ‚Π΅ΠΊΡΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ описанная ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ

main()
. Код ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ процСсса Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π² адрСсном пространствСпроцСсса. Если опСрационная систСма ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° (нашС рассмотрСниС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ x86) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ MMU ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ адрСсного пространства Π½Π° Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ собствСнноС ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство ΠΈ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ возмоТности нСпосрСдствСнно ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² адрСсноС пространство Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ процСсса.

Π›ΡŽΠ±ΠΎΠΉ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 32Β 767 (для QNX вСрсии 6.2). Π‘ΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для выполнСния любого ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² процСсса, Π° Ρ‚Π°ΠΊΠΆΠ΅ контСкст Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ выполняСмого ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ контСкстом процСсса.

Богласно Ρ€Π°Π½Π½ΠΈΠΌ «каноничСским» спСцификациям UNIX [3] ОБ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 4095 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов (Ρ‚ΠΎΡ‡Π½Π΅Π΅ 4096, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… 0-Π²ΠΎΠΉ прСдставляСт собой процСсс, Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ ОБ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π² дальнСйшСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ядра). Π’ΠΎ всСй Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ОБ QNX Π½Π°ΠΌ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Но Ссли ΠΈΠ· этого дСлаСтся Β«Ρ‚Π°ΠΉΠ½Π° мадридского Π΄Π²ΠΎΡ€Π°Β», Ρ‚ΠΎ наша Π·Π°Π΄Π°Ρ‡Π° β€” Π½Π°ΠΉΡ‚ΠΈ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

int main(int argc, char* argv[]) {

Β unsigned long n = 1;

Β pid_t pid;

Β while((pid = fork()) >= 0) {

Β  n++;

Β  if (pid > 0) {