Что такое preemption / Что такое preemtible ядро? Для чего это? - PullRequest
55 голосов
/ 03 мая 2009

Объяснил своими словами, что такое вытеснение и что это значит для ядра (linux)?

Каковы преимущества и недостатки наличия вытесняемого ядра?

Ответы [ 5 ]

63 голосов
/ 03 мая 2009

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

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

Основным преимуществом вытесняющего ядра является то, что системные вызовы не блокируют всю систему. Если для завершения sys-вызова требуется много времени, это не означает, что ядро ​​больше ничего не может сделать за это время. Основным недостатком является то, что это вносит большую сложность в код ядра, приходится обрабатывать больше конечных случаев, выполнять более тонкую блокировку или использовать структуры и алгоритмы без блокировки.

15 голосов
/ 03 мая 2009

Вы действительно должны использовать термин «упреждающий». Есть разные виды упреждения. По сути, это очень просто, и вы, вероятно, понимаете это под другим именем. Вытесняющая операционная система может переключать контексты между потоками пользовательского режима без какого-либо специального программирования в вытесненном приложении. Это позволяет многозадачности. Операционная система может переключаться и возвращаться к процессу, и это переключение по существу является прозрачным. Существует также такая вещь, как вытесняющее ядро, которое позволяет вытеснять потоки режима ядра (большинство операционных систем не допускают этого, но это требуется для определенных приложений, таких как системы реального времени). Обратите внимание, это очень упрощенное объяснение.

7 голосов
/ 04 мая 2009

Другие адекватно объяснили, что такое вытесняемое ядро.

Для чего это хорошо?

Преимущественно:

  • Более низкая задержка в системах без SMP - обычно используется в системах реального времени или для других целей, где задержка важна (возможно, аудио, видео приложения)
  • Обучение разработчиков ядра, у которых нет систем SMP, как писать правильный код для SMP

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

6 голосов
/ 27 ноября 2015

Я думаю, что сообщение объясняет ваши вопросы:

что такое вытеснение?

Способность операционной системы выгрузить или остановить текущую запланированную задачу в пользу задачи с более высоким приоритетом. Планирование может быть одним из, но не ограничиваясь, планирования процесса или ввода-вывода и т. Д.

что такое ядро ​​выгрузки?

В Linux программы пользовательского пространства всегда были приоритетными: ядро ​​прерывает программы пользовательского пространства для переключения на другие потоки, используя обычную тактовую метку. Таким образом, ядро ​​не ожидает, пока программы пользовательского пространства явно освободят процессор (что имеет место в случае совместной многозадачности). Это означает, что бесконечный цикл в программе пользовательского пространства не может блокировать систему.

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

Прерывание ядра было введено в ядрах 2.6, и его можно включить или отключить с помощью опции CONFIG_PREEMPT. Если CONFIG_PREEMPT включен, то код ядра может быть прерван везде, кроме случаев, когда код отключил локальные прерывания. Бесконечный цикл в коде больше не может блокировать всю систему. Если CONFIG_PREEMPT отключен, то поведение 2.4 восстанавливается.

Плюсы и минусы?

Плюсы: ядро ​​вытеснения может улучшить задержку и масштабируемость, а также может запускать задачи высокого приоритета и своевременно реагировать.

Минусы: Это затрудняет написание кода в приоритетном ядре, особенно в SMP, и вы должны учитывать множество факторов.

4 голосов
/ 03 мая 2009

Вытеснение означает, что ОС поддерживает несколько задач (отдельный фрагмент кода) и будет переключаться между задачами по расписанию. Когда задача прерывается, это называется «вытеснение». Современные ОС поддерживают это - но это не требуется, например, для простых встроенных систем. Затраты на поддержку переключения задач не всегда стоят того.

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