Яка різниця між неперспективним, попереджувальним та вибірковим попереджувальним ядром?


Відповіді:


14

У попередньому ядрі процес, що працює в режимі ядра, може бути замінений іншим процесом, перебуваючи в середині функції ядра.

Це стосується лише процесів, що працюють в режимі ядра, процесор, що виконує процеси в режимі користувача, вважається "непрацюючим". Якщо процес користувальницького режиму хоче запитувати послугу у ядра, він повинен видавати виняток, з яким може працювати ядро.

Як приклад:

Процес Aвиконує обробник винятків, Процес Bпробуджується запитом IRQ, ядро ​​замінює процес Aна B(примусовий перемикач процесу). Процес Aзалишається незавершеним. Потім планувальник вирішує, Aотримає процес процес чи ні.

У неперспективному ядрі процес Aпросто використовував би весь процесорний час, поки він не закінчиться або добровільно вирішить дозволити іншим процесам перервати його (плановий комутатор процесу).

Сьогоднішні операційні системи на базі Linux, як правило, не містять повністю попереджуваного ядра, все ж є критичні функції, які повинні працювати без перерви. Тому я думаю, що ви могли б назвати це "вибірковим попереджувальним ядром".

Крім цього, існують підходи, щоб зробити ядро ​​Linux (майже) повністю вигідним.


Система Macintosh 6 та пов'язаний з нею код (наприклад, Система 7, Система 8 та Система 9) не мали переваги. Перехід Apple на MacOS X також спричинив запровадження передового багатозадачності.
Май

ядро замінює процес A на B (вимушений перемикач процесу). -> Англійською мовою, чи можемо ми сказати для речення альтернативно, оскільки процес A вилучений (за допомогою процесу B)?
ЗСШ

2

преференція -> Здатність операційної системи викупити або зупинити заплановану в даний час завдання на користь завдання з більш високим пріоритетом. Планування може бути одним із, але не обмежуючись цим, планування процесу чи вводу / виводу тощо.

Під Linux, програми для користувальницького простору завжди були сприйнятливими: ядро ​​перериває програми для користувальницького простору для переходу на інші потоки, використовуючи звичайну галочку годинника. Таким чином, ядро ​​не чекає, коли програми з користувачем простором явно звільняють процесор (що стосується спільної багатозадачності). Це означає, що нескінченний цикл у програмі простору користувача не може блокувати систему.

Однак, поки не було ядер 2.6, саме ядро ​​було непередбачуваним: як тільки один потік увійшов до ядра, його не можна було передбачити виконати інший потік. Однак ця відсутність переваги в ядрі викликала ряд проблем щодо затримки та масштабованості. Отже, попередження про ядро ​​було введено в 2.6 ядрах, і його можна включити або відключити за допомогою параметра CONFIG_PREEMPT. Якщо CONFIG_PREEMPT увімкнено, код ядра може бути вилучений скрізь, за винятком випадків, коли код відключив локальні переривання. Нескінченний цикл у коді вже не може блокувати всю систему. Якщо CONFIG_PREEMPT вимкнено, поведінка 2.4 відновлюється.

ReQuoted та відформатовано з: http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/


Чому 2,4 ядра не було вигідним?
Сен

Краще запитайте Лінуса Торвальдса :)
Мадхур Ахуджа

1

Вигідне ядро ​​дозволяє попереджувати процес, поки він працює в режимі ядра. Непредприйняте ядро ​​не дозволяє попереджувати процес, запущений у модето ядра; процес в режимі ядра буде запускатися до тих пір, поки він не вийде з режиму ядра, не блокує або добровільно не передає контроль над процесором. Очевидно, що неперспективне ядро ​​по суті є вільним від перегонових умов на структурі даних ядра, оскільки одночасно в ядрі активний лише один процес. Ми не можемо сказати те ж саме про попереджувальних ядрах, тому вони повинні бути ретельно розроблені для того, щоб дані загального ядра були вільними від перегонових умов. Передбачувані ядра особливо важко розробити для архітектур SMP, оскільки в цих середовищах можливі одночасні роботи двох процесів у режимі ядра на різних процесорах. Вигідне ядро ​​більше підходить для програмування в режимі реального часу, оскільки це дозволить в режимі реального часу викупити процес, який зараз працює в ядрі. Крім того, попереджувальне ядро ​​може бути більш чуйним, оскільки існує менший ризик, що процес в режимі ядра буде запускатися довільно довгий період, перш ніж відмовити процесор до процесів очікування. Звичайно, цей ефект можна мінімізувати, створивши код ядра, який не веде себе таким чином. Пізніше в цьому розділі ми вивчаємо, як різні операційні системи управляють викупом в ядрі. цей ефект можна звести до мінімуму, створивши код ядра, який не веде себе таким чином. Пізніше в цьому розділі ми вивчаємо, як різні операційні системи управляють викупом в ядрі. цей ефект можна звести до мінімуму, створивши код ядра, який не веде себе таким чином. Пізніше в цьому розділі ми вивчаємо, як різні операційні системи управляють викупом в ядрі.

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