setscheduler () в ядре Linux - PullRequest
       1

setscheduler () в ядре Linux

3 голосов
/ 24 апреля 2011

каждый, я нашел это внутри static int setscheduler(pid_t pid, int policy, struct sched_param *param):

p->policy = policy;

if (policy != SCHED_OTHER) p->prio = MAX_USER_RT_PRIO-1 - p->rt_priority;

p - указатель на дескриптор задачи с текущим pid (параметр выше), поэтому, если его политика не SCHED_OHTER (это означает SCHED_FIFO или SCHED_RR) но почему мы меняем p-> prio таким образом?что именно означает rt_priority?заранее спасибо

1 Ответ

2 голосов
/ 24 апреля 2011

Короткий ответ : rt_priority означает приоритет в реальном времени, а для SCHED_RR и SCHED_FIFO он определяет, сколько времени получит процесс.

Длинный ответ

Прежде всего, в Linux реализовано нечто, называемое Realtime Process Scheduling (SCHED_RR и SCHED_FIFO). Процессы, работающие в соответствии с этими политиками, всегда имеют приоритет над другими процессами. Linux обеспечивает 99 уровней приоритета в реальном времени, пронумерованных от 1 (самый низкий) до 99 (самый высокий).

В ядре, если я правильно помню, «меньшие числа означают лучшие предпочтения» - меньшие p->prio означают лучшие приоритеты .

Вот как выглядит sched_setscheduler

int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);

А sched_param

struct sched_param {
     int sched_priority;        /* Scheduling priority */
};

Целое число sched_priority для политики SCHED_RR или SCHED_FIFO означает «приоритет в реальном времени», который, как я предполагаю, равен rt_priority. Так что ядро ​​правильно делает

  • Возьмите максимальный приоритет
  • Вычтите приоритет реального времени из этого значения. Чем больше приоритет (чем больше он вычитается), тем лучше обработка планировщиком.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...