1 学习中断的目的

  1. 硬件的中断响应 —-> 内核驱动中的中断
  2. linux的系统调用由中断完成
  3. 自定义中断—>编程的时候用到了‘软件的软中断模式’
  4. 信号中断 (kill - signalnumber)—>系统命令是信号,进程间通信用到了信号,对了解信号的使用,创建等有很大帮助
  5. 系统的异常和错误—>系统的异常获取,了解系统异常的作用

2 中断的种类

  1. 硬中断:由电脑的8259A类似的硬件中断控制芯片发出的中断;ARM中断控制器发出的中断
  2. 软中断:有非常多的种类,一般叫做异常/错误。第一类:CPU自行保留的中断;第二类系统调用异常;

3 代码结构

相关文件:

/kernal/asm.s; /kernal/traps.c

/kernal/system_call.s; /kernal/fork.c signal.c exit.c sys.c

4 工作流程

4.1 中断的工作流程

  1. 做CPU工作模式的转化(ARM有7种中断模式,一种正常)由正常到中断模式?
  2. 寄存器的拷贝和压栈
  3. 设置中断异常向量表
  4. 保存正常运行的函数返回值
  5. 跳转到对应的中断服务函数运行
  6. 模式复原,寄存器复原
  7. 继续运行原函数

4.2 linux中断的工作流程

  1. 将所有的寄存器值入栈

     8086     SS EFLAGS ESP CS EIP (错误码)
    
      arm     a0-a15
    
  2. 将异常码入栈;(中断号)

  3. 当前函数返回值入栈(为了在中断结束后找到在哪儿中断的,能够复原)

  4. 执行中断服务函数

  5. 函数返回值出栈

  6. 寄存器值出栈

总结: linux中断分为三个部分,入栈,执行服务,出。

中断前处理,中断后回复 执行中断函数
硬中断的处理 asm.s trap.c
软件及系统调用的处理 system_call.s fork.c signal.c exit.c sys.c