十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
linux 操作系统中的运行时中断是一种异步的执行状态,它用于处理系统中的异步事件,如时钟中断和 I/O中断等。CPU 会立即停止当前的处理,并将控制权转移到内核或硬件,以便处理来自设备的中断。本文将讨论Linux下运行时中断的概念,原理及其实现方式。

创新互联专注于企业成都全网营销推广、网站重做改版、连江网站定制设计、自适应品牌网站建设、html5、商城网站建设、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为连江等各大城市提供网站开发制作服务。
由于 Linux 操作系统是面向用户的多任务操作系统,因此它必须能够同时处理来自硬件设备和用户程序的中断。每个中断都有一个中断号,内核搜索中断处理程序来处理它。中断处理程序只有一个少量的代码,它以中断号来驱动的。
Linux 运行时中断和其他硬件中断最大的不同之处在于,它们由软件来调用并处理,而不像硬件中断一样由硬件调用处理。因此,内核中的每个运行时中断都有一个具体的中断处理函数(handler routine)。当内核需要调用此类中断时,它会调用其中断处理程序,而不是外部中断程序。
Linux 中断处理程序函数也称为“中断函数”(interrupt service routines,ISRs),它们能够接收特定硬件中断,并且能够接受 CPU 上的非抢占式处理。从 Linux 2.6 内核开始,Linux 系统中的 ISR 函数被称为“tasklets”,是一种新的低开销的运行时中断,可以被添加或移除,它们可以被用于轻量级的中断处理,而不立即调用 ISR,而是在控制流程回到进程上下文时被处理。
使用`tasklet_init()、tasklet_schedule()`等函数即可对特定的运行时中断进行不同程度的初始化、调度、暂停和恢复。`tasklets`是一种内核代码,具体实现如下:
struct tasklet_struct {
  struct tasklet_struct *next; 
  unsigned long state;   
  atomic_t count;              //引用计数 
  void (*func)(unsigned long);  //回调函数 
  unsigned long data;          //参数 
};
static void tasklet_action(struct softirq_action* a)
{
    struct tasklet *list;
    unsigned long flags;
    local_irq_save(flags);
    list = __get_cpu_var(tasklet_vec).head;
    __get_cpu_var(tasklet_vec).head = NULL;
    __get_cpu_var(tasklet_vec).tail = &__get_cpu_var(tasklet_vec).head;
    local_irq_restore(flags);
    while (list) {
        struct tasklet *t = list;
        list = list->next;
        if (tasklet_trylock(t)) {
            if (!atomic_read(&t->count)) {
                if (!test_and_clear_bit(TASKLET_STATE_SCHED, &t->state))
                    BUG();
                t->func(t->data);
                tasklet_unlock(t);
                continue;
            }
            tasklet_unlock(t);
        }
        local_irq_save(flags);
        t->next = NULL;
        *__get_cpu_var(tasklet_vec).tail = t;
        __get_cpu_var(tasklet_vec).tail = &(t->next);
        __raise_softirq_irqoff(TASKLET_SOFTIRQ);
        local_irq_restore(flags);
    }
}
总之,Linux 运行时中断是 Linux 操作系统中重要的一部分,它提供了一种方法来解决硬件设备的中断,并帮助提高系统性能。它可以实现低开销的中断处理,并能灵活高效地处理由硬件和用户应用程序引发的多种中断。
成都服务器托管选创新互联,先上架开通再付费。
创新互联(www.cdcxhl.com)专业-网站建设,软件开发老牌服务商!微信小程序开发,APP开发,网站制作,网站营销推广服务众多企业。电话:028-86922220