位置: 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是什么进程)

  • realme gt neo2有耳机孔吗(realme gt neo2有耳机吗)

    realme gt neo2有耳机孔吗(realme gt neo2有耳机吗)

  • iphone11pro max的屏幕刷新率是90hz吗(iPhone11pro Max的屏幕多少钱)

    iphone11pro max的屏幕刷新率是90hz吗(iPhone11pro Max的屏幕多少钱)

  • 微信消息记录如何转移到新手机(微信消息记录如何导出)

    微信消息记录如何转移到新手机(微信消息记录如何导出)

  • vivo x50 pro屏幕刷新率是多少(vivox50刷屏率怎么设置)

    vivo x50 pro屏幕刷新率是多少(vivox50刷屏率怎么设置)

  • RecycleBinHW文件可以删除(recyclebinhw里的文件)

    RecycleBinHW文件可以删除(recyclebinhw里的文件)

  • 华为手机怎么设置信息不显示(华为手机怎么设置指纹解锁)

    华为手机怎么设置信息不显示(华为手机怎么设置指纹解锁)

  • 全民k歌能看到谁听了我的歌吗(全民k歌能看到在线状态吗)

    全民k歌能看到谁听了我的歌吗(全民k歌能看到在线状态吗)

  • 抖音能放多长时间的视频(抖音能放多长时间)

    抖音能放多长时间的视频(抖音能放多长时间)

  • 抖音录屏没声音怎么办(抖音怎么用自己的录音)

    抖音录屏没声音怎么办(抖音怎么用自己的录音)

  • 延长收货有什么用(延长收货有什么条件)

    延长收货有什么用(延长收货有什么条件)

  • oppoa92s指纹在哪(oppoa92s手机指纹不能用了怎么办)

    oppoa92s指纹在哪(oppoa92s手机指纹不能用了怎么办)

  • 平板辐射大还是手机辐射大(平板辐射大还是电视机辐射大些)

    平板辐射大还是手机辐射大(平板辐射大还是电视机辐射大些)

  • 直播因违规被关闭多久(直播违规了)

    直播因违规被关闭多久(直播违规了)

  • 微信第一次封什么时候可以解除(微信第一次封号封24小时能解吗)

    微信第一次封什么时候可以解除(微信第一次封号封24小时能解吗)

  • vivo手机打电话显示视频(vivo手机打电话显示无法访问移动网络怎么办)

    vivo手机打电话显示视频(vivo手机打电话显示无法访问移动网络怎么办)

  • 优化iphone储存空间什么意思(优化iPhone储存空间后 没有变)

    优化iphone储存空间什么意思(优化iPhone储存空间后 没有变)

  • 怎样唤醒小V(怎样唤醒小v对主人的个性称谓)

    怎样唤醒小V(怎样唤醒小v对主人的个性称谓)

  • 苹果xs是什么基带(iphone xs是几)

    苹果xs是什么基带(iphone xs是几)

  • 红米note8有几种配色(红米note8有几款)

    红米note8有几种配色(红米note8有几款)

  • iphonexs处理器是几核的(iphonexs处理器型号)

    iphonexs处理器是几核的(iphonexs处理器型号)

  • 手机充电保护怎么关闭(手机充电保护怎么没有了)

    手机充电保护怎么关闭(手机充电保护怎么没有了)

  • 淘宝图片怎么上传才清晰(淘宝图片怎么上水印)

    淘宝图片怎么上传才清晰(淘宝图片怎么上水印)

  • 微信朋友圈怎么发文字(微信朋友圈怎么发文字不发图片)

    微信朋友圈怎么发文字(微信朋友圈怎么发文字不发图片)

  • 来电说话声音小怎么办(来电通话声音小)

    来电说话声音小怎么办(来电通话声音小)

  • 华为mate20x和pro对比

    华为mate20x和pro对比

  • 安装win7系统前在BIOS中设置硬盘模式的方法(安装win7前需要手动格式化c盘吗)

    安装win7系统前在BIOS中设置硬盘模式的方法(安装win7前需要手动格式化c盘吗)

  • 购买土地自建厂房,土地怎样摊销
  • 发票该如何打印
  • 过桥费是多少
  • 收到税收返还会计分录
  • 小企业固定资产折旧的账务处理
  • 残保金上年在职职工工资总额怎么填
  • 业务招待费包括住宿费吗
  • 技术转让收入纳税调整
  • 公司破产后资产怎么处理
  • 建筑类没收入怎么填
  • 老板想提取销售公积金
  • 为什么要抵消损益
  • 残保基金属税金怎么算
  • 自然人代人开普票合法吗
  • 以后年度继续扣除广告宣传费,要怎么写分录?
  • 招标文件费属于哪类税收编码
  • 进口海运费增值税发票 抵扣
  • 港杂费是由谁收取
  • 小企业会计准则适用于哪些企业
  • 餐饮业成本核算明细表
  • 仓库折旧费
  • 汽车修理公司的成本怎么核算
  • 小规模年底税金怎么算
  • 企业并购特殊性税务处理
  • 开展党建系列活动
  • php实现删除功能
  • 涅迪克角灯塔上的节日彩灯,缅因州 (© Walter Bibikow/Alamy)
  • 安装运行所需环境怎么填
  • Es6的新特性promise对象的设计初衷是
  • 变量与数据
  • java聚合工程
  • 哪些企业可以开13点税票
  • 赔偿款收据样本
  • 增值税与消费税中关于包装物押金规定的异同点
  • 免税的10万元是什么
  • 接受捐赠物品的入账价值
  • 织梦官方网站
  • 不动产投资缴纳什么税
  • div不规则排版
  • 预提开发成本的会计分录
  • 发票跨月还可以作废吗
  • SQL Server 2008 R2 应用及多服务器管理
  • sql server 2008 r2教程
  • 营改增的不利影响
  • 个人所得税的征收模式为()A
  • 善意取得增值税专用发票所得税
  • 公司支出发票
  • 商场活动经费预算
  • 出口退税申报分录怎么写
  • 进口货物的库存商品金额依据
  • 承包工程合同书
  • 进口关税增值税可以抵扣吗
  • 弥补上年亏损的分录 所得税
  • mysql重置binlog
  • SQL SELECT 语句的表连接
  • 侧边栏应用
  • windows任务管理器怎么用
  • os x10.11el capitan公测版下载地址(公测版计划注册教程)
  • win10无法进入休眠状态的原因
  • win8系统字体大小设置
  • oodag.exe - oodag是什么进程 有什么作用
  • Win8中漂亮的metro开始画面图标最大列数的设定方法
  • 铁嘴王指什么动物
  • unity脚本模板
  • linux find命令的使用
  • bootstrap范例
  • css控制html
  • NGUI之UITab Bar的不能将Sprite与SelectedSprite设置成相同的精灵
  • Python通过DOM和SAX方式解析XML的应用实例分享
  • python 源码解析
  • javascript运用
  • python周期性分析
  • 张家港保税区地区生产总值
  • 营改增后一般纳税人动产租赁税率
  • 开票后怎么报税呢
  • 退休人员还写工作单位吗
  • 306医院改名什么了
  • 地方税务局属于地市级还是副省级
  • 宁波无犯罪证明能当场拿到吗
  • 开票系统功能
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设