linux中断线程化(转载)

英伟达笔试1 本文摘要: 使用NAND2门设计4位奇偶校验发生器,通过15个NAND2门实现4输入异或功能,分三级结构完成奇校验计算。 时序分析公式总结: 建立时间约束:T_cq + T_comb(max) + T_setup + T_skew ≤ T_clk 保持时间约束:T_cq + T_comb(min) + T_skew ≥ T_hold 提供了两段路径的具体时序检查公式和建立违规修复方法 分析32位粘滞累积寄存器Verilog代码: 功能:记录输入数据中出现过的所有1位 每个bit独立实现,复位清零,有效输入时 阅读详情

 

linux中断线程化(转载)  

2012-06-02 20:28:34|  分类: linux内核开发 |  标签: |字号大中小 订阅

摘自:http://www.eeworld.com.cn/qrs/2012/0326/article_9459_2.html

中断线程化是实现Linux实时性的一个重要步骤,在Linux标准内核中,中断是最高优先级的执行单元,不管内核当时处理什么,只要有中断事件,系统将立即响应该事件并执行相应的中断处理代码,除非当时中断关闭。因此,如果系统有严重的网络或I/O负载,中断将非常频繁,后发生的实时任务将很难有机会运行,也就是说,毫无实时性可言。中断线程化之后,中断将作为内核线程运行而且赋予不同的实时优先级,实时任务可以有比中断线程更高的优先级,这样,实时任务就可以作为最高优先级的执行单元来运行,即使在严重负载下仍有实时性保证。
中断线程化的另一个重要原因是spinlock被mutex取代。中断处理代码中大量地使用了spinlock,当spinlock被mutex取代之后,中断处理代码就有可能因为得不到锁而需要被挂到等待队列上,但是只有可调度的进程才可以这么做,如果中断处理代码仍然使用原来的 spinlock,则spinlock取代mutex的努力将大打折扣,因此为了满足这一要求,中断必须被线程化,包括IRQ和softirq。
中断线程化的实现方法是:对于IRQ,在内核初始化阶段init(该函数在内核源码树的文件init/main.c中定义)调用 init_hardirqs(该函数在内核源码树的文件kernel/irq/manage.c中定义)来为每一个IRQ创建一个内核线程,IRQ号为0 的中断赋予实时优先级49,IRQ号为1的赋予实时优先级48,依次类推直到25,因此任何IRQ线程的最低实时优先级为25。原来的do_IRQ被分解成两部分,架构相关的放在类似于arch/*/kernel/irq.c的文件中,名称仍然为do_IRQ,而架构独立的部分被放在IRQ子系统的位置 kernel/irq/handle.c中,名称为_do_IRQ。当发生中断时,CPU将执行do_IRQ来处理相应的中断,do_IRQ将做了必要的架构相关的处理后调用_do_IRQ。函数_do_IRQ将判断该中断是否已经被线程化(如果中断描述符的状态字段不包含SA_NODELAY标志说明中断被线程化了),如果是将唤醒相应的处理线程,否则将直接调用handle_IRQ_event(在IRQ子系统位置的kernel/irq /handle.c文件中)来处理。对于已经线程化的情况,中断处理线程被唤醒并开始运行后,将调用do_hardirq(在源码树的IRQ子系统位置的文件kernel/irq/manage.c中定义)来处理相应的中断,该函数将判断是否有中断需要被处理(中断描述符的状态标志 IRQ_INPROGRESS),如果有就调用handle_IRQ_event来处理。handle_IRQ_event将直接调用相应的中断处理句柄来完成中断处理。
如果某个中断需要被实时处理,它可以用SA_NODELAY标志来声明自己非线程化,例如:系统的时钟中断就是,因为它被用来维护系统时间以及定时器等,所以不应当被线程化。
static struct irqaction irq0=
{ timer_interrupt, SA_INTERRUPT | SA_NODELAY, CPU_MASK_NONE, "timer", NULL, NULL};
这是在静态声明时指定不要线程化,也可以在调用request_irq时指定,如:
request_irq (HIGHWIRE_SMI_IRQ,highwire_smi_interrupt,SA_NODELAY, "System Management Switch", NULL))
对于softirq,标准Linux内核已经使用内核线程的方式来处理,为了使其易于被抢占,改进实时性,具体的修改包括:把ksoftirqd的优先级设置为nice值为-10,即它的优先级高于普通的用户态进程和内核态线程,但它不是实时线程,因此这样一来softirq对实时性的影响将显著减小。在处理软中断期间,抢占是使能的,这使得实时性更进一步地增强。在处理软中断的函数_do_softirq中,每次处理完一个待处理的软中断后,都将调用cond_resched_all(),这显著地增加了调度点数,提高了整个系统的实时性。

 

深度学习 load_data_fashion_mnist pytorch 中报错:PermissionError: [WinError 5] 拒绝访问。: '…/data’ 在学习李沐大神动手学习深度学习卷积神经网络章节中,调用d2l包中load_data_fashion_mnist报错,这可能是***权限***的问题。 batch_size = 256 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size,batch_size) 我的解决方法是 重新定义一下 load_data_fashi 阅读详情

相关推荐

安卓ai自动化脚本 Yyds.Auto实现 示例 纯ai图像识别自动点击脚本

纯ai识别实现自动化脚本

专注安卓前沿科技 4783

中断的线程化处理

内核中有一个struct irq_desc结构体数组,有一个属性是struct irqaction* action,这个结构体中有一个属性irq_handler_t thread_fn,就对应的是request_threaded_irq函数中的thread_fn;内核线程被唤醒后,执行thread_fn函数可能有程序在等待thread_fn函数被执行,调用wake_threads_waitq(desc)来唤醒它。上半部用来处理紧急的事情,下半部用一个内核线程来处理,这个内核线程专用于这个中断。

d0203的博客 1243

Qlib+backtrader:2014.1.1-2023.9.20最新回测结果,可以实盘吗?

今年以来,在研究了qlib和backtrader的基础上,把二者结合起来进行了一个策略研究。简单说就是用qlib在200只股票的股票池中进行滚动训练与预测(walk forward),总体数据范围是2005到2023年,以20日间隔滚动训练和预测,最终得到2014.1.1-2023.9.20共10年测试期的收益率预测结果。将预测结果代入backtrader进行回测,得到如下回测结果。

qtbgo的博客 1783

中断线程化

arm 中断线程化的原理

hhcs 2021

MATLAB配置MinGW编译器的完整指南

本文提供了在Windows系统上为MATLAB配置MinGW编译器的完整指南。详细介绍了通过MATLAB附加功能管理器在线安装和手动离线安装两种核心方法,并重点说明了如何解决常见的“未找到支持的编译器”等错误。指南包含从版本检查、环境变量配置到最终使用mex命令验证的每一步,帮助用户顺利完成MATLAB与MinGW的集成,以支持C/C++代码编译。

weixin_29031057的博客 265

【讯飞星火大模型AI】SpringBoot整合星火API:从零构建智能数据分析助手

本文详细介绍了如何使用SpringBoot框架整合讯飞星火大模型API,从零构建一个智能数据分析助手。通过清晰的步骤,指导开发者完成API密钥申请、项目搭建、SDK集成与核心代码编写,实现用户通过自然语言指令和CSV数据,即可自动获得ECharts图表代码与专业数据分析结论,极大降低数据分析与可视化的门槛。

neovim7hacker的博客 275

Linux学习笔记(17.10)—— 按键的中断线程化处理

本文主要参考韦东山老师视频及文档 Linux中断处理流程 中断系统中相关数据结构 ​ 每一个irq_desc数组项中都有一个函数:handle_irq,还有一个action链表。要理解它们,需要先看中断结构图: ​ 外部设备1、外部设备n共享一个GPIO中断B,多个GPIO中断汇聚到GIC(通用中断控制器)的A号中断,GIC再去中断CPU。那么软件处理时就是反过来,先读取GIC获得中断号A,再细分出GPIO中断B,最后判断是哪一个外部芯片发生了中断。 ​ 所以,中断的处

glen_cao的博客 1580

保姆级教程:在RK3568开发板上手把手配置RMII百兆以太网DTS节点

本文提供了一份详细的RK3568开发板RMII百兆以太网DTS节点配置教程,涵盖基础概念解析、关键参数设置、实际操作步骤及常见问题排查。通过手把手指导,帮助开发者快速完成RK3568开发板的以太网配置,特别适合嵌入式系统开发者参考。

weixin_33686714的博客 137

Linux中断子系统---中断申请request_irq()与中断线程化request_threaded_irq()

一、申请中断request_irq() Linux中使用中断需要先进行申请,申请中断的API函数如下: int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) irq:要申请中断的中断号。 handler:中断处理函数。 name:中断名字,设置以后可以在/proc/interrupts 文件中看到对应的中断名字。

lihuan680680的博客 1万+

SpringBoot使用mybatis-plus的自动代码生成器

一.SpringBoot使用mybatis-plus+自动代码生成 使用mybatis-plus可以自动帮我们生成通用的 controller,service,dao,mapper 二.加入依赖 <!-- MP 核心库 --> <dependency> <groupId>com.baomidou</groupId> <artif...

农民娃儿的博客 2263

PCI Express 权威指南:从协议原理到芯片实现

目录 全文总览第一部分:PCIe体系结构概览第1章 互连技术的演进与PCIe的诞生1.1 从ISA到PCI:并行总线的辉煌与瓶颈1.2 PCI-X的尝试与局限1.3 串行革命:从AGP、PCI到PCIe的范式转移1.4 PCIe的核心优势第2章 PCIe系统全局视角2.1 系统拓扑:Root Complex, Switch, Endpoint的职能与关系2.2 拓扑结构实例:服务器、工作站、嵌入式系统2.3 枚举与配置:系统如何发现和组织PCIe设备2.4 地址空间第3章 PCIe协议分层架构3.1 分层模

qq_42882296的博客 2894

linux的中断线程化实现

2.6.25.8内核实现了中断线程化,内核为每一个中断向量建立了一个中断线程,具体就是在结构irq_desc中增加了一个task_struct来代表这个线程: struct irq_desc {          irq_flow_handler_t      handle_irq;          struct irq_chip         *chip;          stru

TCP/IP 6583

RK3568-适配phy芯片ip101gri

复位时间查阅数据手册。

Paper_Love的博客 2643

linux中断线程化分析【转】

转自:http://blog.youkuaiyun.com/qq405180763/article/details/24120895 版权声明:本文为博主原创文章,未经博主允许不得转载。 最近在为3.8版本的Linux内核打RT_PREEMPT补丁,并且优化系统实时性,这篇文章主要对RTlinux中中断线程化部分进行分析。我们知道在RT_PREEMPT补丁中之所...

weixin_34102807的博客 120

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

linux rt patch 强实时,Linux RT(二)-硬实时Linux(RT-Preempt Patch)的中断线程化

Linux RT(2)-硬实时Linux(RT-Preempt Patch)的中断线程化特别声明:本系列文章LiAnLab.org著作权所有,转载请注明出处。by @宋宝华Barry底半部:线程化IRQ线程化中断的支持在2009年已经进入Linux官方内核,详见Thomas Gleixner的patch:http://git.kernel.org/?p=linux/kernel/git/torv...

weixin_35537635的博客 485

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Linux kernel的中断子系统之(五):驱动申请中断API

转载地址:https://www.cnblogs.com/arnoldlu/p/7599587.html 总结:二重点区分了抢占式内核和非抢占式内核的区别:抢占式内核可以在内核空间进行抢占,通过对中断处理进行线程化可以提高Linux内核实时性。 三介绍了Linux中断注册函数request_threaded_irq,其实request_irq也是对request_threaded_irq的封装...

kunkliu的博客 865

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

中断优先级和中断线程优先级

中断是一种当今很重要的硬件与cpu通信的方式,主板上集成很多硬件,那么就可以认为会有很多中断,但是cpu的数目往往要少得多,那么肯定会有多个硬件中断竞争一个cpu的情况,任何系统(包括自然界)都不能乱套,肯定会有一定的机制防止事情变得不可控制,这种机制的结果就是使一切变得有序化,出现多竞争一的情况时,最常用的方法就是排队,而排队有很多策略,比如先来先服务,优先级队列,加权优先...

weixin_34419321的博客 155

为什么重新new两个线程线程号相同_Linux中的中断处理机制 [六] - 从tasklet到中断线程化...

Linux的中断处理机制 [四] - softirq(1)tasklettasklet虽然名字中含有一个"task",但它跟我们熟知的多线程环境中的那个"task"并没有什么直接的关系。前文介绍的9种softirq中,有两种是和tasklet相关的,一个是HI_SOFTIRQ,一个是TASKLET_SOFTIRQ。由于在实际场景中TASKLET_SOFTIRQ被使用的更多,接下来就以TASKLET...

weixin_39884738的博客 236

Linux内核能做到硬实时吗

Linux内核能做到硬实时吗

gdfhhj的博客 385

Linux RT(2)-硬实时Linux(RT-Preempt Patch)的中断线程化

特别声明:本系列文章LiAnLab.org著作权所有,转载请注明出处。by @宋宝华Barry 底半部:线程化IRQ 线程化中断的支持在2009年已经进入Linux官方内核,详见Thomas Gleixner的patch: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6...

weixin_34327761的博客 658

linux rt patch 强实时,随想录(rt-patch和linux)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】因为linux本身不是rtos系统,所以用linux来完成一些对实时性有要求的工作,这本身就是很复杂的一项工作。但是,后来开源社区为linux提供了rt-patch,在很大程度上改善了linux的实时性。只是这个patch修改内容较多,不过最主要的部分还是集中在自选锁互斥化、中断线程化和修正优先...

weixin_35975197的博客 917

Linux中断管理 (1)Linux中断管理机制

转载地址:https://www.cnblogs.com/arnoldlu/p/8659981.html 目录: 《Linux中断管理》 《Linux中断管理 (1)Linux中断管理机制》 《Linux中断管理 (2)软中断和tasklet》 《Linux中断管理 (3)workqueue工作队列》 关键词:GIC、IAR、EOI、SGI/PPI/SPI、中断映射、中断异常向量...

kunkliu的博客 632

android电池(五):电池 充电IC(PM2301)驱动分析篇

关键词:android 电池  电量计  PL2301任务初始化宏 power_supply 中断线程化 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0  平台:samsung exynos 4210、exynos 4412 、exynos 5250 作者:xubin341719(欢迎转载,请注明作者) 欢迎指正错误,共同学

小亮的专栏 1074
上一篇: linux PROC系列
下一篇: 抛弃中断bottom half,使用中断线程
WINGCREATE
博客等级 码龄18年 12粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值