Краткий ответ
PR является приоритетным уровнем. Чем ниже PR, тем выше будет приоритет процесса.
PR рассчитывается следующим образом:
- для нормальных процессов: PR = 20 + NI (NI хорошо и колеблется от -20 до 19)
- для процессов реального времени: PR = - 1 - real_time_priority
(real_time_priority варьируется от 1 до 99)
Длинный ответ
Существует два типа процессов: обычные и в реальном времени.
Для обычных (и только для них) метод nice применяется следующим образом:
Приятно
Шкала «добротности» варьируется от -20 до 19, тогда как -20 - самый высокий приоритет, а 19 - самый низкий приоритет. Уровень приоритета рассчитывается следующим образом:
PR = 20 + NI
Где NI - хороший уровень, а PR - уровень приоритета. Итак, как мы видим, -20 фактически отображается на 0, а 19 - на 39.
По умолчанию значение nice программы равно 0, но пользователь root может запускать программы с указанным значением nice с помощью следующей команды:
nice -n <nice_value> ./myProgram
В реальном времени
Мы могли бы пойти еще дальше. Хороший приоритет на самом деле используется для пользовательских программ. Тогда как общий приоритет UNIX / LINUX имеет диапазон 140 значений, значение nice позволяет процессу отображать последнюю часть диапазона (от 100 до 139). Это уравнение оставляет недоступными значения от 0 до 99, которые будут соответствовать отрицательному уровню PR (от -100 до -1). Чтобы иметь возможность доступа к этим значениям, процесс должен быть указан как «в реальном времени».
В среде LINUX существует 5 политик планирования, которые можно отобразить с помощью следующей команды:
chrt -m
Который покажет следующий список:
1. SCHED_OTHER the standard round-robin time-sharing policy
2. SCHED_BATCH for "batch" style execution of processes
3. SCHED_IDLE for running very low priority background jobs.
4. SCHED_FIFO a first-in, first-out policy
5. SCHED_RR a round-robin policy
Процессы планирования могут быть разделены на 2 группы: обычные политики планирования (от 1 до 3) и политики планирования в реальном времени (4 и 5). Процессы реального времени всегда будут иметь приоритет над обычными процессами. Процесс в реальном времени может быть вызван с помощью следующей команды (например, как объявить политику SCHED_RR):
chrt --rr <priority between 1-99> ./myProgram
Для получения значения PR для процесса в реальном времени применяется следующее уравнение:
PR = -1 - rt_prior
Где rt_prior соответствует приоритету между 1 и 99. По этой причине процесс, который будет иметь более высокий приоритет по сравнению с другими процессами, будет вызываться с номером 99.
Важно отметить, что для процессов реального времени значение nice не используется.
Чтобы увидеть текущую «привлекательность» и значение PR процесса, можно выполнить следующую команду:
top
Который показывает следующий вывод:
На рисунке показаны значения PR и NI. Хорошо отметить процесс со значением PR -51, которое соответствует значению в реальном времени. Есть также некоторые процессы, чье значение PR указано как «rt». Это значение фактически соответствует значению PR -100.
niceness
можно использовать для предоставления отрицательного приоритета, чтобы задача сniceness
уходом с пути высокоприоритетных задач? (то есть онnice
позволяет другим ресурсам доступа? Или это меня просто смутило?