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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «АрхитСктура ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы UNIX (Π›ΠŸ)Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 82

Автор Π‘Π°Ρ… ΠœΠΎΡ€ΠΈΡ Π”ΠΆ.

Β signal(SIGCLD, catcher);

}

Рисунок 7.35. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ процСсс ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ сигналы Ρ‚ΠΈΠΏΠ° β€žΠ³ΠΈΠ±Π΅Π»ΡŒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°β€œ

7. Когда процСсс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сигналы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ…, ядро Π΄Π°ΠΌΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π· процСсса Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Ρƒ Π½Π΅Π³ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ получСния сигнала. Π―Π΄Ρ€ΠΎ создаСт Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ процСсса Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ β€žcoreβ€œ ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² Π½Π΅Π³ΠΎ пространство процСсса, области ΠΊΠΎΠΌΠ°Π½Π΄, Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ стСка. ВпослСдствии ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°ΠΌΠΏ ΠΎΠ±Ρ€Π°Π·Π° процСсса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартных срСдств ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π° Π’Π°Ρˆ взгляд Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ядро Π² процСссС создания Ρ„Π°ΠΉΠ»Π° β€žcoreβ€œ. Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Ρ„Π°ΠΉΠ» с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΆΠ΅ сущСствуСт? Как Π΄ΠΎΠ»ΠΆΠ½ΠΎ вСсти сСбя ядро, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π΄Π°ΠΌΠΏΠΈΡ€ΡƒΡŽΡ‚ свои ΠΎΠ±Ρ€Π°Π·Ρ‹ сразу нСсколько процСссов?

8.Β Π•Ρ‰Π΅ Ρ€Π°Π· обратимся ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (Рисунок 7.12), ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ процСсс забрасываСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс сигналами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΈΡ… адрСсатом. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π±Ρ‹ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π±Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² любом ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ:

β€’ ядро Π½Π΅ замСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ явно Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ этого;

β€’ ядро заставляСт процСсс ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сигналы Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ обратится ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ signal вновь.

9.Β ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ядро автоматичСски пСрСнастраивало процСсс Π½Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… поступлСний сигналов ΠΏΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΈΡ…. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ядро ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ? Π’Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° пСрСнастройка ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΠ»Π° Π±Ρ‹ нас ΠΊ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²ΠΊΠ΅ сигналов Π² систСмС BSD.

*10. Если процСсс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сигнал, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π² состоянии приостанова Π²ΠΎ врСмя выполнСния систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΌ прСрывания ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, ΠΎΠ½ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ longjump. Π―Π΄Ρ€ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ установки для запуска Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигнала; ΠΊΠΎΠ³Π΄Π° процСсс Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигнала, Π² вСрсии V это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ, словно ΠΎΠ½ вСрнулся ΠΈΠ· систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ ошибки (ΠΊΠ°ΠΊ Π±Ρ‹ ΠΏΡ€Π΅Ρ€Π²Π°Π² своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅). Π’ систСмС BSD систСмная функция Π² этом случаС автоматичСски пСрСзапускаСтся. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² нашСй систСмС?

11.Β Π’ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ mkdir для создания Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² Π΄Π΅Ρ€Π΅Π²Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСмная функция mknod, послС Ρ‡Π΅Π³ΠΎ Π΄Π²Π°ΠΆΠ΄Ρ‹ вызываСтся систСмная функция link, ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ "." ΠΈ ".." ΠΊ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΈ ΠΊ Π΅Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ. Π‘Π΅Π· этих Ρ‚Ρ€Π΅Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²ΠΎ врСмя исполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ mkdir процСсс ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ сигнал? Π§Ρ‚ΠΎ Ссли ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ сигнал SIGKILL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ процСсс Π½Π΅ распознаСт? Π­Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ рассмотритС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mkdir.

12.Β ΠŸΡ€ΠΎΡ†Π΅ΡΡ провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ сигналов Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² состояниС приостанова ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π½Π΅Π³ΠΎ (Ссли Π² состоянии приостанова процСсс находился с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΌ прСрывания), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² Ρ€Π΅ΠΆΠΈΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° ядра ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ исполнСния систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСрывания. ΠŸΠΎΡ‡Π΅ΠΌΡƒ процСсс Π½Π΅ провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ сигналов Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ обращСния ΠΊ систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

*13. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ послС исполнСния систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ процСсс готовится ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ Π² Ρ€Π΅ΠΆΠΈΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ сигнала. Π‘Ρ€Π°Π·Ρƒ послС этого ядро ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ посылаСт процСссу сигнал. (НапримСр, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π° клавиша "break".) Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ процСсс послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ядро Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ прСрывания?

*14. Если процСссу ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ посылаСтся нСсколько сигналов, ядро ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ΠΈ пСрСчислСны Π² описании. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ способа рСагирования Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сигнала β€” ΠΏΡ€ΠΈΠ΅ΠΌ сигналов, Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ выполнСния со сбросом Π½Π° внСшний Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ (Π΄Π°ΠΌΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ) ΠΎΠ±Ρ€Π°Π·Π° процСсса Π² памяти ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ выполнСния Π±Π΅Π· дампирования. МоТно Π»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ порядок ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… сигналов? НапримСр, Ссли процСсс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сигнал ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ (Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°ΠΌΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° процСсса Π² памяти) ΠΈ сигнал ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ (Π²Ρ‹Ρ…ΠΎΠ΄ Π±Π΅Π· дампирования), Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· этих сигналов ΠΈΠΌΠ΅Π»ΠΎ Π±Ρ‹ смысл ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ?

15.Β Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ newpgrp(pid,ngrp); которая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ процСсс с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ pid Π² Π³Ρ€ΡƒΠΏΠΏΡƒ процСссов с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ngrp (устанавливаСт для процСсса Π½ΠΎΠ²ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ). ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, для ΠΊΠ°ΠΊΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ опасности Ρ‚Π°ΠΈΡ‚ Π² сСбС Π΅Π΅ Π²Ρ‹Π·ΠΎΠ².

16.Β ΠŸΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ wait процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ наступлСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ события ΠΈ это Π½Π΅ ΠΎΡ‚Ρ€Π°Π·ΠΈΠ»ΠΎΡΡŒ Π±Ρ‹ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ всСй систСмы.

17. Рассмотрим Π½ΠΎΠ²ΡƒΡŽ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

nowait(pid);

Π³Π΄Π΅ pid β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, процСсс Ρ‚Π΅ΠΌ самым сообщаСт ядру ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ собираСтся Π΄ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒΡΡ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния своСго ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°, поэтому ядро ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ сущСствования ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° сразу ΠΆΠ΅ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ ΠΈΠΌ мСсто Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ процСссов. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ это рСализуСтся Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅? ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ достоинства Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ сравнитС Π΅Π΅ использованиС с использованиСм сигналов Ρ‚ΠΈΠΏΠ° "гибСль ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°".

18.Β Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½Π° Π‘ΠΈ автоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊ основному ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ (startup), которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ main, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Если Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ отсутствуСт Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exit, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° startup сама Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π±Ρ‹ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π±Ρ‹ ΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ startup отсутствовал Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exit (ΠΈΠ·-Π·Π° ошибки Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°)?

19.Β ΠšΠ°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ процСсс, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ wait, Ссли Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ запустит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ exit Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°? Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ процСсс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ exit() вмСсто exit(n). Если программист постоянно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exit Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‚ΠΎ насколько прСдсказуСмо Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ wait? Π”ΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅ свой ΠΎΡ‚Π²Π΅Ρ‚.

20.Β ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли процСсс, ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° РисункС 7.36 запустит с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec самого сСбя. Как Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ядро смоТСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ возникновСния Ρ‚ΡƒΠΏΠΈΠΊΠΎΠ²Ρ‹Ρ… ситуаций, связанных с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ индСксов?

main(argc,argv)

int argc;

char *argv[];

{

Β execl(argv[0], argv[0], 0);

}

Рисунок 7.36

21. По ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec являСтся имя (послСдняя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ поиска) исполняСмого процСссом Ρ„Π°ΠΉΠ»Π°. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½Π° РисункС 7.37? Каков Π±ΡƒΠ΄Π΅Ρ‚ эффСкт, Ссли Π² качСствС Ρ„Π°ΠΉΠ»Π° "a.out" выступит Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½Π° РисункС 7.36?

main() {

Β if (fork()Β == 0) {

Β  execl("a.out", 0);

Β Β printf("Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec\n");

Β }

}

Рисунок 7.37

22.Β ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² языкС Π‘ΠΈ поддСрТиваСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… "read-only" (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния), ΠΏΡ€ΠΈΡ‡Π΅ΠΌ процСсс, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΠΉΡΡ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΏΠΎΠ»Π΅ с этим Ρ‚ΠΈΠΏΠΎΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π· систСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹. ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. (НамСк: сравнитС это понятиС с понятиСм "раздСляСмая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄".) Π’ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ядра потрСбуСтся внСсти измСнСния? КакиС Π΅Ρ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ с ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ?