
linux中断和异常
文章平均质量分 78
bullbat
爱好程序设计,对待问题喜欢追根溯源。
展开
-
linux内核分析之工作队列
可延迟函数和工作队列非常相似,但是他们的区别还是很大的。主要区别在于:可延迟函数运行在中断上下文中,而工作队列中的函数运行在进程上下文中。在中断上下文中不可能发生进程切换。可延迟函数和工作队列中的函数都不能访问进程的用户态地址空间。 涉及数据结构 /* * The per-CPU workqueue (if single thread, we always use the first原创 2011-12-25 16:27:08 · 2048 阅读 · 0 评论 -
linux软中断
在由内核执行的几个任务之间有些不是紧急的,在必要情况下他们可以延迟一段时间。一个中断处理程序的几个中断服务例程之间是串行执行的,并且通常在一个中断的处理程序结束前,不应该再次出现这个中断。相反,可延迟中断可以在开中断的情况下执行。 linux中所谓的可延迟函数,包括软中断和tasklet以及通过中作队列执行的函数(这个以后说),软中断的分配是静态的(即值编译时定义),而tasklet的分配和初始原创 2011-12-25 14:57:55 · 6276 阅读 · 0 评论 -
linux内核中断、异常
中断: 可屏蔽中断:所有有I/O设备请求的中断都是,被屏蔽的中断会一直被CPU 忽略,直到屏蔽位被重置。 不可屏蔽中断:非常危险的事件引起(如硬件失败)。 异常: 处理器产生的(Fault,Trap,Abort)异常 programmed exceptions(软中断):由程序员通过INT或INT3指令触发,通常当做trap处理,用处:实现系统调用。 中断描述符表(IDT):2原创 2011-12-23 10:23:01 · 6355 阅读 · 2 评论 -
linux中断延迟之tasklet
tasklet是I/O驱动程序中实现可延迟函数的首选方法。从下面的内核代码的分析中我们会看到,tasklet建立在两个叫做HI_SOFTIRQ和TASKLET_SOFTIRQ的软中断之上。几个tasklet可以与同一个软中断相关联,每个tasklet执行自己的函数。tasklet和高优先级的tasklet分别存放在tasklet_vec和tasklet_hi_vec数组中。下面我们结合具体的代码来原创 2011-12-25 15:33:25 · 5212 阅读 · 2 评论