中断和中断处理

来源:互联网 发布:文字识别软件app 编辑:程序博客网 时间:2024/05/03 11:04

中断和中断处理

为了提高CPU和外围硬件(硬盘,键盘,鼠标等等)之间协同工作的性能,引入了中断的机制。
没有中断的话,CPU和外围设备之间协同工作可能只有轮询这个方法。
在接收到来自外围硬件(相对于中央处理器和内存)的异步信号,或来自软件的同步信号之后,处理器将会进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。

中断的类型

在PC机系统中,根据中断源的不同,中断常分为两大类:硬件中断和软件中断。
硬件中断也称为外部中断,它又可以分为两种:可屏蔽中断(INTR)和非屏蔽中断NMI。
中断有优先级之分,中断优先级指中断的响应级别。
软件中断优先级最高,非屏蔽中断次之,可屏蔽中断优先级最低。
我们经常可以看到IRQ和INT的缩写。IRQ是主板提供的硬件中断端口,一般有8或16个;INT则是操作系统提供的中断处理程序的入口标记,一般有256个。

中断处理函数

  • irg 表示要分配的中断号
  • handler 一个指针,指向实际的中断处理程序
  • flags 标志位,表示此中断的具有特性
  • name 是与中断相关的设备的ASCII文本表示
  • dev 用于共享中断线,多个中断程序共享一个中断线时(共用一个中断号),依靠dev来区别各个中断程序
  • 返回值:执行成功返回0;执行失败返回非0

中断控制方法表

函数说明local_irq_disable()禁止本地中断传递local_irq_enable()激活本地中断传递local_irq_save()保存本地中断传递的当前状态,然后禁止本地中断传递local_irq_restore()恢复本地中断传递到给定的状态disable_irq()禁止给定中断线,并确保该函数返回之前在该中断线上没有处理程序在运行disable_irq_nosync()禁止给定中断线enable_irq()激活给定中断线irqs_disabled()如果本地中断传递被禁止,则返回非0;否则返回0in_interrupt()如果在中断上下文中,则返回非0;如果在进程上下文中,则返回0in_irq()如果当前正在执行中断处理程序,则返回非0;否则返回0
0 0