Linux 内核为用户模式和内核模式进程提供了独立的堆栈,还有一些特殊的堆栈。其中一个特殊堆栈是大小为 16 KB 的中断堆栈,位于 irq_stack_union
中:
union irq_stack_union {
char irq_stack[IRQ_STACK_SIZE];
struct {
char gs_base[40];
unsigned long stack_canary;
};
};
有指向这个堆栈的指针的定义 - irq_stack_ptr
。据我正确理解,这个 irq_stack_ptr 必须指向 irq_stack
的末尾,或者换句话说指向 irq_stack + IRQ_STACK_SIZE - 1
,但是 irq_stack_ptr
的定义> 是:
DEFINE_PER_CPU(char *, irq_stack_ptr) =
init_per_cpu_var(irq_stack_union.irq_stack) + IRQ_STACK_SIZE - 64;
这里为什么要从irq_stack_union.irq_stack的末尾减去64字节?
谢谢。
最佳答案
用作边距以避免不小心越界?
关于linux - 中断栈的栈指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159700/