Почему значения приятности обратно пропорциональны приоритету процесса?

красивость процесса уменьшается с увеличением его приоритета.

Выдержка из книги «Начало программирования для Linux», 4th издание, стр. 169:

Приоритет по умолчанию равен 0. Положительные приоритеты используются для фоновых задач, которые выполняются, когда никакая другая задача с более высоким приоритетом не готова к запуску. Отрицательные приоритеты заставляют программу запускаться чаще, занимая большую долю доступного процессорного времени. Диапазон допустимых приоритетов: от -20 до +20. Это часто сбивает с толку, потому что чем выше числовое значение, тем ниже приоритет выполнения.

Есть ли какая-то особая причина для отрицательных значений, соответствующих более высокому приоритету процесса (в отличие от увеличения приоритета для процессов с более высокой ценностью)?


person asheeshr    schedule 28.12.2012    source источник
comment
по теме: superuser. ком/вопросы/391980/   -  person Thilo    schedule 28.12.2012
comment
Я бы обратился с этим вопросом к serverfault, так как это не о программировании, извините.   -  person Roman Newaza    schedule 28.12.2012
comment
Хотя это говорит о том, как могут думать программисты - просто показывает, что не все, что мы делаем, понятно :)   -  person Ewald    schedule 28.12.2012
comment
Это может быть ошибка: POSIX не определяет никакой семантики для значений, которые эти функции получают и устанавливают. Как вы увидите, реализация Linux совершенно противоположна тому, что имели в виду авторы синтаксиса POSIX. gnu.org/software/libc/manual/html_node/Priority.html< /а>   -  person Thilo    schedule 28.12.2012
comment
@RomanNewaza Я действительно не понимаю, почему это вообще должно быть на ServerFault. Unix или SuperUser, возможно.   -  person asheeshr    schedule 28.12.2012
comment
@AshRj, да, ты прав.   -  person Roman Newaza    schedule 28.12.2012
comment
@AshRj, как вы объяснили .. Диапазон допустимых приоритетов от -20 до +20, но я думаю, что +20 нет, а +19.   -  person akp    schedule 28.12.2012
comment
@akp В моей книге указано от -20 до +20, а в вики указано от -20 до +19, поэтому я точно не знаю. Скорее всего будет до +19   -  person asheeshr    schedule 28.12.2012
comment
@AshRJ да, это +19, конечно ... есть 40 приоритетов от -20 до +19, включая 0. и для получения дополнительной информации прочитайте мой ответ.   -  person akp    schedule 28.12.2012


Ответы (4)


Ответ @Ewald правильный, что подтверждает Джерри Пик et al. в Unix Power Tools (O'Reilly, 2007, стр. 507):

Вот почему число хорошее обычно называют хорошим: задание с высоким уровнем качества очень хорошо относится к пользователям вашей системы (т. е. оно выполняется с низким приоритетом), в то время как работа с небольшой приятностью загружает процессор. Термин «вежливость» неудобен, как и сама система приоритетов. К сожалению, это единственный термин, который одновременно является точным (хорошие числа используются для вычисления приоритетов, но сами по себе не являются приоритетами) и позволяет избежать ужасных двусмысленностей ("повышение приоритета означает понижение приоритета..." ).

Nice имеет это значение, по крайней мере, начиная с V6 Unix, но руководство V6 никогда не объясняет это явно. Диапазон допустимых значений был от -220 до +20, отрицательные числа зарезервированы для суперпользователя. Диапазон был изменен с -20 до +20 в V7.

person Fred Foo    schedule 28.12.2012

Истерические причины - я имею в виду исторические... Я почти уверен, что это началось с возрастания чисел от 0 до 20, и сначала было взято самое низкое доступное. Потом кто-то пришел к выводу, что "Хм, а что, если нам нужно сделать что-то БОЛЕЕ важное" - что ж, нам придется уйти в минус.

Вы хотите, чтобы приоритет был сортируемым значением, поэтому, если вы начинаете с «по умолчанию — ноль», вам нужно либо сделать более высокий приоритет большим числом (но «приоритет 1» в повседневной речи выше, чем «приоритет 2» — когда ваш босс говорит: «Сделайте это своим приоритетом номер 1», это значит, что это важно, верно?). Будучи компьютером, очевидно, что приоритет 0 выше приоритета 1, а приоритет -1 выше приоритета 0.

В конце концов, это произвольный выбор. Может быть, Кен Томсон, Деннис Ритчи или кто-то из тех парней сможет точно сказать, почему они выбирают именно эту последовательность, а не 0..255, например.

person Mats Petersson    schedule 28.12.2012
comment
Ритчи умер больше года назад, но руководство Unix V6 описывает исходные nice(1) и nice(2): диапазон значений корректности был от -220 до 20, причем отрицательные значения были доступны только суперпользователю. - person Fred Foo; 28.12.2012
comment
Да, я знаю, что DR больше не с нами. Я могу просто сказать, что это был простой способ определить, где начинается особый уровень — если он меньше нуля, вы должны быть суперпользователем. - person Mats Petersson; 28.12.2012
comment
Кроме того, это упрощает вычисление — просто прибавьте вежливость к приоритету (или вычтите его, если низкие числа означают высокий приоритет). - person Fred Foo; 28.12.2012
comment
Верно, так что в планировщике есть нечто большее, чем вежливость - значение вежливости добавляется в расчет приоритета, а не ВЕСЬ приоритет процесса. Он также учитывает активность ввода-вывода и использование процессора. Процессы с большим количеством операций ввода-вывода и низкой загрузкой процессора получат ускорение по сравнению с процессами, которые используют много ресурсов ЦП. Это помогает системе получить хорошую пропускную способность ввода-вывода, где в противном случае они были бы заблокированы работой с интенсивным использованием ЦП, которую можно выполнить позже. - person Mats Petersson; 28.12.2012
comment
Мне нравится сравнение с тем, как люди говорят о приоритетах на английском языке. Нет способа доказать это, но объяснение имеет большой смысл. - person elifiner; 02.02.2015

Прежде всего, ответ немного длинный, но он предназначен только для уточнения.

Как и в ядре Linux, каждый обычный процесс может иметь приоритеты, называемые статическими приоритетами, от 100 (самый высокий) до 139 (самый низкий). Таким образом, процессу можно присвоить 40 приоритетов.

поэтому, когда создается любой процесс, он получает приоритет своего родителя, но если пользователь хочет изменить его приоритет, это можно сделать с помощью системного вызова nice (nice_value).

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

time={
     if static_priority<120

       (140-static_priority)*20 

     if static_priority>=120

       (140-static_priority)*5

поэтому сервисная процедура sys_nice() обрабатывает системный вызов nice(). Хотя nice_value может иметь любое значение, абсолютные значения, превышающие 40, обрезаются до 40. Традиционно отрицательные значения соответствуют запросам на увеличение приоритета и требуют привилегий суперпользователя, а положительные значения соответствуют запросам на снижение приоритета. В случае отрицательного значения nice_value функция вызывает функцию enable(), чтобы проверить, имеет ли процесс возможность CAP_SYS_NICE. Кроме того, функция вызывает ловушку безопасности security_task_setnice(). поэтому в конце nice_value используется для расчета статического приоритета, а затем этот статический приоритет используется для расчета кванта базового времени.

поэтому ясно, что значения -ve используются для увеличения приоритета, поэтому требуется доступ суперпользователя, а значения +ve используются для снижения приоритета, поэтому доступ суперпользователя не требуется.

person akp    schedule 28.12.2012

Да, она становится ХОРОШЕЙ по мере увеличения числа и ЗЛОЕ по мере уменьшения числа. Таким образом, процесс считается более дружелюбным, когда он не использует все ресурсы, и неприятным, когда он становится более жадным с ресурсами.

Думайте об этом как о приятных баллах: чем лучше вы относитесь к другим, тем больше у вас баллов.

person Ewald    schedule 28.12.2012
comment
Мне трудно в это поверить, это единственная причина :) - person asheeshr; 28.12.2012
comment
@AshRj: тем не менее, это все. страница Википедии на сайте Nice цитирует Kernighan and Pike (1984) для этимология, которую можно считать авторитетным источником. - person Fred Foo; 28.12.2012
comment
@larsmans Я только что проверил источник, указанный на странице Википедии, The Unix Programming Environment, стр. 35, а также в других случаях, нигде авторы не приводят этого рассуждения или, если на то пошло, никаких рассуждений или объяснений того, почему значение приятности уменьшается. Они ссылаются на nice utility только в двух случаях в книге. - person asheeshr; 28.12.2012
comment
@AshRj Да - это правда - как история о том, почему курсор называется курсором ... Потому что он побуждает вас ругаться :) - person Ewald; 28.12.2012
comment
@AshRj: интересно - даже когда Википедия цитирует источники, вы не можете полностью им доверять. Я только что нашел документацию V6 Unix, и нигде это не объясняет название nice. - person Fred Foo; 28.12.2012