zoukankan      html  css  js  c++  java
  • linux中断处理函数

    1) 根据中断的来源可分为内部中断和外部中断,内部中断的中断源来自于CPU内部(软件中断指令、溢出、除法错误等),例如操作系统从用户态切换到内核态需要借助CPU内部的软件中断,外部中断的中断源来自于CPU外部,由外设触发。

    2) 根据中断是否可以被屏蔽,中断可分为可屏蔽中断和不可屏蔽中断,可屏蔽中断可以通过设置中断控制器寄存器等方法被屏蔽,屏蔽后,该中断不再得到响应,而不可屏蔽中断不能被屏蔽。

    3) 根据中断入口跳转方式的不同,中断可分为向量中断和非向量中断。采用向量中断的CPU通常为不同的中断分配不同的中断号,当检测到中断的中断号到来时,就自动跳转到该中断对应的地址处去执行程序。不同的中断号对应不同的中断入口地址。非向量中断的多个中断共享一个入口程序处理入口地址,中断程序跳转到该入口地址执行时,再通过中断程序来判断中断标志来识别具体是哪一个中断,也就是说向量中断由硬件提供中断服务程序入口地址,非向量中断由软件提供中断服务程序入口地址。

    中断处理函数(interrupt handler)有一个要求就是要短小精悍,运行时间越短越好。因为在中断处理函数之前,会先关中断,那么在中断处理函数执行的这段时间内,所有发生的中断将都不能被处理。但是很多时候我们在中断处理中必须要做很多事情,这时候怎么办呢?

    内核里面提供了bottom half这样的机制使得我们可以达到这样的目的。

    Top half & Bottom half
    中断处理过程被分成了两个部分,top half会将所需要作的工作全部交给bottom half去做然后自己立刻返回。

    top half:完成尽可能少的比较急的功能,它往往只是简单的读取寄存器的中断状态,并清除中断标志后就进行“中断标记”(也就是把底半部处理程序挂到设备的底半部执行队列中)的工作。特点是响应速度快。

    bottom half:中断处理的大部分工作都在底半部,它几乎做了中断处理程序的所有事情。 特点:处理相对来说不是非常紧急的事件 ,底半部机制主要有:tasklet、工作队列和软中断。

    在内核中提供了下面三种机制可以让我们实现bottom half: softirqs, tasklets 和 work queues.

    Softirq是基础的bottom half机制, tasklet是建立在softirq之上的。这二者的主要区别在于Softirq是可重入的,而tasklet是不可重入的。(具体linux的中断可以参考正点原子阿尔法开发板手册第51章)

  • 相关阅读:
    C#一些定义
    顺序
    针对IE8的css hack
    js 数字,金额 用逗号 隔开。数字格式化
    Ubuntu下使用Vi是方向键变乱码 退格键不能使用的解决方法
    UBUNTU中如何获得root权限
    区分IE8 、IE9 的专属css hack
    ubuntu 安装 Sublime Text 2
    PHP执行zip与rar解压缩方法
    使用ThinkPHP时,双引号导致插入数据库经过转义的处理
  • 原文地址:https://www.cnblogs.com/dwj411024/p/13040975.html
Copyright © 2011-2022 走看看