中断

中断


中断内部被细分成了两部分, 中断上半部, 中断下半部.

中断不能被相同类型的中断打断,而下半部依然可以被中断打断;中断对于时间非常敏感,而下半部基本上都是一些可以延迟的工作。由于二者的这种区别,所以对于一个工作是放在上半部还是放在下半部去执行,可以参考下面4条:

  1. 如果一个任务对时间非常敏感,将其放在中断处理程序中执行。
  2. 如果一个任务和硬件相关,将其放在中断处理程序中执行。
  3. 如果一个任务要保证不被其他中断(特别是相同的中断)打断,将其放在中断处理程序中执行。
  4. 其他所有任务,考虑放在下半部去执行。

中断上半部

这里写图片描述

中断上下文

进程上下文是运行在内核态帮助进程在内核执行, 通过current宏关联当前的进程, 在内核态进程是可以睡眠的, 可以调用调度函数的, 但是中断上下文是不能睡眠的.

  1. 中断上半部主要就是快速的处理中断信号.
  2. 它有严格的时间限制, 因为中断会打断其他代码的执行.
  3. 中断上半部处理的时侯不会被打断, 不能睡眠, 所以不能在中断执行某些函数(并不是不能执行其他函数).
  4. 尽量将中断工作(处理等)交给中断下半部.

中断处理程序是被内核用来处理中断的, 同时他也是不可阻塞的, 检测到中断就会立即执行.

中断上半部运行的就是中断处理函数, 它主要是将中断交给下半部来处理, 同时在中断处理结束返回时标记它是什么类型的中断.比如 软中断代替用户态进程在内核态运行返回时, 中断调用run_local_times将其标记为软中断.

中断也有自己的中断栈, 大概1kb左右. 为了保存执行在中断的一些函数的数据, 指针.


中断下半部

因为中断上半部要达到即时响应, 将工作都交给了中断下半部.

下半部的实现是由以下构成的

  1. k);

    // 重复执行

  2. 软中断

  3. tasklets

  4. 工作队列

软中断

软中断是由编译时静态分配的. 产生后并不是马上可以执行,必须要等待内核的调度才能执行。可以并发

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值