Есть ли разница между «вытеснением ядра» и «прерыванием»? - PullRequest
3 голосов
/ 28 февраля 2012

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 28 февраля 2012

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

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

2 голосов
/ 28 февраля 2012

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

...