ΠΠ°Π±Π΅Π³Π°Ρ Π²ΠΏΠ΅ΡΠ΅Π΄, ΡΠΎΠΎΠ±ΡΠΈΠΌ, ΡΡΠΎ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΆΠ°Π»ΠΊΠΎΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°: Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΡΠΈΠ³Π½Π°Π»ΠΎΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΡ ΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ»Π°Π±ΠΎΡΡΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΈΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π·Π΄Π΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π²Π° ΠΏΠ΅ΡΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° (ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°) Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΠ΄ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΈ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠ΅ΡΠ½Π΅Π½ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°
Π‘ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄Π΅Π»ΠΎ ΠΎΠ±ΡΡΠΎΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΎΡΠ΅Π½Ρ ΡΠΊΠΎΡΠΎ. ΠΡΠΎΡΠ΅ΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ² exit() ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΡΠΎΡΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ main(), Π±ΡΠ΄Ρ ΡΠΎ Ρ ΡΠ²Π½ΡΠΌ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° return ΠΈΠ»ΠΈ Π±Π΅Π· ΠΎΠ½ΠΎΠ³ΠΎ. ΠΡΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ, Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ (ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°) ΠΏΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ.
ΠΡΡΠ³ΠΎΠΉ ΠΏΡΡΡ β ΠΏΠΎΡΡΠ»ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈΠ·Π²Π½Π΅ (ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°) ΡΠΈΠ³Π½Π°Π»Π°, ΡΠ΅Π°ΠΊΡΠΈΠ΅ΠΉ Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ (ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ) ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΠΈΠ³Π½Π°Π»Π°Ρ ΠΈ ΡΠ΅Π°ΠΊΡΠΈΡΡ ΡΠΌ. Π½ΠΈΠΆΠ΅). Π ΠΏΡΠΎΡΠΈΠ²ΠΎΠ²Π΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·Π²Π½Π΅ Π² [12] (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²) Π½Π°Π·Π²Π°Π½ΠΎ ΠΎΡΠΌΠ΅Π½ΠΎΠΉ, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈΠΌ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠΌ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π°Π»Π΅Π΅, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ΅ΡΠ»ΠΈΠ²ΠΎ ΠΎΡΠΌΠ΅ΡΠ°ΡΡ, ΠΎ ΠΊΠ°ΠΊΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΡ. (Π’Π°ΠΊΠ°Ρ ΠΆΠ΅ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π°ΠΌΠΈ ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°.)
ΠΠ΄Π΅ΡΡ ΡΠΌΠ΅ΡΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Β«ΠΆΠΈΠ²ΡΡΠ΅ΡΡΠΈΒ», ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΎ Ρ Π£. Π‘ΡΠΈΠ²Π΅Π½ΡΠ° [2], ΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² IPC, ΡΡΠΎ Π² ΡΠ°Π²Π½ΠΎΠΉ ΠΌΠ΅ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ½Π΅ΡΠ΅Π½ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ IPC, Π½ΠΎ ΠΈ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π£. Π‘ΡΠΈΠ²Π΅Π½Ρ Π΄Π΅Π»ΠΈΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ Π½Π°:
β’ ΠΠ±ΡΠ΅ΠΊΡΡ, Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ (process-persistent). Π’Π°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ. ΠΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ²Π»ΡΡΡΡΡ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ (pipes, FIFO).
β’ ΠΠ±ΡΠ΅ΠΊΡΡ, Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ΄ΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ (kernel-persistent). Π’Π°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ΄ΡΠ° ΠΈΠ»ΠΈ ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ (ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅) ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ.
β’ ΠΠ±ΡΠ΅ΠΊΡΡ, Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ (filesystem-persistent). Π’Π°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ²Π½ΠΎ ΡΠ΄Π°Π»Π΅Π½. ΠΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΠ‘ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ POSIX, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ.
ΠΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΎΡΠ½ΡΠ΄Ρ Π½Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°. ΠΠ±ΡΠ΅ΠΊΡΡ, ΠΎΡΠ½Π΅ΡΠ΅Π½Π½ΡΠ΅ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ, ΠΌΠΈΠ³ΡΠΈΡΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΠ‘ ΠΊ Π΄ΡΡΠ³ΠΎΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΎΡΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ process-persistent. ΠΡ Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· ΠΊΠΎΡΠ½Π΅ΠΌΡΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΠΌ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΈ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π²ΡΠ΅Ρ process-persistent-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΈ Π΄Π»Ρ Π΅Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π² ΡΠ΅Ρ Π½ΠΈΠΊΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°ΠΆΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π΄Π°Π»Π΅Π΅, ΠΏΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Π‘ΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΡΠ°ΡΡ Π½Π° ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΠΌΡ Π΅ΡΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΊ Π½ΠΈΠΌ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ), Π½ΠΎ ΠΈ ΡΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Β«ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΒ» ΡΠΎΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΠΠ‘, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π° Π΄ΡΡΠ³ΠΎΠΉ. ΠΠ»Ρ ΡΠ°ΠΌΠΎΠΉ Π³ΡΡΠ±ΠΎΠΉ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΡΠΈΡ Π·Π°ΡΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΡΠ°ΠΉΠ» p5.cc):
ΠΠ°ΡΡΠ°ΡΡ Π½Π° Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²#include <stdlib.h>
#include <inttypes.h>
#include <iostream.h>
#include <unistd.h>
#include <sched.h>
#include <sys/neutrino.h>
int main(int argc, char* argv[]) {
unsigned long N = 1000;
if (argc > 1 && atoi(argv[1]) > 0)
N = atoi(argv[1]);
pid_t pid = fork();
if (pid == -1)
cout << "fork error" << endl, exit(EXIT_FAILURE);
uint64_t t = ClockCycles();
for (unsigned long i = 0; i < N; i++) sched_yield();
t = ClockCycles() - t;
delay(200);
cout << pid << "\t: cycles - " << t << "; on sched - " << (t/N) / 2 << endl;
exit(EXIT_SUCCESS);
}
ΠΠ²Π° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½Ρ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡ PID ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ fork(), ΠΎΠ½ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΌΠΏΠ΅ Β«ΠΏΠ΅ΡΠ΅ΠΏΠ°ΡΠΎΠ²ΡΠ²Π°ΡΡΒ» Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ, ΠΊΠ°ΠΊ Π²ΠΎΠ»Π΅ΠΉΠ±ΠΎΠ»ΠΈΡΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΌΡΡΠΎΠΌ (ΡΠΈΡ. 2.2).
Π ΠΈΡ. 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(). Π’Π°ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ Π΄Π»Ρ Π½Π°Ρ ΡΠ»ΡΡΠ°ΠΉ.