LinuxForum.Fans
Тема

Разные значения приоритета процесса, почему?

Автор: neiro 2 сообщений 1385 просмотров
#172212

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

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

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

text

#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

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

#172229
neiro написал:
Получаю значение приоритета 0

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

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

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

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

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

Войдите или зарегистрируйтесь, чтобы ответить.