Чому приємність коливається від -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).


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 Моріса Дж. Баха, Prentice-Hall 1986, сек. 8.1 (специфічно 8.1.4). ISBN 0-13-201799-7.


1
Ви помиляєтесь, припускаючи, що планувальник переведе процес сну, якщо він має погане значення. Натомість планувальник не розбудить сплячий процес, якщо є інші процеси, готові до запуску, і ці процеси мають кращий приємний рівень. Зауважте, що процес увімкнено, коли він або викликає системний виклик, який примушує спати ресурси, або коли процес використовується його квантовим процесором і є інші більш привілейовані процеси, які чекають процесора.
schily

-4

Ви помиляєтеся: якщо ви перебуваєте в UNIX, де інтерфейс nice () все ще має сенс, NZEROце гарне значення за замовчуванням і NZERO is 20.

Щоб зробити щось більш очевидним: ви запитували про команду niceі в той же час згадали абсолютні рівні, але команда nice не керує абсолютними значеннями, а скоріше приростом відносно поточного рівня. У випадку стану за замовчуванням хороший рівень NZEROстановить 20.

Приємні значення 0..2 * NZERO-1 або 0..39

Зауважте, що хоча планувальник UNIX за замовчуванням все ще може зробити щось корисне з хорошим значенням, немає сенсу, якщо ви використовуєте спеціалізований планувальник, наприклад, планувальник у реальному часі.


2
Здається, ви плутаєте інтерфейс оболонки та інтерфейс C. Це питання стосується команди niceоболонки.
Жил "ТАК - перестань бути злим"

Добре, що ви плутаєте речі. Гарна команда знає лише про дельти, але в цьому питанні згадуються приємні значення. Питання стосувалося приємних цінностей, і я відповів на це.
schily
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.