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

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

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

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

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


person sliter    schedule 27.02.2012    source источник


Ответы (2)


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

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

person ugoren    schedule 28.02.2012

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

person Carl Norum    schedule 27.02.2012
comment
Привет, Карл, спасибо за ответ. Вы можете привести мне пример в Linux, где прерывания происходят вне контекста ядра? - person sliter; 28.02.2012
comment
Это довольно сильно зависит от системы. Я думаю, что ответ @ ugoren довольно хорошо объясняет концепцию. - person Carl Norum; 28.02.2012