首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核中断 中断原理和实现

linux为了实现这个特点,当中断发生时候,硬中断处理那些短时间就可以完成工作,而将那些处理事件比较长工作,放到中断之后来完成,也就是中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套,但是没有优先级概念,也就是说任何一个新中断都可以打断正在执行中断,但同种中断除外。中断不能嵌套,但相同类型中断可以在不同CPU上并行执行。...中__softirq_pending是等待处理中断位图,通过设置此变量即可告诉内核该执行哪些中断。...内核不会立即处理重新触发中断。...当大量中断出现时候,内核会唤醒一组内核线程来处理。这些线程优先级最低(nice值为19),这能避免它们跟其它重要任务抢夺资源。

22.1K21

Linux内核22-中断和tasklet

这对于时间苛刻应用来说,这是一个很重要属性,尤其是那些要求中断请求必须在毫秒级别响应应用Linux2.6内核使用两种手段满足这项挑战:中断和tasklet,还有工作队列。...更重要是,总是把一个函数绑定到某个CPU上执行是有风险,这个CPU可能负荷很重而其它CPU可能比较空闲。 2 中断 Linux2.6内核中,中断数量比较少。...事实上,只使用了6类中断,如下表所示: 表4-9 Linux2.6中使用中断 中断 优先级 描述 HI_SOFTIRQ 0 处理高优先级tasklet TIMER_SOFTIRQ 1 定时器中断...Linux中断处理程序总是从索引0开始执行。 2.1 中断使用数据结构 中断主要数据结构是softirq_vec数组,包含类型为softirq_action32个元素。...而do_IRQ()函数中,在最后会调用irq_exit()宏,这个宏会引发另一个调用 __do_softirq()程序执行。这在Linux内核中是禁止,因为其可延时函数执行都是串行

1.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux内核中断、tasklet和工作队列具体解释

    [TOC] 本文基于Linux2.6.32内核版本号。...引言 中断、tasklet和工作队列并非Linux内核中一直存在机制,而是由更早版本号内核“下半部”(bottom half)演变而来。 下半部机制实际上包含五种,但2.6版本号内核中。...中断内核线程 之前我们分析触发软件中断位置事实上是中断上下文中,而在中断内核线程中实际已经是进程上下文。...作为设备驱动程序开发人员来说,添加了负担。而假设某种应用并不须要在多个CPU上并行运行,那么中断事实上是没有必要。 因此诞生了弥补以上两个要求tasklet。...关系例如以下图所看到: 2.工作队列工作过程 应用实例 linux各个接口状态(up/down)消息须要通知netdev_chain上感兴趣模块同一时候上报用户空间消息。

    2K30

    Linux 中断机制分析

    中断分析最近工作繁忙,没有时间总结内核相关一些东西。上次更新博客到了linux内核中断子系统。这次总结一下中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...这样后果会造成有可能丢失外部中断。于是,linux内核设计出了一种架构,中断函数需要处理任务分为两部分,一部分在中断处理函数中执行,这时系统关闭中断。...Linux内核中断方面就必须考虑平衡这三个方面的问题。而下面我要分析__do_softirq函数就恰似在这三者之间打太极,游刃有余,面面俱到!...处理中断内核线程 之前我说到不能让CPU长时间来处理中断事务,这样会影响系统响应时间,严重影响用户和系统之间交互式体验。...系统将唤醒一个软件中断处理内核进程,在内核进程中处理pending中软件中断。这里要注意,之前我们分析触发软件中断位置其实是中断上下文中,而在中断内核线程中实际已经是进程上下文。

    8.7K91

    linux内核缺页中断处理

    缺页中断处理一般流程: 1.硬件陷入内核,在堆栈中保存程序计数器,大多数当前指令各种状态信息保存在特殊cpu寄存器中。 2.启动一个汇编例程保存通用寄存器和其他易丢失信息,以免被操作系统破坏。...9.调度引发缺页中断进程,操作系统返回调用他汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux基本处理流程: 内核处理缺页异常主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器值 * error_code,由硬件产生:...,内核调用copy_from_user时发生缺页异常,内核会将regs->ip也就是中断返回地址设置 //为这个地址,退出中断后不会在执行1: mov"itype" %2,%"rtype"1\n",

    10.7K22

    Linux内核21-Linux内核中断处理过程

    对于这类操作一般使用中断和tasklet机制完成。 I/O中断处理基本步骤是: 保存IRQ值和内核态堆栈中寄存器值->恢复进程时候使用。...为了统一处理这些硬件,Linux内核使用了面向对象编程思想,构建了一个PIC对象,包含PIC名称和7个PIC标准方法。...因此,Linux2.6内核使用一个特定内核线程叫kirqd进行纠正IRQ自动分配(如果有必要的话)。...IRQ堆栈 处理可延时函数时使用。比如,中断或tasklet。每个CPU都有一个IRQ堆栈。 、硬IRQ堆栈分别使用hardirq_stack和softirq_stack两个数组存储。...总结 其实内核经过这么多年发展,在实现方式上已经发生了很大变化。但是其基本思想没变。比如我们以Linux4.4.203内核对于中断处理为例,与上面的处理过程进行比较,理解其主要变化。

    2.3K20

    中断中断_中断和硬中断优先级

    linux为了实现这个特点,当中断发生时候,硬中断处理那些短时间 就可以完成工作,而将那些处理事件比较长工作,放到中断之后来完成,也就是中断(softirq)来完成。...(3) 中断嵌套 Linux下硬中断是可以嵌套,但是没有优先级概念,也就是说任何一个新中断都可以打断正在执行中断,但同种中断 除外。...中__softirq_pending是等待处理中断位图,通过设置此变量 即可告诉内核该执行哪些中断。...内核不会立即处理重新触发中断。...当大量中断出现时候,内核会唤醒一组内核线程来处理。 这些线程优先级最低(nice值为19),这能避免它们跟其它重要任务抢夺资源。

    2.6K40

    Linux内核笔记之中断映射

    中断和虚拟中断号 在Linux 内核笔记之高层中断处理一文中,介绍了ARM gic中断控制器对于硬中断处理过程。...gic中断处理程序是从ack一个硬件中断开始, 在gic中断处理过程中,会根据中断映射去寻找对应虚拟中断号, 再去进行后续中断处理。...对于软件工程师而言,我们不需要care是中断哪个中断控制器第几个中断号, 因此linux kernel提供了一个虚拟中断概念。...irq_domain 接下来讨论硬件中断号是如何映射到虚拟中断linux kernel提供irq_domain管理框架, 将hwirq映射到虚拟中断号上。...外设驱动初始化过程中,创建硬中断和虚拟中断映射关系设备驱动在初始化时候可以调用irq_of_parse_and_map这个接口函数进行该device node中和中断相关内容解析,并建立映射关系

    5.1K30

    Linux 内核如何处理中断

    此外,键盘并不是导致中断唯一组件。一般来说,有三种类型事件会导致 CPU 发生中断:硬件中断、软件中断和异常。在具体介绍不同类型中断前,我需要先定义一些术语。...接下来会调用在内核启动时设备驱动注册对应中断服务程序(ISR)。 软件中断 当你在播放一个视频时,音频和视频是同步播放是相当重要,这样音乐速度才不会变化。...当系统需要实时性时(例如在工业应用中),软件中断会变得重要。你可以在 Linux 基金会文章中找到更多相关信息:面向嵌入式开发者实时 Linux 介绍。...中断描述表(interrupt descriptor table)(IDT)中记录了中断请求(IRQ)和中断服务程序(ISR)对应关系。Linux 中定义了从 0 到 256 IRQ 向量。...其中一些在 Linux 内核源树中Linux IRQ 向量布局中指定。 如果要实时获取该表,请运行如下命令: watch -n1 "cat /proc/interrupts"

    2.4K40

    Linux内核36-内核同步之禁止中断

    同样,Linux也不会放弃禁止中断这么好同步机制。它保证内核控制路径可以继续执行,其访问数据结构不会被中断处理程序破坏。...所以,在多核系统中,内核数据结构保护一般是禁止中断搭配自旋锁一起使用。...当内核代码进入临界代码段时,通过清除eflags寄存器中IF标志实现禁止中断,从而保护临界代码段。但是,当内核离开临界代码段时候,内核是否该恢复之前IF标志呢?还是不做任何处理?...没有中断处理程序被激活,中断行为也就不会发生混乱。 但是,事情不会那么简单,有时候,内核需要只禁止可延时函数,而不禁止中断。那怎么实现呢?...3 总结 总之一句话,禁止中断包含禁止硬中断中断两种。禁止硬中断肯定就包含禁止中断;但禁止中断不会影响硬中断响应。它们都有各自使用场景。

    1.4K21

    【深入理解Linux内核锁】| 中断屏蔽

    Linux内核锁】二、中断屏蔽 1、中断屏蔽思想 中断屏蔽,正如其名,屏蔽掉CPU中断响应功能,解决并发引起竞态问题。 在进入临界区前屏蔽中断,这么做有什么好处,以及有什么弊端?...弊端在于: Linux内核中,除了系统进程调度依赖中断,还有一些异步I/O等众多操作都依赖中断,因此长时间屏蔽中断是很危险,会对系统造成严重影响,因此也要求临界区代码要简短。...关闭中断能够解决进程调度、中断引发竞态,但是这些都是单CPU内部,对于SMP对称多处理器,仍然不可避免会收到其他CPU中断。...因此,并不能解决SMP多CPU引发竞态 因此,单独使用中断屏蔽通常不是一种值得推荐避免竞态方法 2、Linux内核中断屏蔽实现 2.1 Linux内核提供API接口 关于中断屏蔽,Linux内核所提供接口如下...3、总结 该篇文章,主要了解以下几点: 中断屏蔽思想 中断屏蔽好处与不足 Linux内核提供中断屏蔽接口 中断屏蔽基本汇编实现

    65720

    Linux内核中断顶半部和底半部理解

    在大多数真实系统中,当中断到来时,要完成工作往往并不会是短小,它可能要进行较大量耗时处理。   下图描述了Linux内核中断处理机制。...其他操作系统中对中断处理也采用了类似于 Linux方法,真正硬件中断服务程序都斥尽量短。...在Linux内核中,用 softing_action结构体表征一个中断,这个结构体包含中断处理函数指针和传递给该函数参数。...硬中断中断和信号区别   硬中断是外部设备对CPU中断中断中断底半部一种处理机制,而信号则是由内核(或其他进程)对某个进程中断。...需要特别说明是,中断以及基于中断tasklet如果在某段时间内大量出现的话,内核会把后续中断放入ksoftirqd内核线程中执行。总的来说,中断优先级高于中断中断又高于任何一个线程。

    1.8K30

    Linux内核18-中断和异常嵌套处理

    所以,内核态程序被激活方式有: 系统调用(异常一种) 异常 中断 内核线程 上面的任意一种方式,都可以让CPU执行内核代码。...比如,I/O设备引发一个中断,相应内核态程序,首先,应该是保存内核态堆栈中CPU寄存器内容;然后,执行中断处理程序;最后,再恢复这些寄存器内容。...内核控制路径可以任意嵌套;如下图所示,用户态程序被中断打断,进入内核态响应中断;而这时候又来了其它中断,就会响应最新中断,以此类推;但是,执行完一个中断处理程序之后,会回到之前状态执行。...图4-3 内核控制路径一个嵌套异常示例 允许内核控制路径嵌套代价就是中断处理程序不能阻塞,也就是说,中断处理程序运行时不能发生进程切换。...中断处理程序绝对不能包含页错误操作,因为这会诱发进程切换。 Linux嵌套执行中断或异常处理程序两个主要原因是: 为了提高可编程中断控制器和设备控制器吞吐量。

    2.1K20

    linux | 网络数据包softirq 中断与CPU

    Linux 在每个 CPU 上会创建一个 ksoftirqd 内核线程。 softirqs 是在 Linux 内核编译时就确定好,例如网络收包对应 NET_RX_SOFTIRQ 中断。...-5.15.4/net/core/dev.c 注册网卡收发包(RX/TX)中断处理函数 open_softirq(NET_TX_SOFTIRQ, net_tx_action); open_softirq...NAPI 或新 API 编写是为了更有效地处理传入卡数据包。硬中断是昂贵,因为它们不能被中断。即使有中断 合并(稍后详细描述),中断处理程序将独占一个 CPU 内核 完全地。...NAPI 设计允许驱动程序进入轮询模式而不是被 为每个需要数据包接收硬中断。在正常操作下,会引发初始硬中断或 IRQ,然后是 SoftIRQ 处理程序 它使用 NAPI 例程轮询卡。...轮询例程有一个预算,它决定了 允许代码 CPU 时间。这是防止 SoftIRQ 独占 CPU 所必需。完成后,内核将退出轮询例程并重新启动,然后整个过程将 重复自己。

    2.7K20

    Linux各种栈:进程栈 线程栈 内核中断

    各种栈内存位置? 介绍完栈工作原理和用途作用后,我们回归到 Linux 内核上来。...Linux 内核将这 4G 字节空间分为两部分,将最高 1G 字节(0xC0000000-0xFFFFFFFF)供内核使用,称为 内核空间。...,那我们看下 Linux 内核中是怎么体现上面内存布局。...中断也是如此,当系统收到中断事件后,进行中断处理时候,也需要中断栈来支持函数调用。由于系统中断时候,系统当然是处于内核,所以中断栈是可以和内核栈共享。...而 ARM 上中断栈和内核栈则是共享中断栈和内核栈共享有一个负面因素,如果中断发生嵌套,可能会造成栈溢出,从而可能会破坏到内核一些重要数据,所以栈空间有时候难免会捉襟见肘。

    2.8K50

    Linux内核17-硬件如何处理中断和异常

    然后通过APIC总线发送给目标APIC,该APIC就会给自己CPU发送一个相应中断。 CPU间中断(简称IPI)是多核系统一个重要组成部分。Linux有效地利用它们,在CPU之间传递消息。...那么,剩下工作就是内核了,内核使用一个中断描述符表(IDT),记录每个中断或者异常编号以及相应处理函数。那么,收到中断信号后,将相应处理函数地址加载到eip寄存器中执行即可。...陷阱门 同中断门类似,只是不会修改IF标志。 4 中断和异常硬件处理 现在,我们来探究一下CPU控制单元是如何处理中断和异常。我们假设内核已经完成初始化,CPU工作在保护模式下。...后一项检查,可以阻止用户应用程序访问特定trap或中断门。 检查特权等级是否发生变化。如果CPL与描述符中DPL不同,控制单元应该使用新特权等级下堆栈。...其实对于Linux来说,只使用了supervisor和user两种特权等级。所以中断应该都是在supervisor特权等级下运行。

    2K10

    Linux各种栈:进程栈 线程栈 内核中断

    各种栈内存位置? 介绍完栈工作原理和用途作用后,我们回归到 Linux 内核上来。...Linux 内核将这 4G 字节空间分为两部分,将最高 1G 字节(0xC0000000-0xFFFFFFFF)供内核使用,称为 内核空间。...,那我们看下 Linux 内核中是怎么体现上面内存布局。...中断也是如此,当系统收到中断事件后,进行中断处理时候,也需要中断栈来支持函数调用。由于系统中断时候,系统当然是处于内核,所以中断栈是可以和内核栈共享。...而 ARM 上中断栈和内核栈则是共享中断栈和内核栈共享有一个负面因素,如果中断发生嵌套,可能会造成栈溢出,从而可能会破坏到内核一些重要数据,所以栈空间有时候难免会捉襟见肘。

    3.4K20

    Linux 内核Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

    和 虚拟内存管理 , 是 Linux 内核中 最复杂模块 ; 虚拟内存管理 包括 : 反向映射 , KSM , MMAP 映射 , 缺页中断 , 共享内存 , 进程虚拟地址空间管理 , 页面回收 ;...物理内存管理 包括 : 页面分配器 等 ; 内存管理 位于 下图 Linux 内核整体架构图 中 内核空间 ; 三、中断管理 ---- 中断管理 包括 : 处理器异常处理 , 中断处理 ; 异常指的是...处理器执行时 , 检测 异常条件 , 处理器需要停止当前执行栈 , 处理异常 ; 中断管理 位于 下图 Linux 内核整体架构图 中 内核空间 ; 四、设备管理 ---- Linux 内核 支持外设类型...---- 文件系统应用场景 : F2FS EXT 2/3/4 XFS Linux 内核 为了支持各种文件系统 , 抽象出一个 虚拟文件系统 VFS , 这是一个文件系统软件层 , 这样 Linux...内核可以很方便集成各种文件系统 ; 文件系统 位于 下图 Linux 内核整体架构图 中 内核空间 ;

    1.8K30

    OpenHamrony LiteOS-M内核中断管理

    下面介绍下中断相关概念:(1)中断号:中断请求信号特定标志,计算机能够根据中断号判断是哪个设备提出中断请求。如表1所示,ARM芯片常用中断和异常,此处稍微叙说下中断和异常区别。...表1 ARM芯片常用中断和异常中断可以看作是异常一种情况。中断是可以屏蔽,如通过寄存器I位和F位分别屏蔽IRQ和FIQ。...管理模式是一种特殊异常模式,管理模式也称为超级用户模式,是为操作系统提供中断特有模式,正是由于有了中断,用户程序才可以通过系统调用切换到管理模式。...图1是响应一个中断请求过程,用户程序正在主程序中运行,通过中断请求触发,CPU暂停当前执行主程序响应中断请求,响应完成后通过返回指令返回主程序。图1中断请求示意图(3)中断优先级。...参考图2,当外设发出中断请求后,CPU暂停当前任务,转而响应中断请求,即执行图中所示中断处理程序B。产生中断每个设备都有相应中断处理程序。(5)中断触发。

    8520
    领券