В чем разница между не превентивным, превентивным и выборочным превентивным ядром?
В чем разница между «неуправляемым», «превентивным» и «выборочным превентивным» ядром?
Надеюсь, кто-то может пролить свет на это.
- Обновление ядра linux с 3 по 4 в Debian 8
- Загружено ли все ядро в память при загрузке?
- прослушиватель событий ядра
- Не удается установить новое ядро на сервере ubuntu. «Ошибка gzip: stdout: Отсутствие пробела на устройстве», несмотря на обилие дискового пространства
- Получить исходный код ядра: apt-get install vs apt-get source
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/