硬中断、软中断

   这篇文章介绍一下linux中向量中断、非向量中断、底半部机制、软中断、硬中断的内容,都是从网上搜过来的。
操作系统从用户态切换到内核态需要借助CPU 内部的软件中断。
向量中断:为不同的中断分配不同的中断号,进入不同的入口地址,入中地址由硬件提供;
非向量中断:同一个入口地址,进入后再由软件判断中断标志来识别具体哪个中断。
底半部机制
①tasklet:使用比较简单,只需要定义tasklet 及其处理函数并将两者关联。
   需要调度tasklet 的时候引用一个tasklet_schedule(&my_tasklet)函数就能使系统在适当的时候进行调度运行。
由于软中断必须使用可重入函数,设计上复杂度变高,如果应用不需要在多个CPU 上并行执行,没必要用软中断。
  a)一种类型的tasklet 只能运行在一个CPU 上,不能并行,只能串行执行。多个不同类型的tasklet 可以并行在多个CPU 上。
  b)软中断是静态分配的,在内核编译好之后,就不能改变。但tasklet 就灵活许多,可以在运行时改变(比如添加模块时)。
②工作队列:与tasklet 相似,先定义work_struct 与处理函数, INIT_WORK()实现两者的一个绑定。在顶半部中调用sschedule(&my_wq);
③软中断 
硬中断:外设的中断; 
软中断:通常是硬中断服务程序对内核的中断; 
信号:是内核对某个进程的中断。
软中断用softirq_action 表示,raise_softirq()触发软中断;
  a)产生后并不是马上执行,必须要等待内核的调度才能执行。软中断不能被自己打断,只能被硬件中断打断(上半部)。
  b)可以并发运行在多个CPU 上(即使同一类型的也可以)。软中断必须设计为可重入的函数(允许多个CPU 同时操作),因此也需要使用自旋锁来保护其数据结构。
   软中断和tasklet 运行于中断上下文,不可睡眠;工作队列运行于进程上下文,可以睡眠。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值