Réponse courte
PR est le niveau de priorité. Plus le PR est faible, plus la priorité du processus sera élevée.
Le PR est calculé comme suit :
- pour les processus normaux :
PR = 20 + NI
(NI est agréable et va de -20 à 19)
- pour les processus en temps réel :
PR = - 1 - real_time_priority
(la priorité en temps réel va de 1 à 99).
Réponse longue
Il existe 2 types de processus, les normal et les en temps réel .
Pour les normaux (et seulement pour ceux-là), nice est appliqué comme suit :
Nice
L'échelle de "gentillesse" va de -20 à 19, alors que -20 est la priorité la plus élevée et 19 la priorité la plus basse. Le niveau de priorité est calculé comme suit :
PR = 20 + NI
Où NI est le niveau agréable et PR est le niveau de priorité. Comme on peut le voir, le -20 correspond en fait à 0, tandis que le 19 correspond à 39.
Par défaut, la valeur nice d'un programme est 0, mais il est possible pour l'utilisateur root de lancer des programmes avec une valeur nice spécifiée en utilisant la commande suivante :
nice -n <nice_value> ./myProgram
Temps réel
On pourrait même aller plus loin. La priorité nice est en fait utilisée pour les programmes utilisateurs. Alors que la priorité globale d'UNIX/LINUX a une plage de 140 valeurs, la valeur nice permet au processus de correspondre à la dernière partie de la plage (de 100 à 139). Cette équation laisse les valeurs de 0 à 99 inaccessibles ce qui correspondra à un niveau de PR négatif (de -100 à -1). Pour pouvoir accéder à ces valeurs, le processus doit être déclaré "temps réel".
Il y a 5 politiques d'ordonnancement dans un environnement LINUX qui peuvent être affichées avec la commande suivante :
chrt -m
Qui affichera la liste suivante :
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
Les processus d'ordonnancement peuvent être divisés en deux groupes, les politiques d'ordonnancement normal (1 à 3) et les politiques d'ordonnancement en temps réel (4 et 5). Les processus en temps réel auront toujours la priorité sur les processus normaux. Un processus en temps réel peut être appelé en utilisant la commande suivante (l'exemple est comment déclarer une politique SCHED_RR) :
chrt --rr <priority between 1-99> ./myProgram
Pour obtenir la valeur PR d'un processus en temps réel, l'équation suivante est appliquée :
PR = -1 - rt_prior
Où rt_prior
correspond à la priorité entre 1 et 99. C'est pourquoi le processus qui aura la priorité la plus élevée sur les autres processus sera celui qui sera appelé avec le numéro 99.
Il est important de noter que pour les processus en temps réel, la valeur agréable n'est pas utilisée.
Pour voir la "gentillesse" actuelle et la valeur PR d'un processus, la commande suivante peut être exécutée :
top
Ce qui montre la sortie suivante :
Dans la figure, les valeurs PR et NI sont affichées. Il est intéressant de noter le processus dont la valeur PR est de -51, ce qui correspond à une valeur en temps réel. Il y a également quelques processus dont la valeur PR est indiquée comme "rt". Cette valeur correspond en fait à une valeur PR de -100.