Почему милость варьируется от -20 до 19?

22

Команда niceпозволяет вам настроить приоритет планирования («правильность») программы. Во всех Unix-подобных системах, которые я использовал, милость определяется диапазоном целых чисел, где -20 - наиболее предпочтительный приоритет планирования, 0 - по умолчанию, а 19 - наименее благоприятный.

Наличие 0 в качестве точности по умолчанию достаточно интуитивно понятно, но почему в качестве конечных точек диапазона были выбраны -20 и 19? Почему бы не -128 и 127, которые бы точно вписались в 8-битный байт со знаком? Или почему бы не от -100 до 100, что более интуитивно понятно для людей с десятичными мыслями, или аналогично, но немного более эргономично, от -99 до 99? Был ли выбран диапазон от -20 до 19 произвольно, или он имеет какое-то отношение к внутренним компонентам планировщика, с которым niceпервоначально взаимодействовал? (Я понимаю, что сегодня таких отношений нет, по крайней мере для Linux, чей планировщик использует приоритеты в диапазоне от 0 до 139. Однако меня интересуют исторические причины диапазона от -20 до 19.)

Psychonaut
источник
4
Я не могу найти ссылку, объясняющую, почему был выбран этот конкретный диапазон, но обратите внимание, что в V7 приоритет помещается в подписанный байт (см. Proc.h - и функция setpri устанавливает приоритет min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20), а приоритеты <25 были зарезервированы для процессы делают бесперебойные вещи. Так что милость должна была быть ограниченным диапазоном.
Марк Плотник,

Ответы:

7

Внутренние уровни милосердия 0-39, но приращения положительные или отрицательные. Источник . Таким образом, ответ заключается в том, что числа (положительные и отрицательные), принятые niceкомандой, дают вам значение от 20, уровень по умолчанию, до любого значения в диапазоне 0–39.

Так почему 0-39? Конкретный диапазон был тем, что работало в оригинальной реализации дизайнеров. Причина, по которой более позитивные значения более приятные, заключается в том, что хороший уровень добавляется к недавнему использованию процессора процессом при определении приоритета. Чтобы обеспечить приблизительное циклическое планирование, ядро ​​отслеживает, сколько ЦП было сожжено каждым процессом в последнее время, и переключается на процессы, которые не имели такого количества. Чем выше хороший уровень, тем больше процессорного времени он выглядит, как процесс, и тем чаще планировщик переводит этот процесс в спящий режим или оставляет его в спящем режиме. См . Проект операционной системы UNIX Мориса Дж. Баха, Прентис-Холл, 1986, с. 8.1 (специально для 8.1.4). ISBN 0-13-201799-7.

CXW
источник
1
Вы ошибаетесь, предполагая, что планировщик переведет процесс в спящий режим, если он имеет плохое приятное значение. Вместо этого планировщик не будет пробуждать спящий процесс, если есть другие процессы, готовые к запуску, и эти процессы имеют более хороший уровень. Обратите внимание, что процесс переводится в спящий режим, когда он вызывает системный вызов, который вызывает спящий режим для ресурсов, или когда процесс израсходовал свой процессорный квант, и есть другие более привилегированные процессы, ожидающие этого процессора.
Щил
-4

Вы ошибаетесь: если вы находитесь в UNIX, где интерфейс nice () все еще имеет смысл, NZEROэто значение nice по умолчанию и NZERO is 20.

Чтобы сделать это более очевидным: вы спросили о команде niceи в то же время упомянули абсолютные уровни, но команда nice не управляет абсолютными значениями, а скорее увеличивает их относительно текущего уровня. В случае состояния по умолчанию, хороший уровень NZERO- 20.

Хорошие значения: 0..2 * NZERO-1 или 0..39

Обратите внимание, что хотя планировщик UNIX по умолчанию все еще может делать что-то полезное с хорошим значением, это не имеет смысла, если вы используете специализированный планировщик, например планировщик реального времени.

Шили
источник
2
Вы, кажется, путаете интерфейс оболочки и интерфейс C. Этот вопрос о команде niceоболочки.
Жиль "ТАК ... перестать быть злым"
Ну, это вы путаете вещи. Хорошая команда знает только о дельтах, но в вопросе упоминаются хорошие значения. Вопрос был о хороших ценностях, и я ответил на это.
Щил