前言:
大家好,今天继续分享Linux内核里面的学习总结,今天我们来讲讲Linux内核里面的中断机制;关于中断这块,对于咱们来说应该是非常熟悉了,所以这里我就不介绍它的概念了哈!
一、Linux中断工作流程:
在讲解Linux中断工作流程,我们先来看一下一般的中断工作流程,当你熟悉了一般中断流程,那么Linux中断工作流程就差不多清晰了!
中断工作流程:
1、cpu工作模式的转化
2、进行寄存器的拷贝与压栈
3、设置中断异常向量表
4、保存正常运行的函数返回值
5、跳转到对应的中断服务函数上运行
6、进行模式的复原以及寄存器的复原
7、跳转回正常工作的函数地址继续运行
接下来我们来看Linux的中断工作流程:
1、将所有的寄存器值入栈
2、将异常码入栈
3、将当前的函数返回值进行入栈(为了在中断执行后能够找到在哪里中断的,能够复原!)
4、调用对应的中断服务函数
5、出栈函数返回值
6、返回所有的入栈寄存器值
为了好理解,可以把上面梳理成:
(1)中断前的处理过程
(2)中断的执行过程
(3)中断的恢复过程
下面是Linux中断工作流程图:
好,现在有了这么大体框架图,我们就可以开始去分析中断这部分的代码了,关于中断这部分的代码结构主要分为两部分:
一部分是硬件中断的处理过程:
软件中断及系统调用的处理过程:
具体的代码对应图如下:
中断代码主要在Kernel目录下:
二、总结:
ok,今天就暂时简单分享到这里,由于这里涉及到一些汇编代码,所以源码分析部分,我们在下期再来分享,今天大概掌握Linux中断工作流程和在Linux内核里面的代码结构分布就行!
文章资料相关参考:
Linux内核0.11完全注释
https://www.bilibili.com/video/BV1tQ4y1d7mo?spm_id_from=333.337.search-card.all.click
对了,个人朋友圈,已经开放,坑位有限,时常分享一些非技术性的东西,感兴趣的,可以来唠唠嗑,交个朋友;技术方面的也行,大家相互学习,共同进步:三人行,必有我师焉!