Имеется 5 процессов(не родственных, может и > 5), все они висят на семафоре(хотят сделать lock). Как заставить шедулер, делать lock в порядке пораждения процессов?
Спасибо за sched_get_priority_min, я так понимаю с помощью политики SCHED_FIFO, можно решить мою проблему.
Установка приоритета, для вызвавшегося процесса:
struct sched_param par;
par.sched_priority = 10;
if(sched_setscheduler(getpid(),SCHED_FIFO,&par) == -1)
{perror("set sched"); exit(-1);}
после, запуска сомтрю поле PRI(ps -auxl) и там приоритет -4;
Почему он не выстовляется в 10?
Ну что от рута, так это естественно. В мане сказано, что SCHED_FIFO работает только со значениями статического приоритета, большими нуля. А sched_setscheduler(), выставляет приоритет -4(хотя я выставляю >0), соответственно этот алгоритм планирования отрабатывать не будет.
> Почему он не выстовляется в 10?
ps вам показывает вот что:
int task_prio(const task_t *p)
{
return p->prio - MAX_RT_PRIO;
}
проверяйте свой приоритет с помощью sched_getparam().
тем не менее странно, ps должен показывать -11.
какое ядро? может procutils или как они там называются
нужно обновить.
semaphores приоритет процесса игнорируют, они как-бы
FIFO, но без гарантии. это если вы про kernel.