Какова связь между реентрантным ядром и вытесняющим ядром? - PullRequest
0 голосов
/ 19 сентября 2018

Какова связь между реентерабельным ядром и вытесняющим ядром?

Если ядро ​​является вытесняющим, должно ли оно быть реентерабельным?(Наверное да)

Если ядро ​​реентерируемое, должно ли оно быть приоритетным?(Я не уверен)

Я прочитал https://stackoverflow.com/a/1163946,, но не уверен, есть ли связь между этими двумя понятиями.

Я предполагаю, что мои вопросы касаются понятий операционной системы вгенеральный.Но если это имеет значение, меня интересует в основном ядро ​​Linux, и я сталкиваюсь с двумя понятиями при чтении Понимание ядра Linux .

1 Ответ

0 голосов
/ 19 сентября 2018

Что такое реентерабельное ядро:

Как следует из названия, реентерабельное ядро ​​- это то, которое позволяет нескольким процессам выполняться в режиме ядра в любой заданный момент времени, и это тоже не вызываялюбые проблемы согласованности между структурами данных ядра.

Что такое вытеснение ядра:

Прерывание ядра - это метод, используемый в основном в монолитном и гибридном ядрах, где все или большинство драйверов устройстввыполняются в пространстве ядра, в результате чего планировщику разрешается принудительно выполнять переключение контекста (то есть, преимущественно планировать; от имени запускаемого процесса и процесса с более высоким приоритетом) в драйвере или другой части ядра во время его выполнения, а не совместноожидание, пока драйвер или функция ядра (например, системный вызов) завершат свое выполнение и вернут управление процессором планировщику.

Могу ли я представить упреждающее ядро, которое не является повторно входящим?Вряд ли, но я могу.Давайте рассмотрим пример: какой-то поток выполняет системный вызов.При входе в ядро ​​он берет большую блокировку ядра и запрещает все прерывания, кроме планировщика таймера irq.После этого этот поток прерывается в ядре планировщиком.Теперь мы можем переключиться на другой поток в пользовательском пространстве.Этот процесс выполняет некоторую работу в пользовательском пространстве и после этого входит в ядро, берет большую блокировку ядра и спит и так далее.На практике похоже, что это решение не может быть реализовано из-за огромной задержки из-за запрещения прерываний на больших временных интервалах.

Могу ли я представить реентерабельное ядро, которое не является вытесняющим?Почему бы и нет?Просто используйте кооперативное вытеснение в ядре.Поток 1 входит в ядро ​​и через некоторое время вызывает thread_yield().Поток 2 входит в ядро ​​и выполняет свою работу, может вызвать другой thread_yield, а может и нет.Здесь нет ничего особенного.

Что касается ядра Linux, оно абсолютно реентерабельное, выгрузка ядра может быть настроена с помощью CONFIG_PREEMPT.Также возможны добровольные упреждения и множество других вариантов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...