51 软中断的实现

news2024/11/15 12:35:41

前言

呵呵 中断机制 也是内核中很常见的机制了 

中断机制是现代计算机系统中的基本机制之一,它在系统中起着通信网络的作用,以协调系统对各种外部事件的响应和处理,中断是实现多道程序设计的必要条件,中断是CPU 对系统发生的某个事件作出的一种反应。引起中断的事件称为中断源。中断源向CPU 提出处理的请求称为中断请求。发生中断时被打断程序的暂停点称为断点。CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。CPU执行有关的中断处理程序称为中断处理。而返回断点的过程称为中断返回。中断的实现由软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序。

 

 

软中断的处理 

 (initramfs) cat /proc/softirqs
                    CPU0
          HI:          0
       TIMER:       2566
      NET_TX:          0
      NET_RX:          0
       BLOCK:        108
    IRQ_POLL:          0
     TASKLET:          1
       SCHED:          0
     HRTIMER:          0
         RCU:       2978

软中断这部分处理是在 softirq.do_softirq 中进行处理的 

时钟软中断是最频繁的 对应的 handler 是 timer.run_timer_softirq

RCU 对应的 handler 是 tree.rcu_process_callbacks

BLOCK 对应的 handler 是 blk-softirq.blk_done_softirq

NET_TX 对应的 handler 是 dev.net_rx_action

TASKLET 对应的 handler 是 softirq.tasklet_action

 

 

是在 各个 ksoftirqd/$cpuId 的进程中执行的

在中断处 打上断点, 可以看到 系统缓慢启动 ….

 

 

在哪里注册中断?

这部分中断通常来说是 系统启动 的时候注册的

注册 SCHED 软中断

80d83912637849d1860874760483371f.png

 

注册 RCU 软中断 

 

aa2aeaa2c6724606b260be8a9ddbee01.png

 

注册 TASKLET, HI 软中断 

3136f58396a64694bcaee65545bedfda.png

 

注册 BLOCK 软中断 

f207980010374b81a45b69eff9664a8a.png

 

注册 NET_TX, NET_RX 的软中断 

622c0d3b8cf54f398b299132914c0de1.png

 

 

BLOCK 软中断的处理 与 触发

软中断本身携带的数据有 终端号

BLOCK 中断之后从 blk_cpu_done 队列中遍历 request, 来回调处理 

 

 

将请求添加到 blk_cpu_done 队列的是来自于 硬中断, ata, scsi 的回调处理过程 

74a6f593fb7d42e6b6d4742cea2f3541.png

 

将 request 添加到了 blk_cpu_done 队列之后, 主动触发了一下 BLOCK 软中断, 处理如下图 

BLK 软中断的触发主要是在 cpu_end 的时候, dma 完成之后 blk_complete_request 通知的时候 

36e49de76ff740d3bec3c7e58001078c.png

 

 

RCU 软中断的处理 与 触发

定时触发 RCU 软中断, 判断标准参见 tree.__rcu_pending

08bba13428f94c3faa812f29903b5ca3.png

 

RCU 中断的处理如下 

909a35723f9a4ed39de32f4c94d68cbd.png

 

 

时钟 软中断的处理 与 触发

定时触发 时间 软中断

19e8cb00ca5f44809982f169cca9a67c.png

 

时钟 软中断的处理如下 

9c86e03a5bd9497ba470cc93998a63e7.png

 

 

NET_RX 软中断的处理 和 触发

网卡 emit 了一个消息到 loopback 网卡队列之后, 设备 会触发一个 NET_RX 的软中断 

e013077508a446e88683c31882b9b73b.png

 

收到 NET_RX 之后, 走 dev.net_rx_action 来处理收到 skb 的相关业务处理 

152f6b3542bd43dda1f32a4b57d94569.png

 

 

TASKLET 软中断的处理 和 触发

系统启动的时候, 触发了一个 keyboard 的 tasklet 的软中断 

2d55967c7ca34298b694e2ddecb3bfb2.png

 

tasklet 的 软中断处理函数为 softirq.tasklet_action

keyboard 对应的这个 tasklet 处理为 keyboard.kbd_bh

914320913bce4badb1b4cd86d6c286ce.png

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

考研数学——高数:重积分

直角坐标系下二重积分 助记1: 因为一重积分求出的是二维平面的面积,类比得到二重积分得到的是三维的体积 而用之前求旋转体体积的思路:已知截面面积可求得体积。来表示二重积分 在控制一个变量不变(x / y)时&#x…

天猫淘宝详情接口API揭秘:实现个性化商品推荐!

天猫淘宝作为中国最大的电商平台,拥有庞大的商品库存和众多用户,为了提高用户购物体验并满足其个性化需求,天猫淘宝推出了详情接口API,通过智能算法实现个性化商品推荐。联讯数据将为您揭秘详情接口API的实现原理和功能。 个性化商…

Phoenix:去中心化的AI垂直基础设施|JDI Ventures研报

随着文生视频模型 Sora 的问世,AI 领域迎来了又一个里程碑。毫无疑问,由 ChatGPT 所开启的 AI 浪潮已经势不可挡,这是技术的浪潮,也是商业的浪潮,将对人们的生活带来比互联网更为深刻的改变——改变我们的消费、工作和…

RNN(Recurrent Neural Networks)循环神经网络

循环神经网络(Recurrent Neural Network,简称RNN)是一种处理序列数据的神经网络结构,它具有记忆能力,能够捕捉序列中的时序信息。RNN在自然语言处理、时间序列预测等方面有着很多的应用。 一、RNN 的基本结构 RNN的包…

寒假作业Day 08

寒假作业Day 08 一、选择题 1、下列关于 const 和 #define 定义常量的区别,说法不正确的有( ) A: define宏是在预处理阶段展开。const常量是编译运行阶段使用 B: 宏没有类型,不做任何类型检查,仅仅是展开。const常量…

Docker MySQL 报 2059 错误:认证插件 ‘caching_sha2_password‘ 无法加载

使用docker部署的mysql8.0.29再使用Navicat连接myslq报错Authentication plugin ‘xxxxxxx’ cannot be loaded:XXXXXX (无法加载身份验证插件) 原因:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规…

实现QT中qDebug()的日志重定向

背景: 在项目开发过程中,为了方便分析和排查问题,我们需要将原本输出到控制台的调试信息写入日志文件,进行持久化存储,还可以实现日志分级等。 日志输出格式: 我们需要的格式包括以下内容: 1.…

【Java - 框架 - Mybatis】(01) 普通Java项目使用Mybatis操作Mysql - 快速上手

普通Java项目使用Mybatis操作Mysql - 快速上手 说明 通过软件"IntelliJ IDEA"创建"Maven"项目完成;通过"Mybatis"框架操纵"MySQL"数据库完成操作; 环境 Java版本"1.8.0_202";Windows …

根据QQ号获取暗恋的人的全部歌单

文章目录 前言一、成果展示二、后端开发流程三、前后端障碍与难点解决四、待扩展内容五、总结 前言 本人喜欢使用QQ音乐听歌,并且喜欢点击好友栏目观看最近在听,了解暗恋的人最近在听什么歌曲,知己知彼,百战不殆。但是每次都需要…

Python数据分析实验一:Python数据采集与存储

目录 一、实验目的与要求二、实验过程三、主要程序清单和运行结果1、爬取 “中国南海网” 站点上的相关信息2、爬取天气网站上的北京的历史天气信息 四、程序运行结果五、实验体会 一、实验目的与要求 1、目的: 理解抓取网页数据的一般处理过程;熟悉应用…

JAVA实战开源项目:智能停车场管理系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容A. 车主端功能B. 停车工作人员功能C. 系统管理员功能1. 停车位模块2. 车辆模块3. 停车记录模块4. IC卡模块5. IC卡挂失模块 三、界面展示3.1 登录注册3.2 车辆模块3.3 停车位模块3.4 停车数据模块3.5 IC卡档案模块3.6 IC卡挂…

【python】异常处理

前言 省略各种废话,直接快速整理知识点 try-except 基础 作用 程序不可能永远都是对的,当7除a,a由用户输入时,用户输入0就会报错。try-except就是解决这些问题。 结构 多分支自定义错误类型 上方的exception是一个错误类型…

Unity性能优化篇(七) UI优化注意事项以及使用Sprite Atlas打包精灵图集

UI优化注意事项 1.尽量避免使用IMGUI(OnGUI)来做游戏时的UI,因为IMGUI的开销比较大。 2.如果一个UGUI的控件不需要进行射线检测,则可以取消勾选Raycast Target 3.尽量避免使用完全透明的图片和UI控件。因为即使完全透明,我们看不见它&#xf…

【牛客】HJ87 密码强度等级 CM62 井字棋

题目一:密码强度等级 题目链接:密码强度等级_牛客题霸_牛客网 (nowcoder.com) 本题主要考察C语言中逻辑分支语句,基本语句以及对各种特殊字符 ,ASCII值以及条件表达中的逻辑运算符关系运算符各自功能的理解,以及基本使用&#x…

【linuxC语言】dup、dup2函数

文章目录 前言一、dup函数二、dup2函数三、将标准输出重定向到文件总结 前言 在Linux环境下,dup、dup2以及原子操作都是用于文件描述符管理和处理的重要工具。这些功能提供了对文件描述符进行复制和原子操作的能力,使得在多线程或多进程环境中更加安全和…

qt一个项目有且只有有一个maindow,其他小窗口用QWidget,QDialog是带有yes和no的QWidget

QMaindow QWidget QDialog区别很大 我想要在生成一个小窗口,结果选择基类为maindow,应该是QWidget 然后就出现奇奇怪怪的问题 QMaindow和QWidget不能乱选择,而且各自QPaintEvent也有很多区别 以下就是错误: 我继承maindow的基类…

C#,排列组合的堆生成法(Heap’s Algorithm for generating permutations)算法与源代码

1 排列组合的堆生成法 堆生成算法用于生成n个对象的所有组合。其思想是通过选择一对要交换的元素,在不干扰其他n-2元素的情况下,从先前的组合生成每个组合。 下面是生成n个给定数的所有组合的示例。 示例: 输入:1 2 3 输出&a…

【Qt】四种绘图设备详细使用

绘图设备有4个: **绘图设备是指继承QPainterDevice的子类————**QPixmap QImage QPicture QBitmap(黑白图片) QBitmap——父类QPixmapQPixmap图片类,主要用来显示,它针对于显示器显示做了特殊优化,依赖于平台的,只能在主线程…

python编程从入门到实践

python编程从入门到实践 if语句1.条件测试:2.更多的条件测试:3.外星人颜色#1:4. 外星人颜色#2:5. 外星人颜色#3:6. 人生的不同阶段:7. 喜欢的水果:8. 以特殊方式跟管理员打招呼:9. 处…

程序员失业,被迫开启 PlanB——成为自由职业/独立开发者的第 0 天

程序员失业,被迫开启 PlanB——成为自由职业/独立开发者的第 0 天 今天在逛V2EX的时候看到的一个帖子,程序员中年被裁,被迫开启独立开发这条路。 原贴如下: lastday, 失业啦 公司年前通知我合同到期不续签,今天是我…