Warum reicht die Feinheit von -20 bis 19?

22

Mit dem niceBefehl können Sie die Planungspriorität ("Nizza") eines Programms anpassen. Auf allen Unix-ähnlichen Systemen, die ich verwendet habe, wird die Genauigkeit durch eine Reihe von Ganzzahlen angegeben, wobei -20 die günstigste Planungspriorität, 0 die Standardeinstellung und 19 die ungünstigste ist.

0 als Standardfeinheit zu haben, ist intuitiv genug, aber warum wurden -20 und 19 als Endpunkte des Bereichs ausgewählt? Warum nicht -128 und 127, die genau in ein 8-Bit-Byte mit Vorzeichen passen? Oder warum nicht -100 bis 100, was für dezimal denkende Menschen intuitiver ist, oder ähnlich, aber etwas ergonomischer, -99 bis 99? Wurde der Bereich -20 bis 19 willkürlich ausgewählt oder besteht eine Beziehung zu den Interna des Schedulers, mit dem niceursprünglich eine Schnittstelle bestand? (Ich verstehe, dass es heute keine solche Beziehung gibt, zumindest für Linux, dessen Scheduler Prioritäten im Bereich von 0 bis 139 verwendet. Ich bin jedoch an den historischen Gründen für den Bereich von -20 bis 19 interessiert.)

Psychonaut
quelle
4
Ich kann keine Referenz finden, die erklärt, warum dieser bestimmte Bereich ausgewählt wurde. Beachten Sie jedoch, dass in V7 die Priorität in ein vorzeichenbehaftetes Byte passt (siehe proc.h ) und die Funktion setpri die Priorität auf min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20) und Prioritäten <25 reserviert wurden Prozesse, die unterbrechungsfreie Dinge tun. Die Freundlichkeit musste also in einem begrenzten Bereich liegen.
Mark Plotnick

Antworten:

7

Die internen Helligkeitsstufen sind 0-39, aber die Inkremente sind positiv oder negativ. Quelle . Die Antwort lautet also, dass Sie mit den vom niceBefehl akzeptierten Zahlen (positiv und negativ) von 20, der Standardstufe, an eine beliebige Stelle im Bereich von 0 bis 39 gelangen.

Warum also 0-39? Das spezifische Sortiment war das, was in der ursprünglichen Implementierung der Designer funktioniert hat. Der Grund dafür, dass positivere Werte besser sind, besteht darin, dass bei der Bestimmung der Priorität der aktuelle CPU-Verbrauch eines Prozesses um den netten Wert erhöht wird. Um eine ungefähre Round-Robin-Planung zu ermöglichen, protokolliert der Kernel, wie viel CPU jeder Prozess in letzter Zeit gebrannt hat, und wechselt zu Prozessen, die nicht so viel hatten. Je höher die angenehme Stufe, desto mehr CPU-Zeit scheint der Prozess verbraucht zu haben, und desto häufiger wird dieser Prozess vom Scheduler in den Energiesparmodus versetzt oder in den Energiesparmodus versetzt. Siehe Das Design des UNIX-Betriebssystems von Maurice J. Bach, Prentice-Hall 1986, Sek. 8.1 (8.1.4 speziell für die Freundlichkeit). ISBN 0-13-201799-7.

cxw
quelle
1
Sie täuschen sich, wenn Sie davon ausgehen, dass der Scheduler einen Prozess in den Ruhezustand versetzt, wenn er einen schlechten Wert hat. Stattdessen weckt der Scheduler keinen Ruhezustand, wenn andere Prozesse zur Ausführung bereit sind und diese Prozesse ein besseres Niveau haben. Beachten Sie, dass ein Prozess in den Energiesparmodus versetzt wird, wenn er entweder einen Systemaufruf aufruft, der einen Energiesparmodus für Ressourcen erzwingt, oder wenn ein Prozess seine CPU-Kapazität aufgebraucht hat und andere privilegiertere Prozesse auf die CPU warten.
Schily
-4

Sie täuschen sich: Wenn Sie auf einem UNIX-System arbeiten, auf dem die nice () - Schnittstelle noch Sinn macht, NZEROist nice der Standardwert und NZERO is 20.

Um es klarer zu machen: Sie haben nach dem Befehl gefragt niceund gleichzeitig die absoluten Ebenen erwähnt, aber der Befehl nice verwaltet keine absoluten Werte, sondern erhöht sich relativ zur aktuellen Ebene. Im Falle des Standardzustands ist das nette Level NZERO20.

Schöne Werte sind 0..2 * NZERO-1 oder 0..39

Beachten Sie, dass der Standard-UNIX-Scheduler möglicherweise noch etwas Nützliches mit einem guten Wert kann, aber keine Bedeutung hat, wenn Sie einen speziellen Scheduler verwenden, z. B. einen Echtzeit-Scheduler.

schily
quelle
2
Sie scheinen die Shell-Schnittstelle und die C-Schnittstelle zu verwechseln. Diese Frage bezieht sich auf den niceShell-Befehl.
Gilles 'SO - hör auf böse zu sein'
Nun, Sie sind es, die die Dinge verwirren. Der Befehl nice kennt sich nur mit Deltas aus, aber in der Frage werden nette Werte genannt. Die Frage betraf nette Werte und ich beantwortete diese.
Schily