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

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

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

 for (i = 0; i β€Ή 15; i++) {

  write(1, string, strlen(string));

  read(0, buf, sizeof(buf));

 }

}

Рисунок 7.5. ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ pipe, dup ΠΈ fork


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ зависят ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΉ очСрСдности процСссы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ свои дСйствия. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹, возвращаСтся Π»ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ процСссу ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fork Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΌΡƒ процСссу. И Ρ‚Π°ΠΊ ΠΆΠ΅ Π±Π΅Π·Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ процСссы Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ систСмныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π²ΠΎΠΉΡ‚ΠΈ Π² свой собствСнный Ρ†ΠΈΠΊΠ», ΠΈΠ±ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ структуры ядра. Если процСсс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ исполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ read Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ write, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ приостановлСн Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ запись Π² ΠΊΠ°Π½Π°Π» ΠΈ Ρ‚Π΅ΠΌ самым Π½Π΅ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Если Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс записываСт Π² ΠΊΠ°Π½Π°Π» Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ приступит ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ процСсс Π½Π΅ смоТСт Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· стандартного Π²Π²ΠΎΠ΄Π°, ΠΏΠΎΠΊΠ° Π²Ρ‚ΠΎΡ€ΠΎΠΉ процСсс Π½Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ всС ΠΈΠ· своСго стандартного Π²Π²ΠΎΠ΄Π° ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ запись Π΄Π°Π½Π½Ρ‹Ρ… Π² стандартный Π²Ρ‹Π²ΠΎΠ΄. Π‘ этого мСста порядок Ρ€Π°Π±ΠΎΡ‚Ρ‹ ТСстко фиксирован: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ read ΠΈ write ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ read Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΏΠ°Ρ€Ρƒ read-write. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс послС 15 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ; ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ процСсс наталкиваСтся Π½Π° ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° (Β«end-of-fileΒ»), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°Π½Π°Π» Π½Π΅ связан большС Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… процСссов, ΠΈ Ρ‚ΠΎΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Если ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ процСсс попытаСтся произвСсти запись Π² ΠΊΠ°Π½Π°Π» послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ процСсса, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ сигнал ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Π½Π°Π» Π½Π΅ связан Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· процСссов чтСния.

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

7.2 Π‘Π˜Π“ΠΠΠ›Π«

Π‘ΠΈΠ³Π½Π°Π»Ρ‹ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ процСссам ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ асинхронных событий. ΠŸΠΎΡΡ‹Π»ΠΊΠ° сигналов производится процСссами β€” Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ kill, β€” ΠΈΠ»ΠΈ ядром. Π’ вСрсии V (вторая рСдакция) систСмы UNIX ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ 19 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сигналов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

β€’ Π‘ΠΈΠ³Π½Π°Π»Ρ‹, посылаСмыС Π² случаС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния процСсса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° процСсс выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ exit ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ signal с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ death of child (гибСль ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°);

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

β€’ Π‘ΠΈΠ³Π½Π°Π»Ρ‹, посылаСмыС Π²ΠΎ врСмя выполнСния систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ нСисправимых ошибок, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ исчСрпаниС систСмных рСсурсов Π²ΠΎ врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exec послС освобоТдСния исходного адрСсного пространства (см. Ρ€Π°Π·Π΄Π΅Π» 7.5);

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

β€’ Π‘ΠΈΠ³Π½Π°Π»Ρ‹, посылаСмыС процСссу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сигнал Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ (alarm), посылаСмый ΠΏΠΎ истСчСнии ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ сигналы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ процСссы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ kill;

β€’ Π‘ΠΈΠ³Π½Π°Π»Ρ‹, связанныС с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ взаимодСйствиСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с «зависаниСм» Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° (ΠΊΠΎΠ³Π΄Π° сигнал-Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ прСкращаСтся ΠΏΠΎ любой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅) ΠΈΠ»ΠΈ с Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ клавиш Β«breakΒ» ΠΈ Β«deleteΒ» Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°;

β€’ Π‘ΠΈΠ³Π½Π°Π»Ρ‹, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… производится трассировка выполнСния процСсса. Условия примСнСния сигналов ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π² этой ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ….

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

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

На РисункС 7.7 прСдставлСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ядро опрСдСляСт, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π»ΠΈ процСсс сигнал ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Условия, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ сигналы Ρ‚ΠΈΠΏΠ° «гибСль ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Β», Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны ΠΏΠΎΠ·ΠΆΠ΅. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сигналы, Ссли Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ signal. Π’ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ issig ядро просто гасит ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΡŽ Ρ‚Π΅Ρ… сигналов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ процСсс Π½Π΅ ΠΆΠ΅Π»Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ процСсса ΠΊΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ сигналам.


Рисунок 7.6. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² процСсса ΠΈΠ· состояниС Π² состояниС с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов


Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ issig /* ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° получСния сигналов */

входная информация: отсутствуСт

выходная информация:

 Β«ΠΈΡΡ‚ΠΈΠ½Π°Β», Ссли процСсс ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» сигналы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚

 Β«Π»ΠΎΠΆΡŒΒ» β€” Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС

{

 do while (ΠΏΠΎΠ»Π΅ Π² записи Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ процСссов, содСрТащСС ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сигнала, Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) {

  Π½Π°ΠΉΡ‚ΠΈ Π½ΠΎΠΌΠ΅Ρ€ сигнала, посланного процСссу;

  if (сигнал Ρ‚ΠΈΠΏΠ° «гибСль ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Β») {

   if (сигналы Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ)

    ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ записи Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ, ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΠΌ сущСствованиС;

   else if (сигналы Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ) return (true);

  }

  else if (сигнал Π½Π΅ игнорируСтся) return (true);

  ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ (ΠΏΠΎΠ³Π°ΡΠΈΡ‚ΡŒ) ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ разряд, установлСнный Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΠΎΠ»Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ процСссов, хранящСм ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΡŽ получСния сигнала;

 }

 return (false);

}

Рисунок 7.7. Алгоритм опознания сигналов

7.2.1 ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сигналов