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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX: взаимодСйствиС процСссов». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 3

Автор Уильям БтивСнс

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

Π₯отя концСпция процСссов Π² систСмах Unix ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Π΄Π°Π²Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса появилась ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Posix.1, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Pthreads, Π±Ρ‹Π» принят Π² 1995 Π³ΠΎΠ΄Ρƒ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния взаимодСйствия процСссов всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ свойствСнно использованиС ΠΎΠ±Ρ‰Π΅ΠΉ памяти). Однако ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ трСбуСтся синхронизация доступа ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ. Π’ΠΎΠΎΠ±Ρ‰Π΅, синхронизация, Π½Π΅ являясь собствСнно Ρ„ΠΎΡ€ΠΌΠΎΠΉ IPC, часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ IPC для управлСния доступом ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ.

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

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π‘ свСдСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ основныС характСристики ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ Π΄Π°Π½ΠΎ описаниС пяти основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Pthread, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… этой ΠΊΠ½ΠΈΠ³ΠΈ.

1.3. Π–ΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² IPC

МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΆΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ (persistence) любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° IPC ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ сущСствования. На рис. 1.2 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Ρ‚Ρ€ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ отнСсСны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ ТивучСсти.

Рис. 1.2. Π–ΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² IPC


1. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ IPC, ΠΆΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ опрСдСляСтся процСссом (process-persistent), сущСствуСт Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ послСдним процСссом, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π΅Ρ‰Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ (pipes, FIFO).

2. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ IPC, ΠΆΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ опрСдСляСтся ядром (kernel-persistent), сущСствуСт Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ядра ΠΈΠ»ΠΈ Π΄ΠΎ явного удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний стандарта System V, сСмафоры ΠΈ раздСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π–ΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ сообщСний Posix, сСмафоров ΠΈ раздСляСмой памяти Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ядром, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой Π² зависимости ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

3. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ IPC, ΠΆΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ опрСдСляСтся Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой (filesystem-persistent), сущСствуСт Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ явно. Π•Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сохраняСтся Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ядра. ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний Posix, сСмафоры ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ с ΠΎΠ±Ρ‰ΠΈΠΌ доступом ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ этим свойством, Ссли ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (Ρ‚Π°ΠΊ Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ всСгда).

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ТивучСсти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° IPC, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π½Π΅ всСгда ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°. НапримСр, Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠ°Π½Π°Π»Π΅ (pipe) ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ядром, Π½ΠΎ ΠΆΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΊΠ°Π½Π°Π»ΠΎΠ² опрСдСляСтся процСссами, Π° Π½Π΅ ядром, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ послСдний процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠ°Π½Π°Π» Π±Ρ‹Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ Π΅Π³ΠΎ, ядро сбросит всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ ΠΊΠ°Π½Π°Π». Аналогично, хотя ΠΊΠ°Π½Π°Π»Ρ‹ FIFO ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, ΠΆΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСтся процСссами, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ послСдний процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ Π΅Π³ΠΎ.

Π’ Ρ‚Π°Π±Π». 1.1 свСдСна информация ΠΎ ТивучСсти пСрСчислСнных Ρ€Π°Π½Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² IPC.


Π’Π°Π±Π»ΠΈΡ†Π° 1.1. Π–ΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² IPC

Π’ΠΈΠΏ IPC Π–ΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ опрСдСляСт ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» (pipe) ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» (FIFO) ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π’Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Posix (mutex) ΠŸΡ€ΠΎΡ†Π΅ΡΡ Условная пСрСмСнная Posix (condition variable) ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° чтСния-записи Posix (lock) ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° записи fcntl ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний Posix (message queue) Π―Π΄Ρ€ΠΎ Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ сСмафор Posix (named semaphore) Π―Π΄Ρ€ΠΎ Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ Posix Π² памяти (memory-based semaphore) ΠŸΡ€ΠΎΡ†Π΅ΡΡ РаздСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ Posix (shared memory) Π―Π΄Ρ€ΠΎ ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний System V Π―Π΄Ρ€ΠΎ Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ System V Π―Π΄Ρ€ΠΎ ΠŸΠ°ΠΌΡΡ‚ΡŒ с ΠΎΠ±Ρ‰ΠΈΠΌ доступом System V Π―Π΄Ρ€ΠΎ Π‘ΠΎΠΊΠ΅Ρ‚ TCP (TCP socket) ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π‘ΠΎΠΊΠ΅Ρ‚ UDP (UDP socket) ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π”ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΉ сокСт Unix (Unix domain socket) ΠŸΡ€ΠΎΡ†Π΅ΡΡ

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

1.4. ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½

Если Π΄Π²Π° нСродствСнных процСсса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π²ΠΈΠ΄ IPC для ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ IPC Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ имя ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· процСссов (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ сСрвСром β€” server) ΠΌΠΎΠ³ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² β€” client) ΠΌΠΎΠ³ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ этому ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ (pipes) ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ (ΠΈ поэтому Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ нСродствСнными процСссами), Π½ΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ FIFO ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π° Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ (поэтому ΠΊΠ°Π½Π°Π»Ρ‹ FIFO ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для взаимодСйствия нСродствСнных процСссов). Для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² IPC, рассматриваСмых Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ соглашСния ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ (naming conventions). ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° IPC называСтся Π΅Π³ΠΎ пространством ΠΈΠΌΠ΅Π½ (name space). ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½ β€” Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для всСх Π²ΠΈΠ΄ΠΎΠ² IPC, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ простых ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΈΠΌΠ΅Π½Π΅ΠΌ опрСдСляСтся способ связи ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра для ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями.

Π’ Ρ‚Π°Π±Π». 1.2 свСдСны соглашСния ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² IPC.


Π’Π°Π±Π»ΠΈΡ†Π° 1.2. ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² IPC

Π’ΠΈΠΏ IPC ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½ для создания ΠΈΠ»ΠΈ открытия Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ послС открытия Posix.1 1996 Unix 98 Канал (Π‘Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ) ДСскриптор β€’ β€’ FIFO Имя Ρ„Π°ΠΉΠ»Π° (pathname) ДСскриптор β€’ β€’ Π’Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Posix (Π‘Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ) Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° pthread_mutex_t β€’ β€’ Условная пСрСмСнная Posix (Π‘Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ) Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° pthread_cond_t β€’ β€’ Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° чтСния-записи Posix (Π‘Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ) Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° pthread_rwlock_t β€’ Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° записСй fcntl Имя Ρ„Π°ΠΉΠ»Π° ДСскриптор β€’ β€’ РаздСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ Posix Posix-имя IPC ДСскриптор β€’ β€’ ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний System V ΠšΠ»ΡŽΡ‡ key_t Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ IPC System V β€’ Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ System V ΠšΠ»ΡŽΡ‡ key_t Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ IPC System V β€’ РаздСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ System V ΠšΠ»ΡŽΡ‡ key_t Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ IPC System V β€’ Π”Π²Π΅Ρ€ΠΈ (doors) Имя Ρ„Π°ΠΉΠ»Π° ДСскриптор Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ (RPC) Sun ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°/вСрсия ДСскриптор (handle) RPC Π‘ΠΎΠΊΠ΅Ρ‚ TCP IP-адрСс ΠΈ ΠΏΠΎΡ€Ρ‚ TCP ДСскриптор .1g β€’ Π‘ΠΎΠΊΠ΅Ρ‚ UDP IP-адрСс ΠΈ ΠΏΠΎΡ€Ρ‚ TCP ДСскриптор .1g β€’ Π”ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΉ сокСт Unix (domain socket) ПолноС имя Ρ„Π°ΠΉΠ»Π° ДСскриптор .1g β€’

Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ IPC содСрТатся Π² стандартС Posix.1 1996 Π³ΠΎΠ΄Π° ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π±Ρ‹Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² стандарт Unix 98. Об ΠΎΠ±ΠΎΠΈΡ… этих стандартах Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 1.7. Для сравнСния ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π² эту Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° сокСтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаны Π² [24]. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ интСрфСйс сокСтов (Application Program Interface β€” API) стандартизируСтся Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ Posix.1g ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΡΡ‚Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ стандарта Posix.1.