exit(EXIT_SUCCESS);
}
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΄Π»Ρ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΡΠΎ Π΅ΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Β«ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉΒ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ (ΡΠ°ΠΉΠ» p4-3.cc):
int main(int argc, char *argv[]) {
int numpar = 1;
if (argc > 1 && atoi(argv[1]) > 0)
numpar = atoi(argv[1]);
_clockperiod clcold;
ClockPeriod(CLOCK_REALTIME, NULL, &clcold, 0);
if (argc > 2 && atoi(argv[2]) > 0) {
_clockperiod clcnew = { atoi(argv[2]) * 1000, 0 };
ClockPeriod(CLOCK_REALTIME, &clcnew, &clcold, 0);
}
timespec interval;
sched_rr_get_interval(0, &interval);
cout << "Rescheduling interval = "
<< (double)interval.tv_nsec / 1000000. << " msec." << endl;
uint64_t t = ClockCycles();
workproc(1000 * numpar);
t = ClockCycles() - t;
cout << "Single scheduling time. " << cycle2milisec(t)
<< " msec. [" << t << " cycles]" << endl;
ClockPeriod(CLOCK_REALTIME, &clcold, NULL, 0);
exit(EXIT_SUCCESS);
}
ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ 3 ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ΅ΡΡΠ° Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ° (ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π³ΡΡΠΏΠΏΠ°ΠΌΠΈ ΠΏΠΎ 3 Π·Π°ΠΏΡΡΠΊΠ°) Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅: ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ:
# nice -n-19 p4-3 10
Rescheduling interval = 3.99939 msec
Single scheduling time: 5928.8 msec [3169850746 cycles]
# nice -n-19 p4-2 10
Rescheduling interval = 3.99939 msec.
Threads scheduling time: 5919.82 msec. [3165049513 cycles]
# nice -n-19 p4-1 10
Rescheduling interval = 3.99939 msec.
Forks scheduling time: 5962.21 msec. [3187713371 cycles]
# nice -n-19 p4-3 10 50
Rescheduling interval = 0.197788 msec
Single scheduling time: 6427.33 msec. [3436394566 cycles]
# nice -n-19 p4-2 10 50
Rescheduling interval = 0.197788 msec.
Threads scheduling time: 6207.96 msec. [3319104030 cycles]
# nice -n-19 p4-1 10 50
Rescheduling interval = 0.197788 msec
Forks scheduling time 6029.23 msec. [3223548073 cycles]
# nice -n-19 p4-3 10 20
Rescheduling interval = 0.077104 msec.
Single scheduling time: 6745.37 msec. [3606433666 cycles]
# nice -n-19 p4-2 10 20
Rescheduling interval = 0.077104 msec
Threads scheduling time: 6762.69 msec [3615692975 cycles]
# nice -n-19 p4-1 10 20
Rescheduling interval = 0.077104 msec
Forks scheduling time: 6647.42 msec [3554062343 cycles]
# nice -n-19 p4-3 10 11
Rescheduling interval = 0.04358 msec
Single scheduling time. 7517.74 msec [4019381476 cycles]
# nice -n-19 p4-2 10 11
Rescheduling interval = 0.04358 msec
Threads scheduling time: 7638.89 msec. [4084155676 cycles]
# nice -n-19 p4-1 10 11
Rescheduling interval = 0.04358 msec.
Forks scheduling time: 7679 29 msec. [4105758575 cycles]
# nice -n-19 p4-3 10 10
Rescheduling interval = 0.036876 msec.
Single scheduling time: 7937.35 msec. [4243731124 cycles]
# nice -n-19 p4-2 10 10
Rescheduling interval = 0.036876 msec.
Threads scheduling time. 8136.42 msec. [4350159949 cycles]
# nice -n-19 p4-1 10 10
Rescheduling interval = 0.036876 msec
Forks scheduling time: 8172.35 msec [4369372230 cycles]
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΌΠΈ: Π²ΠΎ Π²ΡΠ΅Ρ 3-Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ (Π² Π³ΡΡΠΏΠΏΠ°Ρ ) ΡΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΡΠΈΡΡΡ β ΡΠ°Π·Π»ΠΈΡΠΈΡ Π·Π°ΡΡΠ°Ρ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ (ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ) Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ 0,5β2%! ΠΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΈ Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-ΡΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ, Π²Π΅Π΄Ρ, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Β«ΠΈΠ· ΠΏΠ΅ΡΠ½ΠΈ ΡΠ»ΠΎΠ²Π° Π½Π΅ Π²ΡΠΊΠΈΠ½Π΅ΡΡΒ».
ΠΡΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ (ΠΏΡΡΡΡ Π³ΡΡΠ±ΠΎ ΠΈ ΠΎΡΠ΅Π½ΠΎΡΠ½ΠΎ) Β«ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡΒ» Π·Π°ΡΡΠ°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΠ° (ΡΠ»ΡΠΆΠ±Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΠ‘) ΠΈ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΡΠ΅ ΡΠ°Π· ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ:
# nice -n-19 p4-3 10
Rescheduling interval = 3.99939 msec.
Single scheduling time: 5928.8 msec. [3169850746 cycles]
To Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Β«ΡΠ°Π±ΠΎΡΡΒ» Π±ΡΠ»ΠΎ 5928,8/0,9998475 = 5929 ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ ΠΎΡ ΡΠ»ΡΠΆΠ±Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
# nice -n-19 p4-3 10 10
Rescheduling interval = 0.036876 msec
Single scheduling time: 7937.35 msec. [4243731124 cycles]
ΠΠ° ΡΡΠΎΡ ΡΠ°Π· Π·Π° ΡΡΠ΅Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ° Π½Π° 2 ΠΏΠΎΡΡΠ΄ΠΊΠ° Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Β«ΡΠ°Π±ΠΎΡΡΒ» (ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ!) Π±ΡΠ»ΠΎ ΡΠΆΠ΅ 7937,35/0,009219 = 860977 ΡΠΎΠ±ΡΡΠΈΠΉ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ Π² ΡΡΠΈΡ Π΄Π²ΡΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ, ΡΠΎ Π½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ 860 977 β 5929 = 855 048 ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠΈΠΊΠΎΠ² (ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ 855 048/4 = 213 762 ΡΠΎΡΠΊΠ°ΠΌΠΈ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ) ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ ΡΠ΅ 4 243 731 124 β 3 169 850 746 = 1 073 880 378 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°ΠΊΡΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 1256 ΡΠ°ΠΊΡΠΎΠ² Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΠΈΠΊ. Π Π°Π½Π΅Π΅ ΠΌΡ ΡΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ Π·Π°ΡΡΠ°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ (617) ΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ (374), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΠΈΠΊ, ΡΠΎ Π΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Β«ΠΎΡΡΠ΅Π΄Π°Π΅ΡΒ» Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ 90β150 (ΒΌ ΡΠ°ΡΡΡ Π·Π°ΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°) Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΠΈΠΊ ΠΈΠ»ΠΈ, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 10% Π·Π°ΡΡΠ°Ρ Π½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠ±Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ°ΡΠΎΠ².
ΠΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΎΡΠΌΡΡΠ»ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
β’ ΠΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ MMU Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎ, Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½Π΅Π΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, Π½ΠΎβ¦
β’ β¦Π½ΠΎ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ° (ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°) Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² (ΡΠΈΡ. 2.7), ΡΡΠΎ ΡΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½ΠΈΠ²Π΅Π»ΠΈΡΡΠ΅Ρ ΡΠ°Π·Π½ΠΈΡΡ, Π±ΡΠ΄Ρ ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΈΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
Π ΠΈΡ. 2.7. ΠΡΡΠ΅ΠΊΡΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°ΡΡΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ°ΡΠΎΠ²
ΠΠ° ΡΠΈΡ. 2.7 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΠΊΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ°ΡΠΎΠ² ΠΈ ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ Π½Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π°ΠΊΡΠΎΠ² Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠΈΠΊΠΎΠ² (ΡΠ°ΡΡΠΎΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ°ΡΠΎΠ²) Π² ΡΠΈΠ»Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΎΠ΄Π½ΠΈΡ , ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π΄ΠΎΠ»Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΎΡΡΠ°ΡΡΠ°ΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, ΠΏΠ°Π΄Π°Π΅Ρ.
β’ Π ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·ΡΠ΅ΠΌΡΡ Ρ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½ΠΎΠΉ RR (Π²ΡΡΠ΅ΡΠ½ΡΠ΅ΠΌΡΡ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π±ΡΠ΄ΠΆΠ΅ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌ ΠΊΠ²Π°Π½ΡΠ°), Π½ΠΎ ΠΈ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² Ρ Π»ΡΠ±ΠΎΠΉ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½ΠΎΠΉ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ FIFO, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ ΠΏΠΎΡΠΎΠΊ (Π° Π·Π½Π°ΡΠΈΡ, ΠΏΠΎΡΠΎΠΊ Π½Π°ΠΈΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅) Π²ΠΎΠΎΠ±ΡΠ΅ Β«Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡΒ» Π½ΠΈΠΊΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
β’ ΠΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π°Π±ΡΡΡΠ΄Π½ΠΎΠ΅ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΠΎΠΉ (Π½ΠΎ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎΠΉ) Π»ΠΎΠ³ΠΈΠΊΠΈ: Π Π°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ (Π΅ΡΠ»ΠΈ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) Π½Π° N Π²Π΅ΡΠ²Π΅ΠΉ (Π±ΡΠ΄Ρ ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²) ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² (ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ²), ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π½ΠΈ Π² ΡΠ΅ΠΌ Π½Π΅ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ Π³ΡΡΠΏΠΏΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ. Π Π² ΡΡΠΎΠΌ ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ β ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ β ΠΏΠΎΡΠΎΠΊΠΈ Π² ΡΠ²ΠΎΠ΅ΠΉ Β«Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΠΎΡΡΠΈΒ» Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΡΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ.[25]
Π Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²ΡΠ΅ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΠ° Π½Π° ΡΠ°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠΉ Π²ΠΎΠΏΡΠΎΡ: Β«ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΠ‘ QNX ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ (Β«ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠ΅Β») ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²? ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ. ΠΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ΠΠ‘ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Β«ΠΎΠ·Π°Π±ΠΎΡΠ΅Π½Π°Β» ΡΠ²ΠΎΠΈΠΌΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ:
# nice -n-19 p4-2 2 10
Rescheduling interval = 0.036876 msec.
Threads scheduling time: 1555.43 msec [831574415 cycles]
# nice -n-19 p4-2 20 10
Rescheduling interval = 0.036876 msec.
Threads scheduling time: 15642 msec. [8362674590 cycles]
# nice -n-19 p4-2 200 10
Rescheduling interval = 0.036876 msec
Threads scheduling time: 161112 msec. [86134950020 cycles]
ΠΠ°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠ°Ρ Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΡ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² (ΠΎΡ 2 Π΄ΠΎ 200). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠΈΡΠ»Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ ΡΡ Ρ Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠ².
ΠΠΎΠ²ΡΠΎΡΠΈΠΌ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ ΡΠΆΠ΅ Π΄Π»Ρ ΡΠ»ΡΡΠ°Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²:
# nice -n-19 p4-1 2 10
Rescheduling interval = 0.036876 msec.
Forks scheduling time: 1622.87 msec [867633362 cycles]
# nice -n-19 p4-1 20 10
Rescheduling interval = 0.036876 msec.
Forks scheduling time: 16682.1 msec [8918698991 cycles]
# nice -n-19 p4-1 200 10
Rescheduling interval = 0.036876 msec
Forks scheduling time: 173398 msec. [92703484992 cycles]
ΠΠ΄Π΅ΡΡ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ Π»ΠΈΡΡ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΈΠ·Π½Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌ ΡΠ°ΡΡ ΠΎΠ΄Π°ΠΌ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ°Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π½ΠΎ Π²Π΅Π»ΠΈΡΠΈΠ½Π° ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ° ΡΠ°ΠΊΠΆΠ΅ Π²Π΅ΡΡΠΌΠ° ΠΌΠ°Π»ΠΎΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½Π°.
Π ΠΈΡΠΎΠ³Π΅, Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Β«Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΠΎΡΡΠΈΒ» ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: