理解Linux软中断
时间:2019-08-25
本文章向大家介绍理解Linux软中断,主要包括理解Linux软中断使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原文引用https://www.dazhuanlan.com/2019/08/25/5d625adf891d0/
中断:中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常执行和调度,然后调用内核中的中断处理进程来响应设备的请求。
中断的形象化描述:取外卖场景
1.中断是一种异步的事件处理机制,能提高系统的并发处理能力
2.为了减少对正常进程运行进行影响,中断处理进程需要尽快运行
3.中断分为,上下两个部分
(1)上半部用来快速处理中断,在中断禁止模式下,主要处理跟硬件紧密相关的或时间敏感的工作
(2)下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。
小结:
- 上半部直接处理硬件请求,即硬中断,特点是快速执行
- 下半部由内核触发,即软中断,特点是延迟执行
实际上,上半部会打断CPU正在执行的任务,然后立即执行终端处理进程。而下半部分以内核线程的方式执行,并且每个CPU都对应一个软中断内核线程,名为“ksoftirq/cpu编号”。
软中断除了硬件设备中断处理进程的下半部分,还包括一些内核自定义的事件,如:内核调度RCU锁
4.proc文档系统是一种内核空间和用户空间进行通信的机制,可以用来查看内核的数据结构或者用来动态修改内核配置,如:
- /proc/softirqs提供软中断的运行情况
- /proc/interrupts提供硬中断的运行情况
辅助案例加深理解
例子:网卡接收数据包
网卡接收到数据包后,会通过硬件中断的方式,通知内核有新的数据到了。这时,内核就会调用中断处理进程来响应它。
在这个案例中,上半部和下半部负责的工作:
- 上半部:既然是快速处理,其实就是要把网卡的数据读到内存中,然后更新一下硬件寄存器的状态(表示数据已经读好了),最后再发送一个软中断信息,通知下半部做进一步处理了。
- 下半部:被软中断唤醒后,需要从内存中找到网络数据,再按照网络协议栈,对数据进程逐层解析和处理,直到把它送给应用进程。
原文地址:https://www.cnblogs.com/petewell/p/11408856.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mybatis-Plus 的简单使用
- Mybatis-Plus 条件构造器
- Nginx 反向代理
- 非关系型数据库 Redis
- MyBatis 简单使用
- 数值分析常见习题解答
- Spring Web MVC 文件上传
- Leetcode 45 跳跃游戏 II (贪心+数学)
- Leetcode 第23场双周赛D 5363. 做菜顺序(DP,贪心)
- Leetcode 22. 括号生成 (括号匹配,dfs)
- MQ 系列之 ActiveMQ 介绍
- Python Tips(1) 数字与字符串之间转换,采用内置函数
- Spring Web MVC 拦截器
- Spring Web MVC 响应消息
- Codeforces Round #633 (Div. 2)D Edge Weight Assignment(构造、树的权值异或)