Prioritätsberechnung

Der Kernel verwaltet für jeden Thread einen Prioritätswert (manchmal als Ausführungspriorität bezeichnet). Der Prioritätswert ist eine positive ganze Zahl und variiert umgekehrt mit der Bedeutung des zugeordneten Threads. Das heißt, ein kleinerer Prioritätswert weist auf einen wichtigeren Thread hin. Wenn der Scheduler nach einem zuzuteilenden Thread sucht, wählt er den zuteilbaren Thread mit dem kleinsten Prioritätswert aus.

Die Formel für die Berechnung des Prioritätswerts lautet:
priority value = base priority + nice penalty + (CPU penalty based on recent CPU usage)

Der aktuelle Wert für die CPU-Auslastung eines bestimmten Threads wird jedes Mal um 1 erhöht, wenn dieser Thread die CPU steuert, wenn die Zeitgeberunterbrechung auftritt (alle 10 Millisekunden). Der aktuelle Wert für die CPU-Auslastung wird in der Spalte C in der Ausgabe des Befehls ps angezeigt. Der Maximalwert der letzten CPU-Auslastung ist 120.

Der Standardalgorithmus berechnet die CPU-Penalisierung, indem die aktuelle CPU-Auslastung durch 2 geteilt wird. Das Verhältnis zwischen CPU-Strafe und aktueller CPU-Belastung beträgt daher 0.5. Dieses Verhältnis wird durch einen Wert mit dem Namen R gesteuert (der Standardwert ist 16). Die Formel lautet wie folgt:
CPU_penalty = C * R/32
Einmal pro Sekunde dividiert der Standardalgorithmus den aktuellen CPU-Auslastungswert jedes Threads durch 2. Der Faktor 'recent-CPU-usage-decay' ist daher 0.5. Dieser Faktor wird durch einen Wert namens D gesteuert (der Standardwert ist 16). Die Formel lautet wie folgt:
C = C * D/32

Der Algorithmus zur Berechnung des Prioritätswerts verwendet den Wert nice des Prozesses, um die Priorität der Threads im Prozess zu bestimmen. Mit zunehmender CPU-Zeit nimmt die Priorität mit dem Effekt nice ab. Mit schedo -r -d können Sie die Prioritätsberechnung zusätzlich steuern, indem Sie neue Werte für R und D festlegen. Weitere Informationen finden Sie unter Befehl schedo .

Beginnen Sie mit der folgenden Gleichung:
p_nice = base priority + nice value
Verwenden Sie nun die folgende Formel:
If p_nice > 60,
   then x_nice = (p_nice * 2) - 60,
   else x_nice = p_nice.
Wenn der Wert für nice größer als 20 ist, hat er die doppelte Auswirkung auf den Prioritätswert, als wenn er kleiner-gleich 20 ist. Die neue Prioritätsberechnung (ganzzahliges Abschneiden wird ignoriert) lautet wie folgt:
priority value = x_nice + [(x_nice + 4)/64 * C*(R/32)]