Linux カーネルが 2.6.32 より前の ISR スタックとしてスレッド カーネル スタックを使用していることは知っていますが、2.6.32 以降では、カーネルは分離されたスタックを使用します。ISR スタックがいつセットアップ/クレートされるか、ある場合は破棄するか教えてください。または、ソースファイル名と行番号を教えてください。前もって感謝します。
2014 年 10 月 17 日に更新:
Linux にはいくつかの種類のスタックがあります。以下は、私が知っている 3 つの主要な (すべてではない) です。
- ユーザー空間プロセス スタック。各ユーザー空間タスクには独自のスタックがあります。これは、タスクの作成時に mmap() によって作成されます。
- ユーザー空間タスクのカーネル スタック。ユーザー空間タスクごとに 1 つ。これは do_fork()->copy_process()->dup_task_struct()->alloc_thread_info() 内で作成され、system_call に使用されます。
- ハードウェア割り込み用のスタック (上半分)、各 CPU (2.6 以降) に 1 つ、arch/x86/kernel/irq_32.c で定義:
DEFINE_PER_CPU(struct irq_stack *, hardirq_stack);
do_IRQ() -> handle_irq() -> execute_on_irq_stack() 割り込みスタックを切り替える
これらが正しいかどうか教えてください。