【问题标题】:Stack pointer of the interrupt stack中断堆栈的堆栈指针
【发布时间】:2015-11-16 13:01:18
【问题描述】:

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 kernel interrupt


    【解决方案1】:

    用作边距避免意外越界?

    【讨论】:

      猜你喜欢
      • 2014-10-16
      • 2015-08-05
      • 2013-01-20
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      相关资源
      最近更新 更多