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

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

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

Ѐункция stime Π΄Π°Π΅Ρ‚ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π½ΠΎΡΠΈΡ‚ΡŒ Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ВыбираСтся врСмя ΠΈΠ· этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ time:

time(tloc);

Π³Π΄Π΅ tloc β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΡƒΡŽ процСссу, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ заносится Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ· самой сСбя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠ°Π½Π΄Π΅ date, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя.

Ѐункция times Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ суммарноС врСмя выполнСния процСсса ΠΈ всСх Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΡ… сущСствованиС, Π² Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… ядра ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

times(tbuffer)

struct tms *tbuffer;

Π³Π΄Π΅ tms β€” имя структуры, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния ΠΈ которая описываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

struct tms {

/* time_t β€” имя структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится врСмя */

Β time_t tms_utime; /* врСмя выполнСния процСсса Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ */

Β time_t tms_stime; /* врСмя выполнСния процСсса Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра */

Β time_t tms_cutime; /* врСмя выполнСния ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ */

Β time_t tms_cstime; /* врСмя выполнСния ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра */

};

Ѐункция times Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ врСмя, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π΅ "с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ", ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы.

#include β€Ήsys/types.hβ€Ί

#include β€Ήsys/times.hβ€Ί

extern long times();

main() {

Β int i;

Β /* tms β€” имя структуры Π΄Π°Π½Π½Ρ‹Ρ…, состоящСй ΠΈΠ· 4 элСмСнтов */

Β struct tms pb1, pb2;

Β long pt1, pt2;

Β pt1 = times(&pb1);

Β for (i = 0; i β€Ή 10; i++) if (fork()Β == 0) child(i);

Β for (i = 0; i β€Ή 10; i++) wait((int*) 0);

Β pt2 = times(&pb2);

Β printf("процСсс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ: Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя %u Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ %u Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра %u ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ: Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ %u Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра %u\n",

Β Β Β Β Β Β  Β pt2Β - pt1, pb2.tms_utimeΒ - pb1.tms_utime, pb2.tms_stimeΒ - pb1.tms_stime, pb2.tms_cutimeΒ - pb1.tms_cutime, pb2.tms_cstimeΒ - pb1.tms_cstime);

}

child(n)

int n;

{

Β int i;

Β struct tms cb1, cb2;

Β long t1, t2;

Β t1 = times(&cb1);

Β for (i = 0; i β€Ή 10000; i++);

Β t2 = times(&cb2);

Β printf("ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ %d: Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя %u Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ %u Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра %u\n",

Β Β Β Β Β Β Β Β  Β n, t2Β - t1, cb2.tms_utimeΒ - cb1.tms_utime, cb2.tms_stimeΒ - cb1.tms_stime);

Β exit();

}

Рисунок 8.7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ times

На РисункС 8.7 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ процСсс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ создаСт 10 ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… 10000 Ρ€Π°Π· выполняСт пустой Ρ†ΠΈΠΊΠ». ΠŸΡ€ΠΎΡ†Π΅ΡΡ-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ обращаСтся ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ times ΠΏΠ΅Ρ€Π΅Π΄ созданиСм ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΠΈ послС ΠΈΡ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π° ΠΈ послС Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. ΠšΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎ наивности ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ врСмя выполнСния ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² процСсса Π² Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ядра Ρ€Π°Π²Π½ΠΎ суммС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… слагаСмых ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°, Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя процСсса-родитСля являСтся суммой Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ². Однако, врСмя выполнСния ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° исполнСниС систСмных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ fork ΠΈ exit, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ искаТСно Π·Π° счСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ контСкста.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ alarm ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ процСссы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ посылку сигналов Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ ("Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ°") Ρ‡Π΅Ρ€Π΅Π· ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. НапримСр, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° РисункС 8.8 ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ провСряСт врСмя доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈ, Ссли ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС. Для этого Π² Ρ†ΠΈΠΊΠ»Π΅, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ stat, устанавливаСтся ΠΌΠΎΠΌΠ΅Π½Ρ‚ послСднСго обращСния ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈ, Ссли ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π»ΠΎ мСсто Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ послСднСй ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, выводится сообщСниС. Π—Π°Ρ‚Π΅ΠΌ процСсс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ signal Π΄Π΅Π»Π°Π΅Ρ‚ распоряТСниС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ сигналы Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ alarm Π·Π°Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ сигналами Π² 60 сСкунд ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pause приостанавливаСт своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° получСния сигнала. Π§Π΅Ρ€Π΅Π· 60 сСкунд сигнал поступаСт, ядро ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ стСк Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигнала wakeup, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pause, ΠΈ процСсс исполняСт Ρ†ΠΈΠΊΠ» вновь.

ВсС пСрСчислСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ протСкания процСсса ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π½Π° показания систСмных часов (Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°). ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ прСрывания ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ, ядро обращаСтся ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π½Ρ‹ΠΌ счСтчикам ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ дСйствиС.

8.3 Π’ΠΠ™ΠœΠ•Π 

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ Π²Ρ…ΠΎΠ΄ΠΈΡ‚:

β€’ пСрСзапуск часов,

β€’ Π²Ρ‹Π·ΠΎΠ² Π½Π° исполнСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ядра, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… встроСнныС часы,

β€’ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° возмоТности профилирования выполнСния процСссов Π² Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… ядра ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ;

β€’ сбор статистики ΠΎ систСмС ΠΈ ΠΏΡ€ΠΎΡ‚Π΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… Π² Π½Π΅ΠΉ процСссах,

β€’ слСТСниС Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ,

β€’ посылка процСссам сигналов "Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ°" ΠΏΠΎ запросу,

β€’ пСриодичСскоС Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ процСсса ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ (см. ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π³Π»Π°Π²Ρƒ),

β€’ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ диспСтчСризациСй процСссов.

НСкоторыС ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” ΠΏΠΎ ΠΏΡ€ΠΎΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π½Ρ‹Ρ… Ρ‚ΠΈΠΊΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ запускаСтся с высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ обращСния ΠΊ процСссору, Π½Π΅ допуская Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ возникновСния Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… событий (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ прСрывания ΠΎΡ‚ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹Ρ… устройств). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ быстро, Π·Π° максимально-ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ врСмя пробСгая свои критичСскиС ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π±Π΅Π· ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ со стороны Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов. Алгоритм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° РисункС 8.9.

#include β€Ήsys/types.hβ€Ί

#include β€Ήsys/stat.hβ€Ί

#include β€Ήsys/signal.hβ€Ί

main(argc, argv)

int argc;

char *argv[];

{

Β extern unsigned alarm();

Β extern wakeup();

Β struct stat statbuf;

Β time_t axtime;

Β if (argc != 2) {

Β  printf("Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚\n");