首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中断堆栈的堆栈指针

中断堆栈的堆栈指针
EN

Unix & Linux用户
提问于 2015-08-22 12:44:48
回答 1查看 1.1K关注 0票数 0

Linux内核对于用户模式和内核模式进程有独立的栈,也有一些特殊的栈。其中一个特殊的堆栈是中断堆栈,其大小为16 in,放置在irq_stack_union中:

代码语言:javascript
复制
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的定义是:

代码语言:javascript
复制
DEFINE_PER_CPU(char *, irq_stack_ptr) =
    init_per_cpu_var(irq_stack_union.irq_stack) + IRQ_STACK_SIZE - 64;

为什么我们在这里从64的末尾减去irq_stack_union.irq_stack字节?

谢谢。

EN

回答 1

Unix & Linux用户

发布于 2019-05-26 11:09:31

好像没人知道了。

至少12年来,irq堆栈的末尾一直存在64字节的空白。它早于历史,我找不到任何好的理由。把它移开。最坏的情况是什么?

http://git.kernel.org/linus/4950d6d48a0c43cc61d0bbb76fb10e0214b79c66

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/224784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档