pthread implementacja sched_get_priority_min / max dla SCHED_OTHER / SCHED_FIFO

Próbuję napisać pół-przenośną klasę wątków dla projektu, nad którym pracuję, i próbując ustawić priorytet wątku, natknąłem się na zagadkę w świecie wątków.

Podany następujący kod:

#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));
}

W OpenBSD spowoduje to wydrukowanie:

Valid priority range for SCHED_OTHER: 0 - 31
Valid priority range for SCHED_FIFO: 0 - 31
Valid priority range for SCHED_RR: 0 - 31

W Ubuntu tworzy to:

Valid priority range for SCHED_OTHER: 0 - 0
Valid priority range for SCHED_FIFO: 1 - 99
Valid priority range for SCHED_RR: 1 - 99

Moje pytanie dotyczy bardziejSCHED_OTHER priorytet. Zgodnie z całą dokumentacją, którą udało mi się zebrać (sched.h, google, SO, SE), rozumiem, że należy próbować pobrać priorytet procesu bieżącego procesu i przypisać mu priorytet. Jest to w porządku, z wyjątkiem pobierania wartości min / max dlaSCHED_OTHER. Ponieważ planowanie jest zależne od systemu, jeśli otrzymam priorytet bieżącego procesu jakoSCHED_OTHER i spróbuj uzyskać wartości min / max w Ubuntu (lub innych systemach linuksowych, z którymi się spotkałem), moje wartości będą wynosiły 0-0, co nie zadziała, jeśli spróbuję ustawić prawidłowy zakres priorytetów. Jednak dostaję poprawne wartości dlaSCHED_OTHER na innych systemach uniksopodobnych (OpenBSD itp.).

Ponieważ moim głównym zmartwieniem jest tylko próba uzyskania prawidłowego zakresu wartości priorytetów (aby upewnić się, że użytkownik nie wprowadzi zbyt wysokiej lub niskiej wartości), czy nie powinienem nawet zawracać sobie głowy priorytetem bieżącego procesu i uzyskać tylko min / max wartości dlaSCHED_FF lubSCHED_RR ponieważ te wartości wydają się dawać mi prawidłowe zakresy dla różnych systemów linux / unix, z którymi się zetknąłem, czy też całkowicie brakuje mi tego punktu?

Z góry dziękuję i proszę dać mi znać, jeśli jestem niejasny lub coś zniekształcić.

EDYTUJ 1: proszę zauważyć, że moim głównym zmartwieniem jest „przenośny” sposób uzyskania ważniejszych zakresów niż sam proces ”priorytet!

questionAnswers(1)

yourAnswerToTheQuestion