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

  • 华为荣耀8手机通话音量小怎么办(华为荣耀8手机,耳机好的但是插了还是外放)

    华为荣耀8手机通话音量小怎么办(华为荣耀8手机,耳机好的但是插了还是外放)

  • 打印机显示打印成功但是打不出来怎么办(打印机显示打印机状态不可用,请检查电源和线缆连接)

    打印机显示打印成功但是打不出来怎么办(打印机显示打印机状态不可用,请检查电源和线缆连接)

  • 毒上平台鉴别要多久(毒上面平台鉴别大概需要几天)

    毒上平台鉴别要多久(毒上面平台鉴别大概需要几天)

  • 计算机中数据的常用单位有(计算机中数据的表现形式是多少进制)

    计算机中数据的常用单位有(计算机中数据的表现形式是多少进制)

  • 华为手机定位服务在哪里打开(华为手机定位服务设置)

    华为手机定位服务在哪里打开(华为手机定位服务设置)

  • 电脑开机不自检无报警声(台式电脑开机不自检)

    电脑开机不自检无报警声(台式电脑开机不自检)

  • 智能语音收款播报器怎么没有声(智能语音收款播报器怎么连接)

    智能语音收款播报器怎么没有声(智能语音收款播报器怎么连接)

  • 华为matebook检测不到u盘(华为matebook14新笔记本检查)

    华为matebook检测不到u盘(华为matebook14新笔记本检查)

  • 苹果id都能查出什么(苹果id能查什么)

    苹果id都能查出什么(苹果id能查什么)

  • mate30闪存ufs规格(mate30pro闪存ufs)

    mate30闪存ufs规格(mate30pro闪存ufs)

  • plc的输出形式分别是哪三种(plc的输出形式分为哪几种)

    plc的输出形式分别是哪三种(plc的输出形式分为哪几种)

  • 电脑pln码是什么意思(电脑pln码是什么码)

    电脑pln码是什么意思(电脑pln码是什么码)

  • ie系列的浏览器都有哪些(ie系列的浏览器有哪些)

    ie系列的浏览器都有哪些(ie系列的浏览器有哪些)

  • iphonex是iphone10吗(iphone x是苹果10吗)

    iphonex是iphone10吗(iphone x是苹果10吗)

  • 路由器正常亮几个灯(路由器正常亮几个绿灯)

    路由器正常亮几个灯(路由器正常亮几个绿灯)

  • ios13.1.2更新了什么(ios13.2更新了什么)

    ios13.1.2更新了什么(ios13.2更新了什么)

  • 小米音量键设置在哪里(小米音量键设置成蓝色怎么调)

    小米音量键设置在哪里(小米音量键设置成蓝色怎么调)

  • 手机qq群创建在哪(手机qq群聊创建)

    手机qq群创建在哪(手机qq群聊创建)

  • 芒果tv如何修改绑定手机(芒果TV如何修改头像)

    芒果tv如何修改绑定手机(芒果TV如何修改头像)

  • 快手注销账号要多久(快手注销账号要多久才搜索不到)

    快手注销账号要多久(快手注销账号要多久才搜索不到)

  • iphone6是什么处理器(iphone6属于什么手机?)

    iphone6是什么处理器(iphone6属于什么手机?)

  • 卖家主动关闭订单危害(卖家主动关闭订单)

    卖家主动关闭订单危害(卖家主动关闭订单)

  • iphone下载的视频在哪里找(iPhone下载的视频看不了)

    iphone下载的视频在哪里找(iPhone下载的视频看不了)

  • 快手八卦头条在哪里看(快手八卦头条在哪里能看到)

    快手八卦头条在哪里看(快手八卦头条在哪里能看到)

  • c语言可以开发app吗(C语言可以开发什么)

    c语言可以开发app吗(C语言可以开发什么)

  • windows无法自动检测此网络的代理设置解决方法(windows无法自动检测网络代理设置该怎么办)

    windows无法自动检测此网络的代理设置解决方法(windows无法自动检测网络代理设置该怎么办)

  • yumdownloader命令  从Yum存储库下载软件包(yum命令安装软件)

    yumdownloader命令 从Yum存储库下载软件包(yum命令安装软件)

  • 待认证进项税额和待抵扣进项税额的区别
  • 子公司把利润给母公司怎么做账
  • 城建税及教育费附加怎么计算
  • 法人私户转公户怎么操作
  • 金税盘离线开票金额超限怎么处理
  • 个人公积金计入什么会计科目
  • 从租计征的房产税纳税期限
  • 上季度资产总额填错了怎么办
  • 固定资产减少当月
  • 无形资产研发费用加计扣除是晢时差异吗
  • 一年内到期的非流动负债包括哪些科目
  • 网银年费属于财务费用哪一项
  • 公司承担了个人社保如何入账
  • 城镇土地使用税征收标准及计算方法
  • 营改增对金融服务业税负的影响
  • 税务局每年都会大数据抽查吗
  • 发票添加商品编码怎么填
  • 最新房产税消息2020
  • 扣收手续费
  • 小规模增值税未开票收入填哪里
  • 分配利润怎么做科目
  • 信汇凭证是转账凭证吗
  • 专票开票信息不填省份可以吗
  • txt文档乱码怎么办
  • 如何理解结转利润的意思
  • win10无internet怎么解决
  • 在win7系统中,添加打印机驱动程序
  • 查补以前年度企业所得税的申报处理
  • 出口退税退回的税款怎么记账
  • 增值税发票半年后能冲红
  • 项目部可以直接给工人结账吗
  • win7纯净版系统之家
  • 为什么结转各项支出时本年利润在借方
  • 什么是对账单的回函
  • 前端promise封装
  • 未税收入怎么做分录
  • 数字图像处理实验一实验报告
  • vue的mvvm模型
  • web实训报告怎么写
  • c语言fgets函数用法stdin
  • 固定资产折旧率如何计算
  • nosql manager for mongodb
  • 固定资产改扩建和大修理的区别
  • 逐期增长量与累计增长量
  • 收支平衡表excel怎么做
  • 交加盟费送赠品可以吗
  • 存货跌价准备在年报哪里
  • 企业收到房租发票怎么做账
  • 非公司人员差旅怎么报销
  • 固定资产折旧提头不提尾
  • 员工出差坐火车怎么处理
  • 报表其他应收款包括哪些内容
  • 预付账款和其他应付款的区别
  • 出售其他权益工具投资其他综合收益
  • 小规模开票免税额度是多少
  • sql server用处
  • win8局域网共享设置
  • win10蓝屏stopcode
  • ubuntu怎么建立文件
  • linux的run目录放什么文件
  • 安装win7旗舰版变了家庭版
  • 安装与配置linux操作系统
  • Linux如何清理磁盘空间
  • javascript Ext JS 状态默认存储时间
  • cocos2dx 3.0 beta android环境配置
  • How to embed a jframe in an eclipse view
  • javascript基于什么的语言
  • xbox无法连接无线网络
  • python获取当前地址
  • node. js教程
  • recycleview使用
  • iphone触控手势
  • python自动化部署k8s集群
  • 游戏引擎在游戏开发中的核心作用
  • android 自定义actionbar
  • 个人所得税赡养老人可以填两个吗
  • 广东税务app下载安装
  • 海南省税务局网站
  • 上海微电子现状
  • 营业外收入缴纳哪些税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设