Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1219686
  • 博文数量: 122
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4004
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-20 08:27
文章分类
文章存档

2016年(1)

2015年(21)

2014年(100)

分类: LINUX

2014-02-20 15:25:30


=============================================================
 中断和异常处理流程
=============================================================

 

-------------------------------------------------------------
1 中断和异常区别
-------------------------------------------------------------


1) 中断:异步,外设硬件产生

a、中断向量从32开始=irq+32,由驱动动态申请

b、使用中断门,cpu硬件自动关中断,清IF标记,并通过PENDING标记将本来可能发生在同一通道上的中断嵌套化解为一个循环。

2) 异常:同步,编程或硬件异常产生

a、中断向量0-19,2是nmi(例外),内核中固化

b、使用陷进门,不清IF,不关中断

c、分fault、trap和abort
  fault:可纠正错误,eip指向出错的指令,即异常返回后重新执行异常指令

  trap:eip指向出错的下一条指令

  abort:异常终止,严重错误,eip不能保存异常指令位置,程序无法继续正常,通常是直接结束


Linux中仅使用中断门和陷阱门,而没有使用任务门


-------------------------------------------------------------
2 中断初始化
-------------------------------------------------------------


a、实模式:将中断向量表中的每一项都初始化为默认的中断服务例程ignore_int

b、保护模式,基本流程如下:

start_kernel

  trap_init()

    陷阱门直接将IDT表项初始化为异常处理handler

    init_IRQ()

      中断门初始化统一的入口:common_interrupt

-------------------------------------------------------------
3 设备驱动程序调用request_irq注册中断
-------------------------------------------------------------


setup_irq()

在全局中断描述符结构数组(irq_destc[])中,如果该中断号被使用,并且新旧中断都设置了共享,就把新中断加载就中断的后面;如果中
断号没有被使用,就直接加在中断描述符结构数组中,并设置中断使能。


-------------------------------------------------------------
4 中断处理
-------------------------------------------------------------


基本原理:设备产生中断,通过总线把电信号发给中断控制器。如果中断是激活的,那么中断控制器就会把中断发往处理器。在大多数体系结构中,这个工作就是给处理器的特定管脚发送一个信号。除非在处理器上禁止该中断,否则,处理器会立即停止它正在做的事情,关闭中断系统,然后跳到内存中预定义的地址(即IDT表中的内容)开始执行哪里的代码,。是中断处理程序的入口处。

代码流程:
         do_IRQ

            __do_IRQ

              handle_IRQ_event

                循环调ret = action->handler(irq, action->dev_id, regs);


-------------------------------------------------------------
5 异常处理
-------------------------------------------------------------


基本原理:对于0~31号中断向量,保留后用来处理异常事件。操作系统提供相应的异常处理程序,并在初始化时把处理程序的入口地址设置
在对应的IDT表中。当产生一个异常时,处理器就会自动把控制转移到相应的处理程序的入口。运行相应的处理程序,进行相应的处理后,返回原中断处。


-------------------------------------------------------------
6中断、异常返回
-------------------------------------------------------------

 

阅读(3266) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~