1

Считываю приоритет процесса из ядра, из тестовой проги и с помощью вывода ps.

Почему разные значения приоритета для одного и того же прооцесса?

Тестовая прога:

#include <stdio.h>
#include <sys/resource.h>

int main( int argc, char *argv[] ) {
   int which = PRIO_PROCESS;
   id_t pid;
   int ret;

   while (1) {
      pid = getpid();
      ret = getpriority (which, pid);

      printf ("Prio=%d pid=%d\n",ret,pid);
      sleep (10);
   }
}

Получаю значение приоритета 0

При выводе команды ps получаю значение приоритета 80 для этого процесса.

При считывании приоритета (опятьже для этого процесса) из функции ядра __sched schedule (void), которая находится в файле sched.c получаю значение 120.

Цифра 120 с одной стороны вроде адекватна (поскольку во всех доках она чаще всего приводится...) но считывая приоритеты остальных процессов также получаю 120. Поле prio структуры task_struct

Как можно обосновать такие разные данные?

2

neiro пишет:

Получаю значение приоритета 0

логично, по умолчанию все процессы получают nice==0

neiro пишет:

При выводе команды ps получаю значение приоритета 80 для этого процесса.

не в тот столбик посмотрели... вам нужен столбик NI.

neiro пишет:

При считывании приоритета (опятьже для этого процесса) из функции ядра __sched schedule (void), которая находится в файле sched.c получаю значение 120.

в ядре есть два различных приоритета - prio - это динамический приоритет, периодически пересчитывается. Есть ещё static_prio - равен 140 - nice. т.е.120.
Видимо вам просто повезло, что получали из prio всегда 120 или стоит тупой планировщик, который не пересчитывает приоритет.

95% процентов проблем находятся между клавиатурой и стулом.