2.1. Планування процесів
Якщо готових до виконання процесів більше одного, планувальник повинен визначити, який з них першим призначити процесору. З цією метою планувальник підтримує структуру даних, які дозволяють найбільш ефективним чином розподіляти між процесами процесорний час. Кожен процес отримує клас (тип) пріоритету і розміщується у відповідній йому черзі разом з іншими працездатними процесами того ж пріоритетного класу. Тому істує декілька пріоритетних черг, які відображають різні класи пріоритетів, які використовуються системою. Ці пріоритетні черги впорядковуються і розміщуються в масив розподілу, що називається багаторівневою пріоритетною чергою (multilevel priority queue), зображеній на рис. 5. Кожен елемент цього масиву пов'язаний з конкретною пріоритетною чергою. Для виконання процесором планувальник призначає той процес, який міститься в головній частині не порожньої черги, і має самий високий пріоритет.
Пріоритети можуть бути динамічними і статичними. Один раз встановлений пріоритет змінити неможна, а динамічні – можна. Процеси з самим високим пріоритетом можуть монополізувати використання процесора. Якщо ж пріоритет процесу динамічний, то його початковий рівень може бути змінений більш високим значенням, в результаті чого такий процес буде переведений в чергу з більш високим пріоритетом. Крім того, процес, який монополізує процесор, може отримати більш низький пріоритет, або ж, інші процеси можуть отримати більш високий пріоритет, ніж процес-монополіст. В UNIX/Linux для рівнів пріоритетів передбачено діапазон від -20 до 19. Чим вище значення рівня, тим нижче пріоритет процесу.
При призначенні пріоритету користувацькому процесу необхідно враховувати, на що власне цей процес тратить більшу частину часу. Одні процеси вирізняються підвищеною інтенсивністю використання процесорного часу (вони використовують процесор на протязі всього кванту процесорного часу). У других же більша частина часу йде на очікування операцій ввід-вивід або виконання деяких інших подій. Якщо такий процес готовий до використання процесора, необхідно миттєво надати процесор, щоб він міг зробити наступний запит до пристроїв вводу-виводу. Процеси, які взаємодіють між собою, можуть вимагати доволі високий пріоритет, щоб розраховувати на достатній час реакції. Системні процеси мають більш високий процес, ніж користувацькі.
2 .2. Стратегія планування
Процеси розміщуються в пріоритетних чергах у відповідності до стратегії планування. В системах UNIX/Linux використовуються дві стратегії планування FIFO (First In First Out – перший прийшов, першим обслужений) і RR (round-robin, тобто циклічна). Схема дії стратегії FIFO подана на рис. 6, а. При використанні стратегії FIFO процеси призначаються процесору у відповідності з часом надходження в чергу. Після закінчення кванту часу процес розміщується на початок (головну частину) своєї пріоритетної черги. Коли процес, який очікує, стає працездатним (працездатним), він розміщується в кінець своєї пріоритетної черги. Процес може викликати системну функцію і відмовитися від процесора на користь іншого процесу з таким же рівнем пріоритету.
У відповідності з циклічною стратегією
планування RR всі процеси вважаються
рівноправними (рис. 6, б). RR-планування
співпадає з FIFO-плануванням за одним
виключенням: після закінчення кванту
часу процес розміщується не на початок
черги, а в кінець своєї пріоритетної
черги, і процесору призначає
ться
наступний (по черзі) процес.
