При прочих равных условиях процессорное время распределяется между
выполняющимися процессами поровну, но процесс может установить добавку к
приоритету. Добавка эта, однако, не повышает, а понижает приоритет процесса в
смысле использования процессора. Только процессы суперпользователя могут
получать отрицательную добавку к приоритету, то есть, реально повышать свой
приоритет.
Это обосновано тем, что в ядре Linux используется два класса приоритетов:
- Unreal-time priority.
- Real-time priority
Unreal-time priority делятся на два подкласса:
-
Статический приоритет или nice-приоритет, Значение nice-приоритета может лежать в диапазоне от -20 до 19, по умолчанию используется значение 0. Значение –20 соответствует наиболее высокому приоритету. nice-приоритет не изменяется планировщиком, он наследуется от родителя или его указывает пользователь.
-
Динамический приоритет, на основании которого работает планировщик.
Динамический приоритет вычисляется исходя из значения параметра пicе для данной задачи путем вычисления надбавки или штрафа в диапазоне от -5 до 5, в зависимости от интерактивности задачи. Для определения интерактивности в ядре Linux предусмотрен изменяемый показатель того, как соотносится время, которое процесс проводит в приостановленном состоянии, со временем, которое процесс проводит в состоянии готовности к выполнению.
Real-time priority лежат в диапазоне от 1 до (MAX_RT_PRIO-1), По умолчанию диапазон значений приоритетов реального времени составляет от 1 до 99.
Для стратегии планирования в режиме не реального времени (SCHED_OTHER) пространство приоритетов реального времени объединяется с пространством значений параметра nice, что соответствует диапазону приоритетов от значения MAX_RT_PRIO до значения (MAX_RT_PRIO+40). По умолчанию это означает, что диапазон значений параметра nice от -20 до +19 взаимно однозначно отображается в диапазон значений приоритетов от 100 до 139. И, таким образом, планирование выполняется по уровням приоритетов от 1 до 139.
Изменить приоритет процесса в Linux можна при помощи системного вызова
nice, а приоритет другого процесса может быть изменен
системным вызовом setpriority..
Системный вызов getpriority позволяет узнать приоритет процесса.