• 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章)

  • 相关阅读:
    object对象
    addEventListener 和 attachEvent
    BOM常用对象
    动态原型
    鼠标移动图片放大效果(兼容IE8、多图)
    伪元素:before和:after
    javascript/js 判断是否安装flash player插件,提示安装方法。
    Form表单值转换为[{name:'',value}]键值对
    [转][网站、云服务与虚拟机]弄清负载均衡的机制
    C# Lazy Initialization
  • 原文地址:https://www.cnblogs.com/dwj411024/p/13040975.html
Copyright © 2020-2023  润新知