Linux 中断子系统(三)—— softirq和tasklet

本文详细探讨Linux中断子系统中的Softirq和Tasklet机制。中断分为Top-half和Bottom-half处理,以提高响应能力。Softirq不支持动态分配,通过open_softirq接口注册处理函数。Tasklet支持动态和静态分配,可绑定在特定CPU上,通过tasklet_schedule接口进行调度。软中断和Tasklet的处理流程包括初始化、调度、执行等环节,确保在不同上下文中正确执行。
摘要由CSDN通过智能技术生成

1、中断机制

        中断子系统中有一个重要的设计机制,那就是Top-half和Bottom-half,将紧急的工作放置在Top-half中来处理,而将耗时的工作放置在Bottom-half中来处理,这样确保Top-half 能尽快完成处理。



        1)如果中断不分上下半部处理,那么意味着只有等上一个中断成处理后才会打开中断,下一个中断才能得到响应。当某个中断处理处理时间较长时,很有可能就会造成其他中断丢失而无法响应,这个显然是难以接受的,比如典型的时钟中断,作为系统的脉搏,它的响应就需要得到保障;
        2)中断分成上下半部处理可以提高中断的响应能力,在上半部处理完成后便将中断打开(通常上半部处理越快越好),这样就可以响应其他中断了,等到中断退出的时候再进行下半部的处理;
        3)中断的Bottom-half机制,包括了softirq、tasklet、workqueue、以及前文中提到过的中断线程化处理等,其中tasklet 又是基于softirq来实现的

2、数据结构

task_struct 结构体中的thread_info.preempt_count用于记录当前任务所处的context 状态:
        PREEMPT_BITS:用于记录禁止抢占的次数,禁止抢占一次该值就加1,使能抢占该值就减1;
        SOFTIRQ_BITS:用于同步处理,关掉下半部的时候加1,打开下半部的时候减1;
        HARDIRQ_BITS:用于表示处于硬件中断上下文中;


3、Softirq

3.1 初始化

        softirq 不支持动态分配,Linux kernel 提供了静态分配,关键的结构体描述如下,可以类比硬件中断来理解:
/*支持的软中断类型,可以认为是软中断号,其中从上到下优先级递减*/

enum
{
    HI_SOFTIRQ=0,        /* 最高优先级软中断 */
    TIMER_SOFTIRQ,       /* Timer定时器软中断 */
    NET_TX_SOFTIRQ,      /* 发送网络数据包软中断 */
    NET_RX_SOFTIRQ,      /* 接收网络数据包软中断 */
    BLOCK_SOFTIRQ,       /* 块设备软中断 */
    IRQ_POLL_SOFTIRQ,    /* 块设备软中断 */
    TASKLET_SOFTIRQ,     /* tasklet软中断 */
    SCHED_SOFTIRQ,       /* 进程调度及负载均衡的软中断 */
    HRTIMER_SOFTIRQ,     /* Unused, but kept as tools rely on thenumbering.Sigh! */
    RCU_SOFTIRQ,         /* Preferable RCU should always be the last softirq, RCU相关的软中断 */
    NR_SOFTIRQS
};


/*软件中断描述符,只包含一个handler函数指针*/

struct softirq_action{
    void (*action)(struct softirq_action *);
};


/*软中断描述符表,实际上就是一个全局的数组*/

static struct softirq_action softirq_vec[NR_SOFTIRQS]_cacheline_aligned_in_smp;


/*CPU软中断状态描述,当某个软中断触发时,_softirq_pending 会置位对应的bit*/

typedef struct{
unsigned int_softirq_pending;uns
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值