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.
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.
CPU_penalty = C * R/32C = C * D/32Der 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 .
p_nice = base priority + nice valueVerwenden Sie nun die folgende Formel:If p_nice > 60,
then x_nice = (p_nice * 2) - 60,
else x_nice = p_nice.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)]