随笔分类 -  内核中断

摘要:在3.16-rc4内核源码中,内核给每个进程分配的内核栈大小为8KB。这个内核栈被称为异常栈,在进程的内核空间运行时或者执行异常处理程序时,使用的都是异常栈,看下异常栈的代码(include/linux/sched.h):1 union thread_union {2 struct thre... 阅读全文
posted @ 2014-07-30 21:32 Mr.doer 阅读(2279) 评论(0) 推荐(0)
摘要:tasklet是在HI_SOFTIRQ和TASKLET_SOFTIRQ两个软中断的基础上实现的(它们是在同一个源文件中实现,由此可见它们的关系密切程度),它的数据结构和软中断比较相似,这篇博文将分析tasklet的初始化过程。1.和tasklet相关的数据结构tasklet_vec和tasklet_... 阅读全文
posted @ 2014-07-30 11:15 Mr.doer 阅读(1152) 评论(1) 推荐(0)
摘要:1.和软中断相关的数据结构:softing_vec数组(kernel/softirq.c)1 static struct softirq_action softirq_vec[NR_SOFTIRQS] __cacheline_aligned_in_smp;NR_SOFTIRQS值为10,说明内核支持... 阅读全文
posted @ 2014-07-29 21:14 Mr.doer 阅读(807) 评论(0) 推荐(0)
摘要:上一篇博文我们分析了中断描述符表的中断门初始化过程,并且在interrupt数组中初始化过程中,可以看到每个中断处理程序都会跳入common_interrupt中。下面我们分析下common_interrupt汇编片段(arch/x86/kernel/entrt_32.S)。 1 .p2al... 阅读全文
posted @ 2014-07-29 10:48 Mr.doer 阅读(2592) 评论(0) 推荐(0)
摘要:上篇博文对中断描述符表(IDT)中异常和非屏蔽中断部分的初始化做了说明,这篇文章将分析外部中断部分的初始化。在上篇博文中,可以看到,内核在setup_once汇编片段中,对中断和异常部分做了初步的初始化,用early_idt_handlers函数的地址来初始化异常门描述符,用ignore_int函数... 阅读全文
posted @ 2014-07-28 19:58 Mr.doer 阅读(1170) 评论(0) 推荐(0)
摘要:1.中断描述符表的定义(arch/x86/kernel/traps.c)1 gate_desc debug_idt_table[NR_VECTORS] __page_aligned_bss;定义的描述符表为一个结构体数组,数组元素类型为gate_desc,大小为8B。NR_VECTORS宏为256,... 阅读全文
posted @ 2014-07-27 13:30 Mr.doer 阅读(1786) 评论(0) 推荐(0)