堆栈指针的中断堆栈

时间:2015-08-22 18:57:46

标签: linux stack kernel interrupt

Linux内核具有用于用户模式和内核模式进程的独立堆栈以及一些特殊堆栈。其中一个特殊的堆栈是中断堆栈,大小为16千字节放在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个字节?

谢谢。

1 个答案:

答案 0 :(得分:0)

用作避免意外越过边界的边距?