pthread sched_get_priority_min/max-Implementierung für SCHED_OTHER/SCHED_FIFO
Bin ich zu schreiben versucht, eine semi-portable-threading-Klasse für ein Projekt an dem ich arbeite, und beim festlegen der Priorität eines Threads, stieß ich auf ein Problem in der pthread-Welt.
Folgenden code:
#include <stdio.h>
#include <unistd.h>
#include <sched.h>
main()
{
printf("Valid priority range for SCHED_OTHER: %d - %d\n",
sched_get_priority_min(SCHED_OTHER),
sched_get_priority_max(SCHED_OTHER));
printf("Valid priority range for SCHED_FIFO: %d - %d\n",
sched_get_priority_min(SCHED_FIFO),
sched_get_priority_max(SCHED_FIFO));
printf("Valid priority range for SCHED_RR: %d - %d\n",
sched_get_priority_min(SCHED_RR),
sched_get_priority_max(SCHED_RR));
}
In OpenBSD drucken würde die folgenden:
Valid priority range for SCHED_OTHER: 0 - 31
Valid priority range for SCHED_FIFO: 0 - 31
Valid priority range for SCHED_RR: 0 - 31
In Ubuntu es produziert dies:
Valid priority range for SCHED_OTHER: 0 - 0
Valid priority range for SCHED_FIFO: 1 - 99
Valid priority range for SCHED_RR: 1 - 99
Meine Frage ist mehr in Bezug auf die SCHED_OTHER
Priorität. Nach allen Unterlagen, die ich habe in der Lage, aufbringen (sched.h, google, SO, SE), mein Verständnis ist, dass man versuchen sollte, und rufen Sie die Prozess-Priorität des aktuellen Prozesses und Priorität, basierend auf, dass. Das ist in Ordnung, außer beim abrufen der min/max-Werte für SCHED_OTHER
. Seit scheduling-system abhängig, wenn ich die Priorität des aktuellen Prozesses als SCHED_OTHER
und versuchen, um die min - /max-Werte auf einem Ubuntu (oder andere linux Systeme, die ich begegnet bin), meine Werte wären 0-0, die nicht für die Arbeit, die versuchen, eine gültige Priorität Bereich. Allerdings bekomme ich gültige Werte für SCHED_OTHER
auf andere unix-ähnliche Betriebssysteme (OpenBSD, etc).
Da meine größte Sorge ist nur versuchen, um eine gültige Prioritäten der Werte (um sicherzugehen, dass der Benutzer nicht ein zu hoher oder niedriger Wert), sollte ich es erst gar nicht mit dem aktuellen Prozess Priorität und nur die min/max-Werte für SCHED_FF
oder SCHED_RR
da diese Werte scheinen mir gültige Bereiche für die verschiedenen linux/unix-Systeme, die ich angetroffen habe, oder bin ich fehlt der Punkt komplett?
Vielen Dank im Voraus und bitte lassen Sie mich wissen, wenn ich mich unklar oder misstating etwas.
EDIT 1: bitte beachten Sie, dass meine größte Sorge ist, mit einem "tragbaren" Weg, um gültige reicht mehr als der Prozess Priorität selbst..danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Bereich der Prioritäten, die Sie bekommen in Ubuntu (wie auch andere Linux-basierte OS) für SCHED_OTHER ist [0,0], die ist einen gültigen Bereichs.
Das bedeutet, dass alle nicht-Echtzeit-Prozesse haben die gleiche Priorität " und der einzige Unterschied ist in 'nice' - Wert.
Sehen die schön system-Aufruf für mehr info.
Ich bin mir nicht sicher wie OpenBSD scheduler funktioniert, aber nicht schön() syscall, ist in POSIX und es sollte unterstützt UNIX-Systeme.