位置: IT常识 - 正文

linux中断的上半部和下半部详解(linux中断原理)

编辑:rootadmin
与Linux中断息息相关的一个重要概念是Linux中断分为两个半部:上半部(tophalf)和下半部(bottom half)。今天小编将为大家带来的是linux中断的上半部和下半部详解!希望对大家会有帮... 17-03-21

推荐整理分享linux中断的上半部和下半部详解(linux中断原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux中断系统,linux中断处理流程,linux中断类型,linux中断系统,linux中断系统,linux中断处理流程,linux中断系统,linux中断的概念,内容如对您有帮助,希望把文章链接给更多的朋友!

与Linux中断息息相关的一个重要概念是Linux中断分为两个半部:上半部(tophalf)和下半部(bottom half)。上半部的功能是"登记中断",当一个中断发生时,它进行相应地硬件读写后就把中断例程的下半部挂到该设备的下半部执行队列中去。因此,上半部执行的速度就会很快,可以服务更多的中断请求。但是,仅有"登记中断"是远远不够的,因为中断的事件可能很复杂。因此,Linux引入了一个下半部,来完成中断事件的绝大多数使命。下半部和上半部最大的不同是下半部是可中断的,而上半部是不可中断的,下半部几乎做了中断处理程序所有的事情,而且可以被新的中断打断!下半部则相对来说并不是非常紧急的,通常还是比较耗时的,因此由系统自行安排运行时机,不在中断服务上下文中执行。

Linux实现下半部的机制主要有tasklet和工作队列。

Tasklet基于Linux softirq,其使用相当简单,我们只需要定义tasklet及其处理函数并将二者关联:

void my_tasklet_func(unsigned long); //定义一个处理函数:DECLARE_TASKLET(my_tasklet,my_tasklet_func,data); //定义一个tasklet结构my_tasklet,与my_tasklet_func(data)函数相关联

然后,在需要调度tasklet的时候引用一个简单的API就能使系统在适当的时候进行调度运行:

tasklet_schedule(&my_tasklet);

此外,Linux还提供了另外一些其它的控制tasklet调度与运行的API:

DECLARE_TASKLET_DISABLED(name,function,data); //与DECLARE_TASKLET类似,但等待tasklet被使能tasklet_enable(struct tasklet_struct *); //使能tasklet tasklet_disble(struct tasklet_struct *); //禁用tasklet tasklet_init(struct tasklet_struct *,void (*func)(unsigned long),unsigned long); //类似DECLARE_TASKLET() tasklet_kill(struct tasklet_struct *); // 清除指定tasklet的可调度位,即不允许调度该tasklet

我们先来看一个tasklet的运行实例,这个实例没有任何实际意义,仅仅为了演示。它的功能是:在globalvar被写入一次后,就调度一个tasklet,函数中输出"tasklet is executing":

#include … //定义与绑定tasklet函数void test_tasklet_action(unsigned long t);DECLARE_TASKLET(test_tasklet, test_tasklet_action, 0);void test_tasklet_action(unsigned long t){printk("tasklet is executing\n");}…ssize_t globalvar_write(struct file *filp, const char *buf, size_t len, loff_t *off){…if (copy_from_user(&global_var, buf, sizeof(int))){return-EFAULT;}//调度tasklet执行tasklet_schedule(&test_tasklet);return sizeof(int);}

下半部分的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。在Linux2.6的内核中存在三种不同形式的下半部实现机制:软中断,tasklet和工作队列。

下面将比较三种机制的差别与联系。

软中断:

1、软中断是在编译期间静态分配的。

linux中断的上半部和下半部详解(linux中断原理)

2、最多可以有32个软中断。

3、软中断不会抢占另外一个软中断,唯一可以抢占软中断的是中断处理程序。

4、可以并发运行在多个CPU上(即使同一类型的也可以)。所以软中断必须设计为可重入的函数(允许多个CPU同时操作),

因此也需要使用自旋锁来保护其数据结构。

5、目前只有两个子系直接使用软中断:网络和SCSI。

6、执行时间有:从硬件中断代码返回时、在ksoftirqd内核线程中和某些显示检查并执行软中断的代码中。

tasklet:

1、tasklet是使用两类软中断实现的:HI_SOFTIRQ和TASKLET_SOFTIRQ。

2、可以动态增加减少,没有数量限制。

3、同一类tasklet不能并发执行。

4、不同类型可以并发执行。

5、大部分情况使用tasklet。

工作队列:

1、由内核线程去执行,换句话说总在进程上下文执行。

2、可以睡眠,阻塞。

本文链接地址:https://www.jiuchutong.com/zhishi/283127.html 转载请保留说明!

上一篇:win10商店错误代码0x80D02017怎么办(win10商店发生了错误请稍后再试)

下一篇:mc.exe - mc是什么进程文件 有什么作用(mcshield.exe是什么进程)

  • 个人获得的专利有哪些
  • 增值税明细账用三栏式还是多栏式
  • 销项税额和进项税额月底怎么结转
  • 客户发票弄丢了应该如何补救
  • 新公司季初资产总额和季末资产总额怎么填
  • 汇算清缴税费怎么入账
  • 签劳务合同需要什么资质
  • 金税维护费申报表
  • 发票领回来了怎么读入发票
  • 计入无形资产
  • 代交社保费会计账务处理
  • 小企业所得税申报流程
  • 法律关系的内容是指
  • 民间非营利组织会计科目
  • 企业案例描述
  • 影响盈利能力的外部因素
  • 增值税发票遗失证明模板
  • 如何下载网页?
  • 如何解决win10系统安装不兼容驱动的问题
  • 鸿蒙系统怎么开发
  • 原始股解禁后减持的条件是什么
  • 商业承兑汇票分为哪两种
  • thinkpad预装的office怎么激活
  • 巴蒂斯塔卡里
  • 电脑legacy是什么意思
  • windows10设备如何打开蓝牙
  • 贷款逾期的本金利息
  • php如何重启
  • 小企业取得存货入账价值的依据是
  • 整体租赁合同
  • vue-cli typescript
  • 借款费用开始资本化应满足的条件不包括
  • php用户登录界面
  • 微信小程序获取位置信息的权限在哪里修改位置
  • 补缴税款后还能退税吗
  • 未税收入怎么做分录
  • Midjourney之外21款免费的AI Image画图网站集合
  • 最多显示2行文字怎么弄
  • 办理组织机构代码证需要什么材料
  • 老板财务报表模板
  • 生产型外资企业
  • mysql报错1227
  • 物业公司电费最多可以收多少钱一度
  • 电子发票开出后如何查看
  • 转出未交增值税会计处理
  • 首次购买金税盘怎么做账
  • 施工单位代建收费合理吗
  • 小企业会计准则坏账怎么处理
  • 赞助费入账需要多久
  • 资本金与注册资金的关系
  • 小规模纳税人超过30万是全额纳税吗
  • 个人交五险一金多少钱一个月
  • 销售净利润怎么算
  • 将Reporting services的RDL文件拷贝到另外一台机器时报Data at the root level is invalid的解决方法
  • 配置是什么意思
  • mysql8.0无法启动
  • 微软补丁星期二更新吗
  • 亲测可用抖音低价单赚派费项目
  • win10开机提醒
  • mac adobe flash player一直提示更新
  • 苹果mac os x 怎么样使用光盘
  • 盗版xp黑屏的解决办法
  • win8.1新建桌面
  • win8怎么创建宽带连接
  • win7如何设置网络连接路由器
  • 左手linux+gdb,右手unity+vs,一个bit一个bit地去调试是种什么体验
  • 安装centos no such device
  • 批处理改ipv4地址
  • js模块化开发教程
  • 完美解决usb电涌15秒后关机
  • js继承的概念
  • js使用类
  • python爬虫有道翻译
  • android应用程序包下载安装
  • 如何查询哈尔滨医院药品信息
  • 12366纳税服务热线的接通率
  • 黄金消费税如何征收
  • 河北社保网上申报时间
  • 增+6=多少
  • 怎么注册山东省电子税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设