Risposta breve
PR è il livello di priorità. Più basso è il PR, maggiore sarà la priorità del processo.
Il PR viene calcolato come segue:
- per processi normali: PR = 20 + NI (NI è gradevole e varia da -20 a 19)
- per processi in tempo reale: PR = - 1 - real_time_priority
(real_time_priority varia da 1 a 99)
Risposta lunga
Esistono 2 tipi di processi, quelli normali e il tempo reale.
Per quelli normali (e solo per quelli), si applica nice come segue:
Bello
La scala della "gentilezza" va da -20 a 19, mentre -20 è la priorità più alta e 19 la priorità più bassa. Il livello di priorità viene calcolato come segue:
PR = 20 + NI
Dove NI è il livello piacevole e PR è il livello di priorità. Come possiamo vedere, il -20 in realtà è mappato su 0, mentre il 19 è mappato su 39.
Per impostazione predefinita, un valore piacevole del programma è 0, ma è possibile per l'utente root avviare programmi con un valore piacevole specificato utilizzando il comando seguente:
nice -n <nice_value> ./myProgram
Tempo reale
Potremmo andare ancora oltre. La bella priorità viene effettivamente utilizzata per i programmi utente. Mentre la priorità generale di UNIX / LINUX ha un intervallo di 140 valori, il valore piacevole consente al processo di mappare all'ultima parte dell'intervallo (da 100 a 139). Questa equazione lascia i valori da 0 a 99 irraggiungibili che corrisponderanno a un livello PR negativo (da -100 a -1). Per poter accedere a questi valori, il processo dovrebbe essere dichiarato "in tempo reale".
Esistono 5 criteri di pianificazione in un ambiente LINUX che possono essere visualizzati con il comando seguente:
chrt -m
Che mostrerà il seguente elenco:
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
I processi di pianificazione potrebbero essere suddivisi in 2 gruppi, le normali politiche di pianificazione (da 1 a 3) e le politiche di pianificazione in tempo reale (4 e 5). I processi in tempo reale avranno sempre la priorità sui processi normali. Un processo in tempo reale può essere chiamato utilizzando il seguente comando (L'esempio è come dichiarare una politica SCHED_RR):
chrt --rr <priority between 1-99> ./myProgram
Per ottenere il valore PR per un processo in tempo reale viene applicata la seguente equazione:
PR = -1 - rt_prior
Dove rt_prior corrisponde alla priorità tra 1 e 99. Per tale motivo, il processo che avrà la priorità più alta rispetto ad altri processi sarà quello chiamato con il numero 99.
È importante notare che per i processi in tempo reale non viene utilizzato il valore piacevole.
Per vedere l'attuale "gentilezza" e il valore PR di un processo è possibile eseguire il comando seguente:
top
Che mostra il seguente output:
Nella figura sono visualizzati i valori PR e NI. È bene notare il processo con valore PR -51 che corrisponde a un valore in tempo reale. Ci sono anche alcuni processi il cui valore PR è indicato come "rt". Questo valore corrisponde effettivamente a un valore PR di -100.
niceness
possono essere usati per dare una priorità negativa in modo che l'attività conniceness
si allontani dalle attività ad alta priorità? (vale a dire esserenice
e consentire ad altre risorse di accesso? O questo mi ha solo confuso?