La nice
commande vous permet d'ajuster la priorité de planification ("gentillesse") d'un programme. Sur tous les systèmes de type Unix que j'ai utilisés, la gentillesse est spécifiée par une plage d'entiers, où -20 est la priorité de planification la plus favorable, 0 est la valeur par défaut et 19 est la moins favorable.
Avoir 0 comme finesse par défaut est assez intuitif, mais pourquoi -20 et 19 ont-ils été sélectionnés comme points de terminaison de la plage? Pourquoi pas -128 et 127, ce qui correspondrait exactement à un octet 8 bits signé? Ou pourquoi pas -100 à 100, ce qui est plus intuitif pour les humains décimaux, ou de manière similaire mais légèrement plus ergonomique, -99 à 99? La plage de -20 à 19 a-t-elle été choisie arbitrairement, ou a-t-elle une relation avec les éléments internes de l'ordonnanceur qui ont nice
initialement interagi avec? (Je comprends qu'il n'y a pas une telle relation aujourd'hui, du moins pour Linux, dont le planificateur utilise des priorités dans la plage de 0 à 139. Cependant, je suis intéressé par les raisons historiques de la plage de -20 à 19.)
la source
min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20
), et les priorités <25 étaient réservées pour processus faisant des choses sans interruption. La gentillesse devait donc être une sorte de gamme limitée.Réponses:
Les niveaux de gentillesse internes sont de 0 à 39, mais les incréments sont positifs ou négatifs. Source . Donc, la réponse est que les nombres (positifs et négatifs) acceptés par la
nice
commande sont ce qui vous fait passer de 20, le niveau par défaut, à n'importe où dans la plage 0-39.Alors pourquoi 0-39? La gamme spécifique était ce qui a fonctionné dans la mise en œuvre originale des concepteurs. La raison pour laquelle des valeurs plus positives sont plus agréables est que le niveau agréable est ajouté à l'utilisation récente du processeur d'un processus pour déterminer la priorité. Afin de fournir une planification approximative à tour de rôle, le noyau garde une trace de la quantité de CPU que chaque processus a brûlée récemment et passe aux processus qui n'en ont pas autant. Plus le niveau est élevé, plus le temps processeur semble être important, et plus le planificateur mettra ce processus en veille ou le laissera dormir. Voir La conception du système d'exploitation UNIX par Maurice J. Bach, Prentice-Hall 1986, sec. 8.1 (8.1.4 pour la gentillesse en particulier). ISBN 0-13-201799-7.
la source
Vous vous trompez: si vous êtes sous UNIX où l'interface nice () a toujours du sens,
NZERO
c'est la valeur nice par défaut etNZERO is 20
.Pour rendre les choses plus évidentes: vous avez posé des questions sur la commande
nice
et en même temps mentionné les niveaux absolus, mais la belle commande ne gère pas les valeurs absolues mais plutôt les incréments par rapport au niveau actuel. Dans le cas de l'état par défaut, le niveau agréableNZERO
est de 20.Les bonnes valeurs sont 0..2 * NZERO-1 ou 0..39
Notez que bien que le planificateur UNIX par défaut puisse toujours faire quelque chose d'utile avec une belle valeur, cela n'a aucune signification au cas où vous utilisez un planificateur spécialisé, par exemple un planificateur en temps réel.
la source
nice
commande shell.