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

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

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

}


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");

  exit();

 }

 axtime = (time_t) 0;

 for (;;) {

   /* ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ значСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ */

  if (stat(argv[1], &statbuf) == -1) {

   printf("Ρ„Π°ΠΉΠ»Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ %s Π½Π΅Ρ‚\n", argv[1]);

   exit();

  }

  if (axtime != statbuf.st_atime) {

   printf("ΠΊ Ρ„Π°ΠΉΠ»Ρƒ %s Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅\n", argv[1]);

   axtime = statbuf.st_atime;

  }

  signal(SIGALRM, wakeup); /* ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ ΠΏΡ€ΠΈΠ΅ΠΌΡƒ сигнала */

  alarm(60);

  pause(); /* приостанов Π΄ΠΎ получСния сигнала */

 }

}


 wakeup() {}

Рисунок 8.8. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ alarm


Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ clock

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

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

{

 ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ часы; /* Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ снова посылали прСрывания */

 if (Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹Ρ… сигналов Π½Π΅ пуста) {

  ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ врСмя для ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹Ρ… сигналов;

  Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ callout, Ссли врСмя истСкло;

 }

 if (профилируСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра)

  Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ прСрывания;

 if (профилируСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ)

  Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ прСрывания;

 ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ статистику ΠΎ самой систСмС;

 ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ статистику ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… Π² систСмС процСссах;

 Π²Ρ‹Π²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ИЦП процСссом;

 if (ΠΏΡ€ΠΎΡˆΠ»Π° 1 сСкунда ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΈ исполняСтся ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ критичСским) {

  for (всСх процСссов Π² систСмС) {

   ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ "Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊ", Ссли ΠΎΠ½ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½;

   Π²Ρ‹Π²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ИЦП;

   if (процСсс Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ) Π²Ρ‹Π²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ процСсса;

  }

  Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² случаС нСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ процСсса ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ;

 }

}

Рисунок 8.9. Алгоритм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ

8.3.1 ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ часов

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ машин послС получСния прСрывания ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ трСбуСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ срСдствами произвСсти пСрСзапуск часов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ³Π»ΠΈ вновь ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ процСссора. Π’Π°ΠΊΠΈΠ΅ срСдства ΡΠ²Π»ΡΡŽΡ‚ΡΡ машинно-зависимыми ΠΈ ΠΌΡ‹ ΠΈΡ… Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ.

8.3.2 Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ систСмныС Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρ‹

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

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

Рисунок 8.10. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹Ρ… сигналов

На РисункС 8.10 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ добавлСния Π½ΠΎΠ²ΠΎΠΉ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹Ρ… сигналов. (К ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ поля "врСмя Π΄ΠΎ запуска" для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ a ΠΌΡ‹ вСрнСмся нСсколько ΠΏΠΎΠ·ΠΆΠ΅). Боздавая Π½ΠΎΠ²ΡƒΡŽ запись, ядро ΠΎΡ‚Π²ΠΎΠ΄ΠΈΡ‚ для Π½Π΅Π΅ Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π΅ мСсто ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ пСрСустанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля "врСмя Π΄ΠΎ запуска" Π² записи, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π° добавляСмой. Будя ΠΏΠΎ рисунку, ядро собираСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f Ρ‡Π΅Ρ€Π΅Π· 5 Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π½Ρ‹Ρ… Ρ‚ΠΈΠΊΠΎΠ²: ΠΎΠ½ΠΎ ΠΎΡ‚Π²ΠΎΠ΄ΠΈΡ‚ мСсто для Π½Π΅Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ сразу послС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ b ΠΈ заносит Π² ΠΏΠΎΠ»Π΅ "врСмя Π΄ΠΎ запуска" Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π²Π½ΠΎΠ΅ 2 (Ρ‚ΠΎΠ³Π΄Π° сумма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ этих ΠΏΠΎΠ»Π΅ΠΉ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ b ΠΈ f составит 5), ΠΈ мСняСт "врСмя Π΄ΠΎ запуска" Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ c Π½Π° 8 (ΠΏΡ€ΠΈ этом функция c всС Ρ€Π°Π²Π½ΠΎ запускаСтся Ρ‡Π΅Ρ€Π΅Π· 13 Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π½Ρ‹Ρ… Ρ‚ΠΈΠΊΠΎΠ²). Π’ ΠΎΠ΄Π½ΠΈΡ… вСрсиях ядро ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ связным списком ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° записи Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹Ρ… сигналов, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… мСняСт ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ записСй ΠΏΡ€ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ПослСдний способ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… ΠΈΠ·Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ядро Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ слишком часто ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.