Что такое реентерабельное ядро:
Как следует из названия, реентерабельное ядро - это то, которое позволяет нескольким процессам выполняться в режиме ядра в любой заданный момент времени, и это тоже не вызываялюбые проблемы согласованности между структурами данных ядра.
Что такое вытеснение ядра:
Прерывание ядра - это метод, используемый в основном в монолитном и гибридном ядрах, где все или большинство драйверов устройстввыполняются в пространстве ядра, в результате чего планировщику разрешается принудительно выполнять переключение контекста (то есть, преимущественно планировать; от имени запускаемого процесса и процесса с более высоким приоритетом) в драйвере или другой части ядра во время его выполнения, а не совместноожидание, пока драйвер или функция ядра (например, системный вызов) завершат свое выполнение и вернут управление процессором планировщику.
Могу ли я представить упреждающее ядро, которое не является повторно входящим?Вряд ли, но я могу.Давайте рассмотрим пример: какой-то поток выполняет системный вызов.При входе в ядро он берет большую блокировку ядра и запрещает все прерывания, кроме планировщика таймера irq.После этого этот поток прерывается в ядре планировщиком.Теперь мы можем переключиться на другой поток в пользовательском пространстве.Этот процесс выполняет некоторую работу в пользовательском пространстве и после этого входит в ядро, берет большую блокировку ядра и спит и так далее.На практике похоже, что это решение не может быть реализовано из-за огромной задержки из-за запрещения прерываний на больших временных интервалах.
Могу ли я представить реентерабельное ядро, которое не является вытесняющим?Почему бы и нет?Просто используйте кооперативное вытеснение в ядре.Поток 1 входит в ядро и через некоторое время вызывает thread_yield()
.Поток 2 входит в ядро и выполняет свою работу, может вызвать другой thread_yield, а может и нет.Здесь нет ничего особенного.
Что касается ядра Linux, оно абсолютно реентерабельное, выгрузка ядра может быть настроена с помощью CONFIG_PREEMPT.Также возможны добровольные упреждения и множество других вариантов.