Есть ли разница между "вытеснением ядра" и "прерыванием"?

Я просто читаю статью, в которой говорится:

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

Так что мне просто интересно, какая разница между прерыванием и вытеснением ядра.

Или мы могли бы сказать, что отключение вытеснения ядра также отключает прерывания?

2 ответа

Решение

Когда процесс прерывается, ядро ​​запускает некоторый код, который может не относиться к тому, что делает процесс.
Когда это будет сделано, могут произойти две вещи:
1. Тот же процесс снова получит процессор.
2. Другой процесс получит процессор. Текущий процесс был прерван.

Таким образом, вытеснение произойдет только после прерывания, но прерывание не всегда вызывает вытеснение.

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

Другие вопросы по тегам