Krótka odpowiedź
PR jest poziomem priorytetowym. Im niższy PR, tym wyższy będzie priorytet procesu.
PR oblicza się w następujący sposób:
- dla normalnych procesów: PR = 20 + NI (NI jest miły i wynosi od -20 do 19)
- dla procesów w czasie rzeczywistym: PR = - 1 - real_time_priority
(real_time_priority wynosi od 1 do 99)
Długa odpowiedź
Istnieją 2 rodzaje procesów, normalny i rzeczywisty.
Dla normalnych (i tylko dla tych) nice stosuje się w następujący sposób:
Miły
Skala „dobroci” wynosi od -20 do 19, podczas gdy -20 jest najwyższym priorytetem, a 19 najniższym. Poziom priorytetu jest obliczany w następujący sposób:
PR = 20 + NI
Gdzie NI to niezły poziom, a PR to poziom priorytetowy. Jak widać, -20 faktycznie odwzorowuje na 0, a 19 na 39.
Domyślnie wartość nice programu wynosi 0, ale użytkownik root może uruchamiać programy o określonej wartości nice za pomocą następującego polecenia:
nice -n <nice_value> ./myProgram
Czas rzeczywisty
Możemy pójść jeszcze dalej. Dobry priorytet jest faktycznie używany w programach użytkownika. Podczas gdy ogólny priorytet UNIX / LINUX ma zakres 140 wartości, ładna wartość umożliwia procesowi mapowania do ostatniej części zakresu (od 100 do 139). To równanie pozostawia wartości od 0 do 99 nieosiągalne, co odpowiada ujemnemu poziomowi PR (od -100 do -1). Aby mieć dostęp do tych wartości, proces należy określić jako „w czasie rzeczywistym”.
Istnieje 5 zasad planowania w środowisku LINUX, które można wyświetlić za pomocą następującego polecenia:
chrt -m
Który pokaże następującą listę:
1. SCHED_OTHER the standard round-robin time-sharing policy
2. SCHED_BATCH for "batch" style execution of processes
3. SCHED_IDLE for running very low priority background jobs.
4. SCHED_FIFO a first-in, first-out policy
5. SCHED_RR a round-robin policy
Procesy szeregowania można podzielić na 2 grupy, normalne zasady szeregowania (od 1 do 3) i zasady szeregowania w czasie rzeczywistym (4 i 5). Procesy w czasie rzeczywistym zawsze będą miały pierwszeństwo przed normalnymi procesami. Proces w czasie rzeczywistym można wywołać za pomocą następującego polecenia (na przykład, jak zadeklarować zasadę SCHED_RR):
chrt --rr <priority between 1-99> ./myProgram
Aby uzyskać wartość PR dla procesu w czasie rzeczywistym, stosuje się następujące równanie:
PR = -1 - rt_prior
Gdzie rt_prior odpowiada priorytetowi między 1 a 99. Z tego powodu proces, który będzie miał wyższy priorytet niż inne procesy, będzie wywoływany z liczbą 99.
Należy zauważyć, że w procesach w czasie rzeczywistym wartość nice nie jest używana.
Aby zobaczyć bieżącą „wartość” i wartość PR procesu, można wykonać następujące polecenie:
top
Który pokazuje następujące dane wyjściowe:
Na rysunku wyświetlane są wartości PR i NI. Warto odnotować proces o wartości PR -51, która odpowiada wartości w czasie rzeczywistym. Istnieją również procesy, których wartość PR jest określona jako „rt”. Ta wartość faktycznie odpowiada wartości PR -100.
niceness
mogą być użyte do nadania negatywnego priorytetu, aby zadanieniceness
zejdzie z drogi dla zadań o wysokim priorytecie? (tj. bycienice
i pozwalanie innym zasobom na dostęp? A może to mnie pomyliło?