Linux内核1:内核中断体系结构
1 学习中断的目的
- 硬件的中断响应 —-> 内核驱动中的中断
- linux的系统调用由中断完成
- 自定义中断—>编程的时候用到了‘软件的软中断模式’
- 信号中断 (kill - signalnumber)—>系统命令是信号,进程间通信用到了信号,对了解信号的使用,创建等有很大帮助
- 系统的异常和错误—>系统的异常获取,了解系统异常的作用
2 中断的种类
- 硬中断:由电脑的8259A类似的硬件中断控制芯片发出的中断;ARM中断控制器发出的中断
- 软中断:有非常多的种类,一般叫做异常/错误。第一类:CPU自行保留的中断;第二类系统调用异常;
3 代码结构
相关文件:
/kernal/asm.s; /kernal/traps.c
/kernal/system_call.s; /kernal/fork.c signal.c exit.c sys.c
4 工作流程
4.1 中断的工作流程
- 做CPU工作模式的转化(ARM有7种中断模式,一种正常)由正常到中断模式?
- 寄存器的拷贝和压栈
- 设置中断异常向量表
- 保存正常运行的函数返回值
- 跳转到对应的中断服务函数运行
- 模式复原,寄存器复原
- 继续运行原函数
4.2 linux中断的工作流程
将所有的寄存器值入栈
8086 SS EFLAGS ESP CS EIP (错误码) arm a0-a15
将异常码入栈;(中断号)
当前函数返回值入栈(为了在中断结束后找到在哪儿中断的,能够复原)
执行中断服务函数
函数返回值出栈
寄存器值出栈
总结: linux中断分为三个部分,入栈,执行服务,出。
中断前处理,中断后回复 | 执行中断函数 | |
---|---|---|
硬中断的处理 | asm.s | trap.c |
软件及系统调用的处理 | system_call.s | fork.c signal.c exit.c sys.c |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LiodeGwin's Blog!