В чем разница между не превентивным, превентивным и выборочным превентивным ядром?

В чем разница между «неуправляемым», «превентивным» и «выборочным превентивным» ядром?

Надеюсь, кто-то может пролить свет на это.

2 Solutions collect form web for “В чем разница между не превентивным, превентивным и выборочным превентивным ядром?”

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

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

В качестве примера:

Процесс A выполняет обработчик исключений, процесс B пробуждается запросом IRQ, ядро ​​заменяет процесс A на B (принудительный коммутатор процесса). Процесс A остается незавершенным. Планировщик решает впоследствии, если процесс A получает процессорное время или нет.

На невосприимчивом ядре процесс A просто использовал бы все процессорное время, пока он не закончит или не решит добровольно разрешить другим процессам прервать его (плановый переход процесса).

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

Кроме того, существуют подходы к тому, чтобы ядро ​​Linux (почти) было полностью упреждающим.

  • Викиреальность
  • Статья LWN

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

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

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

ReQuoted и отформатирован: http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/

  • требует ли второе ядро ​​kexec
  • Автоматизированное обновление ядра
  • Что означает «ядро: NMI watchdog: BUG: soft lockup», за которым следуют другие ошибки?
  • Как вызвать сброс сторожевого таймера моего встроенного Linux-устройства
  • Почему существуют опции модуля и параметры драйвера - например, для модуля i915?
  • Как я могу узнать, имеет ли ядро ​​«новый» конфиг?
  • В: Как сообщить ядру Linux игнорировать устройства MULTIPLE ata?
  • Как ядро ​​Linux инициализирует консольную графику?
  • Как linux загружает прошивку для встроенных модулей драйверов
  • Как определить размер блока ядра?
  • Каково максимально допустимое количество TTY, определяется ли оно где-либо в заголовках ядра?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.