简图记录-linux中断基础

简图记录学习~

如果做linux驱动开发,中断的使用是必须掌握的知识;

1、中断概念

CPU正常运行期间,由于外部中断(硬件中断-键盘、鼠标操作)或者内部中断(异常-除0错误,缺页),通知CPU停止当前工作,跳转执行预先约定的任务然后返回继续工作的机制;

2、为什么要有中断

任何操作系统的核心任务都是对硬件设备资源进行有效管理,鼠标,键盘,显示器等;但是处理器的速度和外围硬件设备的速度往往不在一个量级,如果让处理器发出请求等待硬件回应,或者轮询查询处理都是低效的。更好的办法就是硬件在需要的时候向内核发出信号,通知内核处理。这就是中断机制。

3、Linux关基础概念

中断号:中断号是系统分配给每个中断源的代号,以便识别和处理;

中断控制器:连接设备和CPU桥梁,经中断控制器发出中断到CPU,提供中断信号收集,使能控制,优先级仲裁,路由服务;

中断向量表:内存中一张中断号与对应中断向量(中断服务程序入口地址)的查找表;

中断服务程序:内核中断执行的中断处理函数,需要通过request_irq函数进行注册;

中断上下文:内核处在处理中断处理程序的状态,不可休眠(2.6内核前共享进程栈,之后内核中断有自己的栈)

中断下半部(工作队列/tasklset/软中段) :为了保证中断任务处理尽可能又快又多,常把中断分为上半部分(严格限时工作-如硬件应答复位,或实时性要求非常高的任务)、下半部分(非要即时处理的工作,如部分数据分析工作等)。常见的下半部方式如 工作队列(每个CPU有一个内核线程处理推后的工作,利用内核线程调度执行,进程上下文),软中断(一组静态定义的下半部接口,当外部中断处理完成后,还在中断上下文中会处理挂起的软中断,中断上下文),tasklet(基于软中断机制,通过任务链表实现的可以动态创建的下半步接口,中断上下文);

4、一个中断响应流程

硬件设备(中断源)发起中断信号

中断控制器,判断对应中断号是否使能,优先级和选择CPU;

CPU若响应,关闭中断,跳转到内核定义中断处理程序入口(中断向量表);

保存装工段对应中断号入栈,执行do_IRQ()应答中断,禁止该线的中断传递,确认该线是否存在中断处理程序

如果存在中断处理程序,进行处理(如果使共享中断线,可能存在多个)

5、中断状态查看与debug

中断查看proc:cat /proc/interrupt (能看到每个cpu上中断响应的次数,中断号,中断名称)

中断状态查看:mpstat命令,查看CPU分配情况 irq 硬件中断占比,soft软中断占比;

root@ubuntu:/usr/share/gstreamer_install# mpstat
Linux 4.4.0-148-generic (ubuntu) 	09/03/2020 	_x86_64_	(1 CPU)

05:08:35 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
05:08:35 PM  all    1.11    0.03    0.53    0.01    0.00    0.00    0.00    0.00    0.00   98.32

指定中断绑定到某个CPU:echo [指定CPU编号,1表示CPU0,4表示CPU2]  >/proc/irq/xxx[中断号]/smp_affinity

6、中断常见典型问题

未清除中断挂起导致中断重复响应;中断自旋锁使用问题引起死锁挂死CPU;中断中使用了休眠的接口引起系统挂起;优先级设置问题引起系统响应性能;

 

参考《linux内核设计与实现》

学习建议:学习中断 基础的软硬件相关知识必须多阅读掌握,工作中多关注中断引起的问题及各种分析调试手段

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值