浅谈Linux中断处理(一)

新硬盘到手,在统信UOS或麒麟系统上怎么认?保姆级教程从识别到挂载一步到位 本文提供新硬盘在统信UOS或麒麟KYLINOS系统上的完整配置指南,从识别物理硬盘到挂载全流程详解。通过终端命令如df和lsblk,帮助用户完成硬盘识别、分区、文件系统创建及挂载配置,确保新硬盘顺利投入使用。 阅读详情

注: 先做个引子,留给自己看,这一系列后续会继续完善。本篇下面内容为转载内容。

 

    在linux内核里,如果驱动在申请注册中断的时候没有特别的指定,do_irq在做中断响应的时候,是开启中断的,如果在驱动的中断处理函数正在执行的过程中,出现同一设备的中断或者不同设备的中断,这时候新的中断会被立即处理,还是被pending,等当前中断处理完成后,再做处理。
在2.4和2.6内核里,关于这一块是否有什么不同。

    一般申请中断的时候都允许开中断,即不使用SA_INTERRUPT标志。如果允许共享则加上 SA_SHIRQ,如果可以为内核熵池提供熵值(譬如你写的驱动是ide之类的驱动),则再加上 SA_SAMPLE_RANDOM标志。这是普通的中断请求过程。对于这种一般情况,只要发生中断,就可以抢占内核,即使内核正在执行其他中断函数。这里有两点说明:

    一是因为linux不支持 中断优先级,因此任何中断都可以抢占其他中断,但是同种类型的中断(即定义使用同一个 中断线的中断)不会发生抢占,他们会在执行本类型中断的时候依次被调用执行。

    二是所谓 “只要发生中断,就可以抢占内核”这句是有一定限制的,因为当中断发生的时候系统由中断门 进入时自动关中断(对于x86平台就是将eflags寄存器的if位置为0),只有当中断函数被执行 (handle_IRQ_event)的过程中开中断之后才能有抢占。 对于同种类型的中断,由于其使用同样的idt表项,通过其状态标志(IRQ_PENDING和 IRQ_INPROGRESS)可以防止同种类型的中断函数执行(注意:是防止handle_IRQ_event被重入, 而不是防止do_IRQ函数被重入),对于不同的中断,则可以自由的嵌套。

    因此,所谓中断嵌套, 对于不同的中断是可以自由嵌套的,而对于同种类型的中断,是不可以嵌套执行的。
以下简单解释一下如何利用状态标志来防止同种类型中断的重入:
    当某种类型的中断第一次发生时,首先其idt表项的状态位上被赋予IRQ_PENDING标志,表示有待处理。 然后将中断处理函数action置为null,然后由于其状态没有IRQ_INPROGRESS标志(第一次),故将其状态置上IRQ_INPROGRESS并去处IRQ_PENDING标志,同时将action赋予相应的中断处理函数指针(这里是一个重点,linux很巧妙的用法,随后说明)。这样,后面就可以顺利执行handle_IRQ_event进行中断处理,当在handle_IRQ_event中开中断后,如果有同种类型的中断发生,则再次进入do_IRQ函数,然后其状态位上加上IRQ_PENDING标志,但是由于前一次中断处理中加上的IRQ_INPROGRESS没有被清除,因此这里无法清除IRQ_PENDING标志,因此action还是为null,这样就无法再次执行handle_IRQ_event函数。从而退出本次中断处理,返回上一次的中断处理函数中,即继续执行handle_IRQ_event函数。当handle_IRQ_event返回时检查IRQ_PENDING标志,发现存在这个标志,说明handle_IRQ_event执行过程中被中断过,存在未处理的同类中断,因此再次循环执行handle_IRQ_event函数。直到不存在IRQ_PENDING标志为止。

    2.4和2.6的差别,就我来看,主要是在2.6中一进入do_IRQ,多了一个关闭内核抢占的动作,同时在处理中多了一种对IRQ_PER_CPU类型的中断的处理,其他没有什么太大的改变。这类IRQ_PER_CPU的中断主要用在smp环境下将中断绑定在某一个指定的cpu上。例如arch/ppc/syslib/open_pic.c中的openpic_init中初始化ipi中断的时候。

 

关于do_IRQ可能会丢失中断请求:
    do_IRQ函数是通过在执行完handle_IRQ_event函数之后判断status是否被设置了IRQ_PENDING标志来判断是否还有没有被处理的同一通道的中断请求。 但是这种方法只能判断是否有,而不能知道有多少个未处理的统一通道中断请求。也就是说,假如在第一个中断请求执行handle_IRQ_event函数的过程中来了同一通道的两个或更多中断请求,而这些中断不会再来,那么仅仅通过判断status是否设置了IRQ_PENDING标志不知道到底有多少个未处理的中断,handle_IRQ_event只会被再执行一次。
这算不算是个bug呢? 不算,只要知道有中断没有处理就OK了,知道1个和知道N个,本质上都是一样的。作为外设,应当能够处理自己中断未被处理的情况。

 

 

原文出处: http://www.linuxforum.net/forum/printthread.php?Cat=&Board=linuxK&main=550260&type=thread

资源链接:http://blog.youkuaiyun.com/normalnotebook

opencode : 无法将“opencode“项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案 opencode命令识别问题与openclawcodexgemini确保的路径在 PATH 中。这个知识对所有 npm 全局工具通用。 阅读详情

相关推荐

Splunk CVE-2018-11409认证绕过漏洞深度解析

Splunk作为主流企业级日志分析平台,其Web管理接口的认证机制直接关系到整个安全运营体系的可信边界。CVE-2018-11409本质上是REST API路由层会话校验缺失引发的未授权访问问题,根源在于`/en-US/splunkd/__raw/`路径绕过了splunkweb与splunkd之间的信任链验证,导致配置文件、用户哈希、App源码等敏感信息明文泄露。该漏洞凸显了Web接口权限模型设计失守的风险,尤其在默认配置未加固、HTTPS未启用、初始密码未修改的生产环境中危害急剧放大。结合vulfocus

weixin_30875157的博客 599

linux内核中断程序,linux内核中断机制

描述为什么需要中断?如果让内核定期对设备进行轮询,以便处理设备,那会做很多无用功,因为外设的处理速度一般慢于CPU,而CPU不能一直等待外部事件。所以能让设备在需要内核时主动通知内核,会是一个聪明的方式,这便是中断。中断处理程序在响应一个特定中断时,内核会执行一个函数——中断处理程序。中断处理程序与其他内核函数的区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断上下文的特殊...

weixin_42495556的博客 487

opencv+nvcodec实现视频硬解码

最近遇到一个新项目,AI推理在上,为了方便和节省成本的考虑决定研究下模块。根据官网的说法显卡具有独立的和模块,所以理论上和是独立互不干涉的。以前的项目都只是把显卡当成推理工具,没有将它的功能利用起来,本身也是一种浪费。事实真的有这么丝滑吗?看到这里,如果你真的觉得是白叫的那就真的是了,事实究竟如何,请听我娓娓道来。NVCODEC全称是 NVIDIA VIDEO CODEC,是NVIDIA为绝大多数显卡配置的硬件编解码单元。不一定是所有显卡都有,一般来讲越新的显卡硬件编解码就越强,支持的格式也就越新。

jiexijihe945的博客 1万+

linux中断嵌套以及中断丢失

在linux内核里,如果驱动在申请注册 中断的时候没有特别的指定,do_irq在做中断响应的时候,是开启中断的,如果在驱动的中断处理函数正在执行的过程中,出现同一设备的中断或者不同设备 的中断,这时候新的中断会被立即处理,还是被pending,等当前中断处理完成后,再做处理。 在2.4和2.6内核里,关于这一块是否有什么不同。 一 般申请中断的时候都允许开中断,即不使用SA_INTERRUPT标志

shangyaowei的专栏 700

ABAP_自定义屏幕07—下拉列表框

ABAP_自定义屏幕07—下拉列表框 完成以下:页面中有下拉列表框,下拉框value=系统表SCRR的值 1、实现方法A-常用 1.1 在主程序定义字段 TYPES:BEGIN OF type_carrid, carrid LIKE scarr-carrid,"航线代码 carrname LIKE scarr-carrname,"航向名称 END OF type_carrid. DATA g_it_carrid TYPE STANDARD TABLE OF type_carrid

f346348157的博客 3872

python 抖音采集_python爬取抖音视频的实例详解

import requestsimport jsonimport reimport osfrom pprint import pprint as ppimport queueclass DouYin:header = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*...

weixin_35795675的博客 1864

linux中断处理浅析

最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着"重要的事马上做, 不重要的事推后做"的异步处

xgbing 1107

Apache Kafka Connect任意文件读取漏洞(CVE-2025-27817)

由于Apache Kafka客户端未对用户输入进行严格验证和限制,未经身份验证的攻击者可通过构造恶意配置读取环境变量或磁盘任意内容,或向非预期位置发送请求,提升REST API的文件系统/环境/URL访问权限。(CVE-2025-27817)

iSee857的博客 2026

Linux shell中断命令

使用centOS远程下载一个文件时,发现速度为零,于是想中断: Ctrl + C 即可

MinCong Luo的博客 7680

高云FPGA系列教程(8):ARM串口数据接收(中断和轮询方式)

GW1NSR-4C ARM部分共有2个串口外设,都挂载在APB1总线上,最高支持波特率921.6Kbit/s,无奇偶校验位,8位数据位,1位停止位,支持高速测试模式 HSTM(High Speed Test Mode),即每个时钟周期输出1位数据,可以在短时间内传输大量数据。官方手册上没有描述发送和接收缓存FIFO的深度,所以不确定是否支持缓存。

whik1194的博客 1686

自助结账商品检测(Scanned Item Detection)——基于YOLOv8的RPC数据集实战

RPC数据集是由中国科学院自动化研究所发布的零售商品结账检测公开数据集,广泛用于自助结账和零售场景下的目标检测与识别。YOLOv8是YOLO系列最新版本,由Ultralytics推出,继承了YOLO家族的高效快速和高准确性,适用于实时检测场景。本文系统介绍了基于YOLOv8的RPC数据集自助结账商品检测方案,涵盖数据准备、训练、推理及UI界面设计。未来,可结合多模态感知、RFID融合技术,打造更加智能和稳定的自助结账系统。

YOLO 252

Linux内核架构浅谈68 - Linux设备驱动与中断:中断处理程序的注册与执行

本文深入解析Linux内核中断处理机制,涵盖硬件中断与软中断的核心概念、中断处理程序注册流程(request_irq)及执行过程。文章通过按键驱动示例展示中断注册技术细节,包括参数解析、标志位设置和共享IRQ处理。重点强调中断上下文限制(不可睡眠/访问用户空间)和延迟处理机制(workqueue/软中断)。最后提供中断调试方法(/proc/interrupts)和常见问题解决方案,为设备驱动开发者提供完整的中断处理实践指导。

文石_2009的博客 1100

SAP:SAP的内存管理详解

SAP 的内存管理是一个复杂的多层机制,涉及应用服务器、数据库和操作系统的协同工作。通过合理配置和优化,可以显著提高 SAP 系统的性能和稳定性。

baidu_35680696的博客 1214

【操作系统】浅谈 Linux 中的中断机制

【操作系统】浅谈 Linux 中的中断机制

blblccc 2987

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Linux内核架构浅谈94 - Linux中断处理:中断类型、IRQ与中断服务程序

本文深入解析Linux内核中断机制,从基础概念到实现细节,全面剖析中断在连接硬件与软件中的关键作用。主要内容包括:1)中断分类体系(硬件/软件、可屏蔽/不可屏蔽、顶半部/底半部);2)IRQ管理机制(静态/动态分配、核心数据结构irq_desc与irqaction);3)中断服务程序(ISR)的设计约束与实现规范;4)顶半部与底半部的协同工作模式(以工作队列为例)。

文石_2009的博客 1000

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

浅谈linux进程调度

Linux是一种分时操作系统,也就是实现进程到进程的快速切换,让用户感到好像同时进行了多个线程。类似于操作系统中说到的时间片轮转调度算法。        进程调度的时机有哪些呢?一般来说有三种情况。        • 中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule();

mightySheldor的专栏 1204

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

浅谈C语言中断处理机制

一、中断机制      1、实现中断响应和中断返回   当CPU收到中断请求后,能根据具体情况决定是否响应中断,如果CPU没有更急、更重要的工作,则在执行完当前指令后响应这一中断请求。CPU中断响应过程如下:首先,将断点处的PC值(即下一条应执行指令的地址)推入堆栈保留下来,这称为保护断点,由硬件自动执行。然后,将有关的寄存器内容和标志位状态推入堆栈保留下来,这称为保护现场,由用户自己编程完成。保...

weixin_34185560的博客 1627

浅谈Linux内核的实时性优化

什么是实时操作系统?接触过嵌入式的小伙伴可能会知道,实时操作系统是指在嵌入式领域广泛应用的各类RTOS(Real Time Operating System)。其中最具代表性的有国外的μC/OS-III、FreeRTOS、Vxworks等,国内的代表有RT-Thread和LiteOS。在这些众多的RTOS系统里面既有开源的也有商业的,同时还有一些是行业专用的,比如enea公司推出的OSE系统就是通信行业早期的基站设备应用比较广泛的系统。

Tony的博客 1794

Linux驱动——浅谈中断相关零碎内容

我在阳间凑数的一天 在Linux 内核中提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。 在ARM裸机中对中断发生的处理方式大致为 1、使能中断、初始化对应的寄存器 2、注册中断和中断服务函数 3、中断发生时,进入IRQ中断服务函数 中断处理原则:1、不能嵌套 2、越快越好 资源分配的单位是进程,调度的单位是线程。 ...

TzYwsL 280

浅谈Linux驱动程序框架

浅谈Linux驱动程序框架 2009-12-28 09:20比特网之极 关键字:Linux 程序 框架 驱动   在使用Linux系统时会遇到驱动程序的安装调试等,下面我们就为您简要的介绍一些基本的设置。   一、linux的设备驱动程序与外界的接口可以分为三个部分:   1.驱动程序与操作系统内核的接口。通过file_operations(include/l

gocy123的专栏 862

浅谈Real-Time Linux

操作系统读书报告——浅谈Real-Time Linux摘要:本文通过对一个Real-Time Linux的实例NMT RT-Linux进行简单的分析,指出Linux在通用实时操作系统中发挥的作用。 Abstract: The paper introduces an exampe of Real-Time Linux, which is NMT RT-Linux finished by Vi

1001

浅谈LINUX中断的注册及执行流程(一)

linux中断处理流程

lkq19941204的博客 410

浅谈Linux操作系统是如何工作的?

SA****243 石润成     操作系统工作的三个关键基础分别是:存储程序计算机、堆栈(函数调用堆栈)机制和中断机制;     操作系统其实也是一个程序,linux的操作系统主要由汇编和C语言组成。     那么从整个角度考虑,程序是需要被装载到存储器中的,当我们将程序代码编译成ELF格式时,里面包含了整个程序运行时所需要的各种信息(代码段、数据段等等),存储程序计算机存在哈佛结构和冯诺

ustc_max的专栏 843

浅谈linux的死锁检测

死锁:就是多个进程(≥2)因为争夺资源而相互等待的一种现象,若无外力推动,将无法继续运行下去。 注意,只有在多进程或者多线程之间或者他们与中断之间相互通讯或者共享资源才有可能发生死锁,单线程或者进程之间没有联系的话,一般不会发生死锁。锁的种类比较多,这里主要说自旋锁和信号量。两者的差别就在于前者获得不到资源时的动作是不断的资源(即忙转浪费cpu的cycles)而后者则表现为睡眠等待。 死锁的基

u011279649的专栏 1588

浅谈linux的死锁检测 (写的好棒)

原文地址 http://blog.chinaunix.net/uid-25942458-id-3823545.html 分类: LINUX 死锁:就是多个进程(≥2)因为争夺资源而相互等待的一种现象,若无外力推动,将无法继续运行下去。 注意,只有在多进程或者多线程之间或者他们与中断之间相互通讯或者共享资源才有可能发生死锁,单线程或者进程之间没有联系的话

lqxandroid2012的专栏 882

浅谈android蓝牙睡眠机制

虽然对于linux的一些机制还不是特别了解,但还是想总结下近阶段做的一些工作。         在我们启动蓝牙的过程中,系统启动中会调用echo 1 > /proc/bluetooth/sleep/proto,并且会把host_wake的pin值拉高。蓝牙此时系统会调用bluesleep_start()这个函数,在这个函数中我们启动了mod_timer这个定时器。并且申请了类型为IRQF_TRI

视频拼接器 4418
上一篇: 也谈大端模式(big endian)和小端模式(little endian) (一) 引 子
下一篇: 也谈零拷贝(一) 抛砖篇
linuxdrivers
博客等级 码龄16年 147粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值