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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QNX/UNIX: Анатомия ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 36

Автор Π¦ΠΈΠ»ΡŽΡ€ΠΈΠΊ ОлСг Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡

β€’Β ΠŸΡ€ΠΈ статичСскомвыполнСнии (фиксированном количСствС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚Π²Π΅ΠΉ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ) ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, построСнных Π½Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссах, практичСски Π½Π΅ отличаСтся. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, эффСктивности Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΈ ΠΎΡ‚ классичСской ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

‒ БущСствуСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΡ€, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Β«Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΠΎΡΡ‚ΡŒΒ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² противовСс процСссам, β€” это Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈΡ… взаимодСйствия Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ адрСсном пространствС. Π’ случаС процСссов для обСспСчСния Ρ‚Π°ΠΊΠΈΡ… взаимодСйствий Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ привлСчСния «тяТСловСсных» ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² IPC Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ (ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹, раздСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΎΠ±ΠΌΠ΅Π½ UNIX-сообщСниями ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅). ΠŸΡ€ΠΈ рассмотрСнии ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями QNX ΠΌΡ‹ Π΅Ρ‰Π΅ Ρ€Π°Π· убСдимся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΌΠ΅Π½Ρ‹ ΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ вСсьма сущСствСнных процСссорных рСсурсов, Π° ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π°Ρ… с интСнсивным Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ систСмы.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: синхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°

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

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ рСализация ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

...

while(true) {

Β delay(T);

Β func();

}

Но это ΠΎΡ‡Π΅Π½ΡŒ «слабоС» Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:

β€’Β Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ°, обСспСчиваСмая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ пассивной Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ

delay()
, согласно трСбованиям POSIX Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π½ΡŒΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° T, Π½ΠΎ... ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ большС! (Π’ [4] ΠΌΡ‹ писали, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ T = 1 Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ 1 мсСк., ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Π° с большой ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ вСроятности 3 мсСк., ΠΈ Ρ‚Π°ΠΌ ΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ, ΠΊΠ°ΠΊ это происходит.)

‒ Если Π² систСмС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с этим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ процСсс (ΠΏΠΎΡ‚ΠΎΠΊ) Π±ΠΎΠ»Π΅Π΅ высокого ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°, Ρ‚ΠΎ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Β«Π½Π΅ ΠΏΡ€ΠΎΡΠ½ΡƒΡ‚ΡŒΡΡΒ», ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΏΠΎΠΊΠ° это Π½Π΅ «соизволит» ΡΠ°Π½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

β€’Β Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ обСспСчиваСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

func()
. А Ссли Π±Ρ‹ Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ нСсколько (ΠΌΠ½ΠΎΠ³ΠΎ) синхросСрий, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выполняСтся своя функция, Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ сСрий Π½Π΅ ΠΊΡ€Π°Ρ‚Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ?

‒ НаконСц, врСмя выполнСния Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

func()
Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Β«ΠΊΡ€ΡƒΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π³Π°Β» Ρ†ΠΈΠΊΠ»Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ T отсчитываСтся ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π°ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π°Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, Π° это Π½Π΅ совсСм Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π»ΠΈ ΠΏΡ€ΠΈ использовании Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° «синхронноС».

β€’Β Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ссли врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

func()
достаточно Ρ„Π»ΡƒΠΊΡ‚ΡƒΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π΄ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·-Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция), Ρ‚ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Β«Π³ΡƒΠ»ΡΡ‚ΡŒΒ», Π° диспСрсия ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²
func()
становится просто Π½Π΅ΠΏΠΎΠΌΠ΅Ρ€Π½ΠΎ большой.

НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, свободноС ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΈΠ· этих нСдостатков ( Ρ„Π°ΠΉΠ» t3.cc). ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ прСдставляСт собой Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΡƒΡŽ 3 Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (

mon1
,
mon2
,
mon3
) с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°ΠΌΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ (массив
period[]
):

Бинхронизация выполнСния участка ΠΊΠΎΠ΄Π°

#include <stdlib.h>

#include <stdio.h>

#include <unistd.h>

#include <inttypes.h>

#include <errno.h>

#include <iostream.h>

#include <sys/neutrino.h>

#include <sys/syspage.h>

#include <sys/netmgr.h>

#include <pthread.h>

#include <signal.h>

#include <algorithm>

static void out(char s) {

Β int policy;

Β sched_param param;

Β pthread_getschedparam(pthread_self(), &policy, &param);

Β cout << s << param.sched_curpriority << flush;

}

// Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ

// выводят свой символ-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Π½ΠΈΠΌ

// ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся цСлСвая функция

static void mon1(void) { out('.'); }

static void mon2(void) { out('*'); }

static void mon3(void) { out('+'); }

// это всСго лишь пСрСрасчСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ²,

// ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π°ΠΊΡ‚Π°Ρ… процСссора (Π² наносСкундах)

inline uint64_t cycles2nsec(uint64_t с) {

Β const static uint64_t cps =

Β  // частота процСссора

Β  SYSPAGE_ENTRY(qtime)->cycles_per_sec;

 return (с * 1000000000) / cps;

}

// структура, нСобходимая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для накоплСния статистики ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

// ряда Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΎΠΊ: срСднСго, срСднСквадратичного отклонСния,

// минимального ΠΈ максимального Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

struct timestat {

private:

Β uint64_t prev;

public:

Β uint64_t num;

Β double mean, disp, tmin, tmax;

Β timestat(void) {