A2. Симулятор планувальника
Алгоритми планування легко переказати й важко відчути. Симулятор переводить їх у числа, і ви бачите не тільки те, що SJF справді дає найменший середній час очікування, а й те, хто за це платить: довга задача, яка чекає останньою.
Головним результатом роботи буде не програма, а таблиця, з якої видно, що найкращого алгоритму не існує.
Що має вийти
Section titled “Що має вийти”Програма, яка читає опис задач і друкує метрики для кожного алгоритму.
./sched workload.txtНа вході текстовий файл, рядок на задачу: ім’я, час надходження, тривалість, пріоритет.
# name arrival burst priorityA 0 24 2B 0 3 1C 0 3 1Вихід — рядок на алгоритм із трьома метриками, усі усереднені:
алгоритм очікування оборот відгукFCFS 17.00 27.00 17.00SJF 3.00 13.00 3.00RR(q=4) 5.67 15.67 3.67MLFQ ...-
Читання опису й перевірка на прикладі з модуля.
Набір
A 0 24,B 0 3,C 0 3розібраний у модулі 7: FCFS дає 17.00, SJF — 3.00, RR із квантом 4 — 5.67. Якщо ваші числа збігаються, читання і метрики правильні. -
FCFS і SJF.
Обидва невитісняльні: обраний процес виконується до кінця. Різниця лише в правилі вибору з тих, хто вже надійшов.
-
SRTF — витісняльний варіант SJF.
Тепер надходження нової короткої задачі має витіснити поточну. Це перший алгоритм, де треба обробляти події в часі, а не просто сортувати список.
-
Round Robin із параметром кванта.
Квант передається аргументом. Обов’язково побудуйте графік «квант → середній час відгуку» і «квант → кількість перемикань»: на ньому видно компроміс, про який ідеться в модулі.
-
MLFQ.
Кілька черг, новий процес у найвищу, вичерпав квант — опускається, заблокувався раніше — лишається. Плюс періодичне підняття всіх угору, щоб довгі задачі не голодували.
Щоб MLFQ мав сенс, задачам потрібна поведінка вводу-виводу: додайте у формат опис «працює X, потім чекає Y».
-
Порівняння.
Прогоніть усі алгоритми на трьох різних наборах: тільки обчислювальні задачі, тільки інтерактивні, суміш. Зробіть висновок письмово.
Автоперевірка
Section titled “Автоперевірка”Перевірка лежить в архіві з файлами курсу, і команди нижче виконуються з розпакованого каталогу.
cd labs/a2-scheduler./check.sh ./schedПеревірка ганяє п’ять наборів із наперед порахованими відповідями, включно з прикладом із модуля 7 і випадком, де FCFS демонструє ефект конвою.
Часті помилки
Section titled “Часті помилки”Простій не враховано. Якщо в якийсь момент жодна задача ще не надійшла, процесор простоює, а час усе одно йде. Симулятори, які просто беруть наступну задачу зі списку, дають тут неправильний оборот.
RR ставить витіснену задачу не в той кінець черги. Витіснена йде в кінець, а якщо в цю саму мить надійшла нова, порядок між ними доведеться зафіксувати й описати. Різні підручники домовляються по-різному, тож важливо, щоб ваш вибір був послідовним.
Час відгуку плутають з очікуванням. Для невитісняльних алгоритмів вони збігаються, для RR уже ні. Якщо у вас вони рівні скрізь, десь є помилка.
MLFQ без старіння. Без періодичного підняття довгі задачі не отримають процесора ніколи. Це не особливість реалізації, а голодування.
Далі, якщо цікаво
Section titled “Далі, якщо цікаво”Додати SCHED_FIFO і SCHED_RR як окремі класи з абсолютним
пріоритетом над рештою — і побачити, як задача реального часу
підвішує всі інші.