β’Β ΠΡΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΠ²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ (ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π²Π΅ΡΠ²Π΅ΠΉ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ) ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΡ Π½Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ ΠΈΠ»ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ , ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΈ ΠΎΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅.
β’Β Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ°ΠΊΡΠΎΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Β«Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΠΎΡΡΡΒ» ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΏΡΠΎΡΠΈΠ²ΠΎΠ²Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ, β ΡΡΠΎ Π»Π΅Π³ΠΊΠΎΡΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅. Π ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅Π½ΠΈΡ Β«ΡΡΠΆΠ΅Π»ΠΎΠ²Π΅ΡΠ½ΡΡ Β» ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² IPC ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Ρ (ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ, ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ, ΠΎΠ±ΠΌΠ΅Π½ UNIX-ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅). ΠΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ QNX ΠΌΡ Π΅ΡΠ΅ ΡΠ°Π· ΡΠ±Π΅Π΄ΠΈΠΌΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ±ΠΌΠ΅Π½Ρ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΌΠ° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ², Π° ΠΏΡΠΈ ΠΎΠ±ΠΌΠ΅Π½Π°Ρ Ρ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΡΠΌ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅ΠΉ ΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΡΠΈΠΌΠ΅Ρ: ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°
ΠΡΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π½ΠΎ ΡΡΠΎ Π±ΡΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΡ, Β«Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅Β», ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΠ΅, ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ. Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΡΡΠ½ΠΊΡΠΈΠΈ) ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠΌ T, ΡΡΠΎ Π²Π΅ΡΡΠΌΠ° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠΌΠΏΡΠ»ΡΡΡ Β«ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈΒ».
ΠΡΠΎΡΡΠ΅ΠΉΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ³Π»Π° Π±Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
...
while(true) {
Β delay(T);
Β func();
}ΠΠΎ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Β«ΡΠ»Π°Π±ΠΎΠ΅Β» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:
β’Β ΠΠ°Π΄Π΅ΡΠΆΠΊΠ°, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ
delay()β’Β ΠΡΠ»ΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ ΡΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ (ΠΏΠΎΡΠΎΠΊ) Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°, ΡΠΎ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Β«Π½Π΅ ΠΏΡΠΎΡΠ½ΡΡΡΡΡΒ», ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΏΠΎΠΊΠ° ΡΡΠΎ Π½Π΅ Β«ΡΠΎΠΈΠ·Π²ΠΎΠ»ΠΈΡΒ» ΡΠ°Π½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
β’Β ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ
func()β’Β ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
func()β’Β ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ
func()func()ΠΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΈΠ· ΡΡΠΈΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ( ΡΠ°ΠΉΠ» t3.cc). ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ 3 ΡΠ΅ΠΏΠΎΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π»Π΅Π²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ (
mon1mon2mon3period[]
#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) {