Какой стек используется обработчиком прерываний - Linux

В многозадачной системе, когда какое-либо оборудование генерирует прерывание для конкретного ЦП, где ЦП может выполнять любой из нижеприведенных случаев, если он уже не обслуживает ISR:

  • Процесс пользовательского режима выполняется на CPU
  • Процесс ядра на процессоре выполняется

Хотелось бы узнать, какой стек используется обработчиком прерываний в двух ситуациях и почему?

Ответ 1

Все прерывания обрабатываются ядром. Это делается обработчиком прерываний, написанным для этого конкретного прерывания. Для обработчика прерываний есть стек IRQ. Настройка стеков обработчиков прерываний - это вариант конфигурации. Размер ядра не всегда может быть достаточным для работы ядра и пространства, требуемого Процедуры обработки IRQ. Следовательно, в стек попадает 2 стека.

  • Hardware IRQ Stack.
  • Программное обеспечение IRQ Stack.

В отличие от обычного стека ядра, который выделяется для каждого процесса, два дополнительных стека выделяются для каждого процессора. Всякий раз, когда происходит аппаратное прерывание (или обрабатывается softIRQ), ядро ​​должно переключиться на  соответствующий стек. Исторически обработчики прерываний не получали свои собственные стеки. Вместо этого обработчики прерываний будут совместно использовать стек текущего процесса, они прерываются. Стек ядра имеет две страницы; как правило, это 8 КБ на 32-разрядных архитектурах и 16 КБ на 64-битных архитектурах. Поскольку в этой настройке обработчики прерываний совместно используют стек, они должны быть исключительно экономными с теми данными, которые они выделяют там. Конечно, стеки ядра ограничены для начала, поэтому весь код ядра должен быть осторожным.

Ответ 2

Прерывания обрабатываются только ядром. Таким образом, используется некоторый стек ядра (в обоих случаях).

Прерывания не затрагивают (напрямую) пользователя процессы.

Процессы могут получать сигналы, но это не прерывания. См. сигнал (7)...