2015-08-22 185 views
1

Linux內核爲用戶模式和內核模式進程提供了單獨的堆棧,並且還有一些特殊的堆棧。一這個特殊的棧是中斷堆棧放置在irq_stack_union大小16千字節:中斷堆棧的堆棧指針

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; 

爲什麼我們減去64個字節從這裏irq_stack_union.irq_stack的結束?

謝謝。

回答

0

用作邊緣以避免意外越過邊界?