中断及中断处理

中断和中断处理

是什么?
中断用来完成硬件与操作系统间的通信,使操作系统能有效的管理硬件。

实现机制
键盘控制器(电信号)—>中断控制器(多路复用)—>处理器(停止当前工作)—>操作系统(中断处理程序)

怎样识别不同设备发出的中断?
每个中断有一个唯一的数字标识,称为IRQ(中断控制线)或中断号,一共16个其中有一个用于桥接,所以能让硬件调用的只有15个。
IRQ编号      设备名称            用途
 IRQ0            Time                电脑系统计时器
 IRQ1          KeyBoard          键盘
 IRQ3           COM2              串口设备
 IRQ5            LPT2               建议声卡使用该IRQ
 IRQ8      CMOS Alert           即时时钟
 IRQ10      Reversed             建议保留给网卡使用该IRQ
 IRQ11      Reversed             建议保留给AGP显卡使用
 IRQ12     PS/2Mouse           接PS/2鼠标,若无也可设定给其他硬件使用
 IRQ13          FPU                  协处理器用,例如FPU(浮点运算器)

不同架构的处理器都会将某些中断号固定下来,未固定中断号的硬件会由linux内核动态分配中断号

注册中断处理程序(发生在设备驱动程序加载的时候)
     int request_irq(unsigned  int  irq,     /*中断号
        irq_handler_t  handler,      /*函数指针
        unsigned  long  flags,        /*标志位,  IRQF_SHARED
        const  char*  name,           /*中断相关设备ASCII文本表示
        void  *dev)               /*用于中断共享,不同设备的唯一标识。
释放中断处理程序
    void free_irq(unsigned  int  irq,void  *  dev)

*中断处理程序通常不是和特定设备关联,而是和特定中断相连的。也就是说,如果一个设备可以产生多种不同中断,那么设备可以对应多个中断处理程序.一个中断线如果声明为可以共享的话,那这个中断线上也可以有几个中断处理程序。



(1)处理器在中断了当前工作后,会跳到内存中预定义的位置执行那里的代码。每条中断线跳到的位置都是唯一确定的。
(2)执行do_IRQ(),将当前中断线在所有处理器上都屏蔽掉,查看当前中断线上是否有可用的中断处理程序。是则执行第三步,不是则直接执行第四步。
 (3)handler_IRQ_event()
(4)ret_from_intr()  判断 调度程序是否被挂起,如果是则 重新调度。如果返回的是进程上下文的话,则还要查看 preempt_count标志位,判断是否支持内核抢占。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值