Відповіді:
У попередньому ядрі процес, що працює в режимі ядра, може бути замінений іншим процесом, перебуваючи в середині функції ядра.
Це стосується лише процесів, що працюють в режимі ядра, процесор, що виконує процеси в режимі користувача, вважається "непрацюючим". Якщо процес користувальницького режиму хоче запитувати послугу у ядра, він повинен видавати виняток, з яким може працювати ядро.
Як приклад:
Процес A
виконує обробник винятків, Процес B
пробуджується запитом IRQ, ядро замінює процес A
на B
(примусовий перемикач процесу). Процес A
залишається незавершеним. Потім планувальник вирішує, A
отримає процес процес чи ні.
У неперспективному ядрі процес A
просто використовував би весь процесорний час, поки він не закінчиться або добровільно вирішить дозволити іншим процесам перервати його (плановий комутатор процесу).
Сьогоднішні операційні системи на базі Linux, як правило, не містять повністю попереджуваного ядра, все ж є критичні функції, які повинні працювати без перерви. Тому я думаю, що ви могли б назвати це "вибірковим попереджувальним ядром".
Крім цього, існують підходи, щоб зробити ядро Linux (майже) повністю вигідним.
преференція -> Здатність операційної системи викупити або зупинити заплановану в даний час завдання на користь завдання з більш високим пріоритетом. Планування може бути одним із, але не обмежуючись цим, планування процесу чи вводу / виводу тощо.
Під 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/
Вигідне ядро дозволяє попереджувати процес, поки він працює в режимі ядра. Непредприйняте ядро не дозволяє попереджувати процес, запущений у модето ядра; процес в режимі ядра буде запускатися до тих пір, поки він не вийде з режиму ядра, не блокує або добровільно не передає контроль над процесором. Очевидно, що неперспективне ядро по суті є вільним від перегонових умов на структурі даних ядра, оскільки одночасно в ядрі активний лише один процес. Ми не можемо сказати те ж саме про попереджувальних ядрах, тому вони повинні бути ретельно розроблені для того, щоб дані загального ядра були вільними від перегонових умов. Передбачувані ядра особливо важко розробити для архітектур SMP, оскільки в цих середовищах можливі одночасні роботи двох процесів у режимі ядра на різних процесорах. Вигідне ядро більше підходить для програмування в режимі реального часу, оскільки це дозволить в режимі реального часу викупити процес, який зараз працює в ядрі. Крім того, попереджувальне ядро може бути більш чуйним, оскільки існує менший ризик, що процес в режимі ядра буде запускатися довільно довгий період, перш ніж відмовити процесор до процесів очікування. Звичайно, цей ефект можна мінімізувати, створивши код ядра, який не веде себе таким чином. Пізніше в цьому розділі ми вивчаємо, як різні операційні системи управляють викупом в ядрі. цей ефект можна звести до мінімуму, створивши код ядра, який не веде себе таким чином. Пізніше в цьому розділі ми вивчаємо, як різні операційні системи управляють викупом в ядрі. цей ефект можна звести до мінімуму, створивши код ядра, який не веде себе таким чином. Пізніше в цьому розділі ми вивчаємо, як різні операційні системи управляють викупом в ядрі.