Я знаю, что ядро Linux занимает стек ядра ядра как стек ISR до 2.6.32, после 2.6.32 ядро использует отдельный стек, если это неправильно, исправьте меня. Не могли бы вы сказать мне, когда стек ISR настроен/скомпонован или уничтожен, если есть. Или сообщите мне имя исходного файла и номер строки? Заранее спасибо.Стек аппаратного прерывания верхней половины в ядре Linux?
Обновлено 17 октября 2014:
Есть несколько видов стека в Linux. Ниже представлены 3 основных (не все), которые я знаю.
- пользователя стека процесса, каждый из пользовательского пространства задача имеет свой собственный стек, это создается ттар() при создании задачи.
- Стек ядра для задачи пользовательского пространства, по одному для каждой задачи пользовательского пространства, это , созданный в do_fork() -> copy_process() -> dup_task_struct() -> alloc_thread_info() и используемый для system_call.
- Стек для аппаратного прерывания (верхняя половина), по одному для каждого процессора (после 2.6), , определенной в арку/x86/ядра/irq_32.c:
DEFINE_PER_CPU(struct irq_stack *, hardirq_stack);
do_IRQ() -> handle_irq() -> execute_on_irq_stack) Переключатель (стоп прерываний
Пожалуйста, дайте мне знать, если они верны или нет.