×

Linux内核的中断和异常分析详细资料说明

消耗积分:1 | 格式:pdf | 大小:0.19 MB | 2019-04-23

李伟

分享资料个

  中断,通常被定义为一个事件。打个比方,你烧热水,水沸腾了,这时候你要去关掉烧热水的电磁炉,然后再去办之前手中停不下来的事情。那么热水沸腾就是打断你正常工作的一个信号机制。当然,还有其它的情况,我们以后再做分析。

  中断也就是这样产生的,中断分为同步中断还有异步中断。

  同步中断在Intel的手册中被称为异常,而异步中断被称作中断。打个比方在ARM处理器的异常种类就有不少,有未定义指令异常,软中断异常,快中断异常等等。异常是由程序错误产生的,或者是内核必须处理的异常条件产生的。如果你曾经学过单片机,那么你一定会清楚,51单片机的P32,P33是外部中断0和1,假设当你在程序中开启了外部中断0,然后在中断中执行了相应的程序,这时你在外部中断0的一脚连接一个按键,这时候你按下去P30这个引脚就会产生一个中断。那么中断服务程序就会响应你的操作,比如点亮一个LED灯,或者说蜂鸣器叫一下等等。

  那么在linux内核中的中断其实也是和单片机类似的,只不过linux内核的中断定义的比较丰富,但是基本思想还是一样的。 linux内核处理中断有一种叫做中断信号的机制。它的作用就是当一个中断信号到来时,CPU必须停止它当然正在做的事情,然后切换到一个新的活动,为了做到这一点,内核态堆栈保存的程序计数器的当前值,其实就是eip和cs寄存器的存储数据,然后把中断相关类型的一个地址放到一个程序计数器当中去。

  其实在内核中,中断这样的切换机制很像进程的调度,上下文切换这样的机制,但是依然存在着一个非常明显的差异,那就是中断或者异常在处理的代码并不是一个进程。
 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !