Что такое вытеснение/Что такое вытесняемое ядро?Для чего это?

StackOverflow https://stackoverflow.com/questions/817059

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Для чего это?

Преимущественно преимущества заключаются в следующем:

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

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

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

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

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

что такое ядро ​​вытеснения?

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

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

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

За и против?

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top