pthread sched_get_priority_min / max implementação para SCHED_OTHER / SCHED_FIFO

Eu estou tentando escrever uma classe de threading semi-portátil para um projeto que estou trabalhando, e ao tentar definir a prioridade de um segmento, me deparei com um enigma no mundo pthread.

Dado o seguinte código:

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

No OpenBSD isto imprimiria o seguinte:

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

No Ubuntu, isso produz:

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

Minha pergunta é mais em relação aoSCHED_OTHER prioridade. De acordo com toda a documentação que consegui reunir (sched.h, google, SO, SE), meu entendimento é que se deve tentar recuperar a prioridade do processo atual e atribuir prioridades com base nisso. Isso é bom, exceto ao recuperar os valores min / max paraSCHED_OTHER. Como o agendamento depende do sistema, se obtiver a prioridade do processo atual comoSCHED_OTHER e tentar obter os valores min / max em um Ubuntu (ou outros sistemas Linux que eu encontrei), meus valores seriam 0-0, o que não funcionará para tentar definir um intervalo de prioridade válido. No entanto, recebo valores válidos paraSCHED_OTHER em outros sistemas tipo unix (OpenBSD, etc).

Como minha principal preocupação é apenas tentar obter um intervalo válido de valores de prioridades (para garantir que o usuário não insira um valor muito alto ou baixo), não deveria nem me preocupar com a prioridade do processo atual e só obter o min / max valores paraSCHED_FF ouSCHED_RR já que esses valores parecem me dar intervalos válidos para os vários sistemas linux / unix que encontrei, ou estou perdendo completamente o ponto?

Agradecemos antecipadamente e, por favor, deixe-me saber se não estou claro ou declaro alguma coisa incorretamente.

EDITAR 1: por favor, note que a minha principal preocupação é com uma maneira 'portátil' para obter intervalos válidos mais do que a prioridade do processo em si.obrigado!

questionAnswers(1)

yourAnswerToTheQuestion