当前位置: 技术问答>linux和unix
新手求助--中断问题
来源: 互联网 发布时间:2016-02-19
本文导语: 小弟刚学linux的内核,因为完全出于爱好所以很是努力,但一个多月了收效甚微。。。 现在不敢看源码了,只在看一些分析内核结构的书,但还是有很多问题,其中关于中断的问题尤其费解: 书上说,中断有优先级...
小弟刚学linux的内核,因为完全出于爱好所以很是努力,但一个多月了收效甚微。。。
现在不敢看源码了,只在看一些分析内核结构的书,但还是有很多问题,其中关于中断的问题尤其费解:
书上说,中断有优先级,也可以被中断。这我就很不理解,如果在中断过程中再中断那么原来中断的上下文怎么保存呢?难道像进程一样也有个东西放的吗?(可是进程中用来放状态的如PCB的很大的啊)
虽然我知道和这里的帖子比我的问题很初级,但我周围实在没有人讨论这个东西,所以一咬牙就发了。还请路过的牛人,前辈们指点我一下啊。
现在不敢看源码了,只在看一些分析内核结构的书,但还是有很多问题,其中关于中断的问题尤其费解:
书上说,中断有优先级,也可以被中断。这我就很不理解,如果在中断过程中再中断那么原来中断的上下文怎么保存呢?难道像进程一样也有个东西放的吗?(可是进程中用来放状态的如PCB的很大的啊)
虽然我知道和这里的帖子比我的问题很初级,但我周围实在没有人讨论这个东西,所以一咬牙就发了。还请路过的牛人,前辈们指点我一下啊。
|
在linux2.6内核中,内核态分进程上下文和中断上下文两种状态,当核心响应中断并执行中断处理程序时就处于中断上下文状态。
当处于中断上下文时,中断处理程序有自己的中断栈,中断栈用来保存中断过程中的各寄存器状态值,这个中断栈可能是独立的也可能和被中断程序的内核栈共用一个栈,这取决于进程内核栈的大小;如果在编译内核时指定进程内核栈大小为4k,则执行中断处理程序时将会为中断创建独立的4k大小的中断栈,如果指定进程核心栈大小为8k,则不分配独立的中断栈,中断处理程序的中断栈与被中断程序的内核栈是同一个栈。
关于中断的问题《深入理解linux内核》这本书讲得很详细,可以参考一下。
当处于中断上下文时,中断处理程序有自己的中断栈,中断栈用来保存中断过程中的各寄存器状态值,这个中断栈可能是独立的也可能和被中断程序的内核栈共用一个栈,这取决于进程内核栈的大小;如果在编译内核时指定进程内核栈大小为4k,则执行中断处理程序时将会为中断创建独立的4k大小的中断栈,如果指定进程核心栈大小为8k,则不分配独立的中断栈,中断处理程序的中断栈与被中断程序的内核栈是同一个栈。
关于中断的问题《深入理解linux内核》这本书讲得很详细,可以参考一下。
|
如果是中断中再次发生优先级更高的中断,中断上下文被保存在内核栈中,当所有中断都退出时,就会切换到进程上下文