Нещодавно в інтерв'ю мене запитали про алгоритм планування, який використовується операційною системою Linux. Для чого використовується алгоритм?
Також який алгоритм застосовується в операційних системах реального часу і чому?
Нещодавно в інтерв'ю мене запитали про алгоритм планування, який використовується операційною системою Linux. Для чого використовується алгоритм?
Також який алгоритм застосовується в операційних системах реального часу і чому?
Відповіді:
Поточний планувальник завдань Linux називається Повністю справедливим планувальником (CFS). Ви повинні ознайомитись з http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt для отримання більш детальної інформації. Конструкція досить складна і на мій погляд, не підходить для RTOS.
Поширеною технікою в системах реального часу є монотонне планування ставок, оскільки воно має чіткі гарантії, якщо дотримуються певних припущень (наприклад, статичні пріоритети завдань та фіксований час та швидкість виконання). Є багато інших алгоритмів, і було багато досліджень. Отже, це в основному все про властивості, які вам потрібні, і те, що ви знаєте про своє завдання і що виправлено.
Я не зовсім впевнений, чи приймаєте ви планування вводу / виводу ядра. Якщо ви цього не зробите: ігноруйте цю відповідь.
Вікіпедія стверджує, що CFG (повністю Справедлива черга) за замовчуванням з ядра 2.6.18.
У моєму openSUSE (запуск Kernel 2.6.37) я можу перемикатися між CFG, NOOP та Deadline .
Алгоритм, який використовується планувальником Linux, являє собою складну схему з поєднанням пріоритетного пріоритету та упередженого відрізання часу. Він призначає більш тривалий квант часу для завдань з вищим пріоритетом і коротший квант часу для завдань з нижчим пріоритетом.
Він ідентифікує кожен процес або як процес у реальному часі, або як звичайний (інший) процес. Завданням у режимі реального часу присвоюються статичні пріоритети в діапазоні [0,99], де менша кількість вказує на більший пріоритет.
Усі інші завдання мають динамічні пріоритети в діапазоні [100,139], виходячи з інтерактивності завдання, що ґрунтується на їхніх приємних значеннях плюс або мінус значення 5. Завдання, які є більш інтерактивними, як правило, мають більший час сну, і тому більш схильні налаштуйте ближче до –5, оскільки планувальник надає перевагу інтерактивним завданням. (Інтерактивність завдання визначається тим, як довго він спив, очікуючи вводу-виводу.) Інтерактивність завдання визначає, чи буде додане значення чи віднімання від приємного значення значення 5. Результатом таких коригувань будуть вищі пріоритети для цих завдань. І навпаки, завдання зі скороченням часу сну часто більше пов'язані з процесором, і тому їхні пріоритети будуть знижені.
Ядро підтримує перелік усіх завдань, що виконуються в структурі даних бігової черги. Аплікація містить два масиви пріоритетності: активний та минув. Активний масив містить усі завдання з часом, що залишився у їхніх часових фрагментах, а масив, що закінчився, містить усі завдання з минулим терміном. Кожен з цих масивів пріоритетів містить перелік завдань, індексованих відповідно до пріоритету. Планувальник вибирає завдання з найвищим пріоритетом з активного масиву для виконання на процесорі. Коли всі завдання вичерпали свої часові відрізки (тобто активний масив порожній), обмінюються два пріоритетні масиви: масив, що закінчився, стає активним масивом, і навпаки.
Динамічний пріоритет завдання перераховується, коли завдання вичерпало свій квантовий час і має бути переміщене до масиву, що минув. Таким чином, при обміні двох масивів всім завданням у новому активному масиві присвоюються нові пріоритети та відповідні відрізки часу. (Примітка. Це уривок із книги "Концепти операційної системи" (9-е видання) Авраама Сільбершаца та ін. Детальніше просимо в розділі 5.6.3 цієї книги)
>
) для тих частин вашої відповіді, які ви взяли із зовнішнього джерела, зокрема при цитуванні з книги.
Це відповідь на ваше інше запитання. Системи реального часу (RTS) бувають двох типів, жорсткі та м'які. Алгоритм планування процесора для жорстких RTS є пріоритетним алгоритмом, заснованим на пріоритеті, а для м'яких RTS є пріоритетним.