Планувальник Linux: як він працює з процесами?
Планувальник процесів — частина ядра системи, яка призначає процесорний час процесам. Саме він вирішує, в якій послідовності вони будуть виконуватися. Якщо не знаєте, що таке процес, краще прочитайте цей матеріал.
Планувальник лежить в основі багатозадачних систем, в тому числі й Linux. Ефективне використання ресурсів — його головне завдання, і чим кращий планувальник, тим краще ядро операційної системи.
Як працює планувальник процесів?
На папері все просто: є готові до виконання (runnable) процеси, є процесори. Щоб все працювало оптимально, якийсь процес завжди повинен виконуватися. Але якщо процесорів менше, ніж процесів, то квантів часу на всіх відразу не вистачить.
Планувальник аналізує інформацію від процесів в черзі та на її основі вибирає наступний для виконання. Але в багатозадачних операційних системах все трохи складніше.
Про системи моніторингу інфраструктури IT зможете прочитати за лінком.
Особливості процесів і багатозадачності
Якщо на комп’ютері один процесор, операційні системи роблять потрібну кількість віртуальних процесорів. А якщо є кілька фізичних, то процеси виконуються паралельно на них.
Багатозадачні ОС на будь-яких типах машин можуть тримати процеси в пам’яті, але виконувати лише один. Решта будуть в очікуванні ключової дії: введення/виведення даних, отримання даних, певного часу і тому подібного.
База даних DATTALION: як жінки документують війну в Україні.
Багатозадачність в таких системах буває двох видів:
- кооперативна
- преемптивна (та, що витісняє)
Преемптивна багатозадачність
Linux і майже всі Unix-и працюють за преемптивною системою. У таких ОС саме планувальник процесів вирішує які процеси виконувати або зупиняти. Та обставина, що примусово заморожує процес — це витіснення (преемпція).
Відрізок часу, коли процес буде виконуватися до преемпції, називається квантом часу або таймслайсом. Тривалість кванта відома заздалегідь, вираховується динамічно, і через управління нею планувальник процесів наперед становить умовний графік роботи всієї системи. Водночас він не дає одному процесу монопольно використовувати всі ресурси.
Кооперативна багатозадачність
А в кооперативній системі багатозадачності процес буде виконуватися до моменту, поки він сам не вирішить припинити виконання. Коли процес довільно заморожується, це називається передачею управління (yielding — буквально “відступлення”).
У корпоративної багатозадачності багато мінусів. У такій системі планувальник процесів не може планувати кванти часу процесора в перспективі. Процес може зайняти процесор повністю на більший час, ніж потрібно користувачеві. Найгірше: процес може зайняти процесор так, що виведе систему з ладу.
Хороша новина в тому, що майже всі сучасні операційні системи працюють за преемптивною системою, тому таких проблем у них немає.
Чим процес може бути обмежений?
Процеси можуть бути обмежені швидкістю введення-виведення (I/ O-bound) і швидкістю процесора (processor-bound).
Обмежені швидкістю введення-виведення — це процеси, які основну частину часу виконання витрачають на запити щодо виведення і введення інформації. Вони виконуються короткий проміжок часу, тому що чекають введення або виведення потрібних даних.
Процеси, обмежені швидкістю процесора, працюють з кодом більшу частину часу. У більшості випадків вони витісняються іншими процесорами, позаяк їх нічого не блокує. Вони ніяк не впливають на швидкість введення-виведення, і їх виконання не впливає на чуйність системи. Стратегія виконання таких процесів передбачає, що вони будуть виконуватися рідко, але довго.
Обидва види процесів не виключають один одного. Приклад — текстовий процес, якому для роботи потрібне введення тексту, але він може завантажувати процесор під час перевірки граматики.
Квант часу
Це значення, яке описує як довго процес може виконуватися до витіснення. Квант часу за замовчуванням задає стратегія планування, але тут є ряд труднощів.
Якщо квант часу буде сильно великий, впаде інтерактивна продуктивність системи — загубиться відчуття паралельного виконання процесів. Якщо квант буде сильно малим, виростуть витрати ресурсів на постійне перемикання між процесами.
Через те, що великий розмір кванта часу за замовчуванням робить інтерактивну продуктивність системи нижче, зазвичай це значення не перевищує 20 мс. Але планувальник Linux використовує великі значення. Він враховує пріоритет кожного процесу і задає розмір кванта динамічно.
Найменший квант часу в Linux — 5 мс, за замовчуванням — 100 мс, а максимальний — 800 мс.
Процес може використовувати квант часу не за один раз. Свої 100 мс за замовчуванням він може виконуватися 4 рази по 25 мс. Тому інтерактивні процеси отримують такий квант, який гарантує їм потенційно довге виконання, а планувальник може виділити потрібний пріоритет.
Коли квант часу процесу закінчується, він не може виконуватися далі. Поки все процес не використовує свій квант повністю, планувальник не почне перерозподіляти пріоритети й видавати нові кванти.
Стратегія планування
Так називається глобальна модель поведінки системи взагалі та планувальника зокрема. Стратегія визначає що і коли буде в роботі, а ще вибирає оптимальний шлях для цього.
Хороша стратегія повинна забезпечити спільну роботу двох умов, що суперечать одна одній: мінімального часу затримки та високої продуктивності. Для цього в планувальнику є алгоритми, які вибирають найбільш відповідний для виконання процес. При цьому вони забезпечують виконання менш пріоритетних процесів.
Пріоритети процесів
Найпопулярніший вид алгоритмів планування — на основі пріоритетів. Головна ідея — побудувати процеси в міру їх важливості та використання процесорного часу. Самі пріоритетні процеси виконуються першими, а інші рівноцінні за пріоритетом будуть виконуватися циклічно, один за іншим.
У Linux процеси з високим пріоритетом виконуються довше за часом. Готовий до виконання процес з найвищим пріоритетом і активним квантом часу буде виконуватися завжди. На пріоритетність може впливати і користувач, і операційна система, тому планувальник може обробити процеси по-різному.
Стратегія планування в Unix-подібних системах працює так, щоб обмежені швидкістю введення-виведення процеси були більш пріоритетними. Найчастіше саме інтерактивні програми обмежені швидкістю введення-виведення, тому при такій стратегії вони починають реагувати швидше.
Планувальник процесів Linux динамічно управляє пріоритетами. За замовчуванням він виставляє певний пріоритет процесу, але за потреби підіймає або опускає це значення.
Діапазони пріоритетів
Ядро Linux використовує два діапазони пріоритетів: параметр nice і пріоритет реального часу. Перший може мати значення між -20 і 19, але за замовчуванням стоїть 0. Чим вище nice, тим нижче пріоритет: процес “ввічливо пропускає” не такі “ввічливі” процеси вперед. Ще цей параметр визначає розмір кванта часу для процесу. У -20 буде найдовший квант, а у 19 – найкоротший.
Другий діапазон пріоритетності — пріоритет реального часу, значення якого може бути між 0 і 99. Пріоритет процесів реального часу завжди вище, ніж у звичайних процесів. У Linux пріоритети реального часу зроблені за стандартом POSIX, як і в більшості Unix.
Підсумок
Планувальник процесів Linux — це той хлопець, який запускає і виганяє дітей з батута. Він робить це так, щоб все було в порядку і максимально ефективно. Діти не повинні стрибати довше запланованого часу, їх не повинно бути занадто багато, а сина господаря батута він пропустить позачергово.
Якщо серйозно, то планувальник — критично важлива частина ядра Linux. Система працює з процесами саме так завдяки йому. Через преемптивну багатозадачність і пріоритетну стратегію планування цей елемент в Linux робить ОС продуктивною і неймовірно гнучкою. Користайтеся цим.
Авторські ІТ-курси з системного адміністрування та DevOps в IT Education Center.