Подтвердить что ты не робот

Что такое preemption/Что такое preemtible ядро? Для чего это?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Для чего это полезно?

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

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

При использовании неперехваченного ядра в одной процессорной системе разработчики ядра могут быть ленивыми и уйти без какой-либо блокировки большую часть времени - конечно, это большая НЕИСПРАВНОСТЬ на SMP. Превентивные ядра позволяют им получить эту боль без большего количества сердечников.

Ответ 4

Предотвращение означает, что ОС поддерживает несколько задач (отдельную отдельную часть кода) и будет переключаться между задачами по расписанию. Когда задача прерывается, она называется "вытеснение". Современная ОС поддерживает это, но это не требуется для простых встроенных систем, например. Накладные расходы на поддержку переключения задач не всегда стоят того.

Ответ 5

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

что такое превенция?

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

что такое ядро ​​preemption?

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

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

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

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

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

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