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

Linux中断处理

中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux中断处理过程。...中断处理相关结构 前面说过,8259A中断控制器 由两片 8259A 风格外部芯片以 级联 方式连接在一起,每个芯片可处理多达 8 个不同 IRQ(中断请求),所以可用 IRQ 线个数达到 15...处理中断请求 当一个中断发生时,中断控制层会发送信号给CPU,CPU收到信号会中断当前执行,转而执行中断处理过程。...中断处理 - 下半部(软中断) 由于中断处理一般在关闭中断情况下执行,所以中断处理不能太耗时,否则后续发生中断就不能实时地被处理。...鉴于这个原因,Linux中断处理分为两个部分,上半部 和 下半部,上半部 在前面已经介绍过,接下来就介绍一下 下半部 执行。

6.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 中断处理浅析

最近在研究异步消息处理, 突然想起linux内核中断处理, 里面由始至终都贯穿着”重要事马上做, 不重要事推后做”异步处理思想....于是整理一下~ 第一阶段 获取中断号 每个CPU都有响应中断能力, 每个CPU响应中断时都走相同流程. 这个流程就是内核提供中断服务程序....关于调度 上面的流程中, 还隐含了一个问题, 整个处理过程是持续占有CPU(除了开中断情况下可能被新中断打断以外). 并且, 中断处理这几个阶段中, 程序不能够让出CPU!...中断处理这几个阶段中不能调用可能导致睡眠函数(包括分配内存); 对于第一个问题, 较新linux内核增加了ksoftirqd内核线程, 如果持续处理softirq超过一定数量, 则结束中断处理过程...据说在montavista(一种嵌入式实时linux)中, 将内核中断机制做了修改. (某些中断)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题.

7.4K80

Linux系统驱动之GIC驱动程序对中断处理流程

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 GIC驱动程序对中断处理流程 资料下载 视频观看 1....一级中断控制器处理流程 2. 多级中断控制器处理流程 参考资料: linux kernel中断子系统之(七):GIC代码分析 使用逐步演进方法才能形象地理解。 1....一级中断控制器处理流程 对于irq_desc,内核有两种分配方法: 一次分配完所有的irq_desc 按需分配(用到某个中断才分配它irq_desc 现在内核基本使用第1种方法。...多级中断控制器处理流程 假设GPIO模块下有4个引脚,都可以产生中断,都连接到GIC33号中断 GPIO也可以看作一个中断控制器,对于它4个中断 对于GPIO模块中0~3这四个hwirq,一般都会一下子分配四个

2.2K20

linux内核缺页中断处理

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

10.7K21

Linux中断机制:硬件处理,初始化和中断处理

来源: CSDN | phenix_lord专栏 硬件处理 最近解决一个关于Linux中断问题,把相关机制整理了一遍,记录在此。...不同外部设备、不同体系结构、不同OS其中断实现机制都有差别,本文对应OS为linux3.4版本,外部设备为PCI设备、系统为X86。...3、 对X86系统,CPU利用从中断控制器获取到vector为索引,查询IDT (interrupt descriptor table)得到该中断处理接口(对linux,是在entry_64.s中定义函数...对应I/O APIC和local APIC组合,其连接方式见下图 ? 针对X86中断控制器硬件和linux对这些硬件初始化,在《interrupt in linux》中有很详细描述。...》 除了中断路由表,其它两种机制初始化(包括相关中断路由信息初始化)在《interrupt in linux》中有很详细描述。

7.8K30

Exynos4412 中断处理流程详解

Linux 中,当外设触发中断后,大体处理流程如下:   a -- 具体CPU architecture相关模块会进行现场保护,然后调用machine driver对应中断处理handler;   ...相关模块会进行现场恢复;   总结下来,整个过程可以分为三部分:1、硬件处理部分;2、汇编处理部分;3、C 处理部分;   下面我们来追踪一下代码,了解当中断发生时,Linux 是如何处理,前面的一些中断初始化部分就不再这里详述了...  5、irq_desc结构体   Linux内核将所有中断统一编号,使用irq_desc结构来描述中断:每个数组项对应一个中断(也可能是一组中断,它们使用共同中断号),里面记录了中断名称,中断状态...,中断标记,并提供硬件访问函数(清除,屏蔽,使能中断),提供了这个中断处理函数入口,通过它可以调用用户注册中断处理函数   include/linux/irq.h   {   ..........这里调用desc->handle_irq分为俩种情况,一是单独中断,一是共享中断,俩者区别在于后者需要先判断是共享中断哪一个然后再真正去调用handle_irq,所以我这里分析一下单独中断处理流程

1K30

Linux 内核如何处理中断

中断服务程序(ISR)是一个小程序,用来处理具体数据,其具体处理方式依赖于造成中断请求(IRQ)原因。之前正在运行进程在中断服务程序(ISR)运行结束前都会被中断。...当系统需要实时性时(例如在工业应用中),软件中断会变得重要。你可以在 Linux 基金会文章中找到更多相关信息:面向嵌入式开发者实时 Linux 介绍。...这是最严重中断,终止将会调用系统终止异常处理程序来结束造成异常进程。 动手实践 中断请求按照高级可编程中断控制器(APIC)中优先级高低排序(0是最高优先级)。...中断描述表(interrupt descriptor table)(IDT)中记录了中断请求(IRQ)和中断服务程序(ISR)对应关系。Linux 中定义了从 0 到 256 IRQ 向量。...其中一些在 Linux 内核源树中Linux IRQ 向量布局中指定。 如果要实时获取该表,请运行如下命令: watch -n1 "cat /proc/interrupts"

2.4K40

Linux 网络中断下半部处理

在 上一篇文章 中,我们介绍了网卡接收和发过数据在 Linux 内核中处理过程,我们先来回顾一下网卡接收和发送数据过程,如 图1 所示: ?...由于在处理硬件中断服务时会关闭硬件中断,所以在处理硬件中断服务过程中,如果发生了其他硬件中断,也不能得到有效处理,从而导致硬件中断丢失情况。...为了避免这种情况出现,Linux 内核把中断处理分为:中断上半部 和 中断下半部,上半部在关闭中断情况下进行,而下半部在打开中断情况下进行。...NET_RX_DROP; } netif_rx 函数参数就是要上送给网络协议栈数据包,netif_rx 函数主要完成以下几个工作: 获取当前 CPU 处理数据包队列,在 Linux 内核初始化时...对于 Linux 内核中断处理机制可以参考我们之前文章 Linux中断处理,这里就不详细介绍了。在本文中,我们只需要知道网络中断下半部处理例程为 net_rx_action 函数即可。

2.3K50

Linux 中断子系统(三):中断处理知识点大全

所以 Linux 下: 1、高优先级中断无法抢占正在执行低优先级中断。 2、同处于 pending 状态中断,优先响应高优先级中断进行处理。...这样是可以理解,如果万一中断大量爆发,中断如果允许嵌套的话,栈会越来越大,会爆掉,所以为了防止这种情况发生,Linux中断不允许嵌套,单CPU中,在一个中断处理完之前,不会相应另外一个中断,哪怕优先级比它高...在中断处理过程中,主要是 GIC 和 CPU 交互,即便 GIC 支持高优先级中断抢占正在执行低优先级中断,发信号给 CPU core,但是 CPU core 可以不处理,因为 Linux 中当 CPU...如果低优先级中断处于 active 状态,是不可以被抢占,这是前后关系。抢占只存在于同时是pending 状态时候。 Linux 为什么中断不允许休眠?...对于这类中断linux kernel有一套复杂机制来处理,你可以通过command line参数(noirqdebug)来控制开关该功能。

4.9K20

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

Linux中断要执行操作分为三类: 关键中断 比如响应PIC控制器发送中断,重新编程设置PIC或者设备控制器,更新设备和处理器访问数据结构等。...为了统一处理这些硬件,Linux内核使用了面向对象编程思想,构建了一个PIC对象,包含PIC名称和7个PIC标准方法。...但是,万变不离其宗,核心设计思想没变。 多核系统中IRQ分配 我们知道SMP全称是对称多处理系统,这意味,Linux内核不应该对一个CPU有任何偏向。...设置了IRQ_INPROGRESS 多核系统中,此时可能另外一个CPU可能正在处理先前发生相同中断Linux对此处理方式就是延后处理。...总结 其实内核经过这么多年发展,在实现方式上已经发生了很大变化。但是其基本思想没变。比如我们以Linux4.4.203内核对于中断处理为例,与上面的处理过程进行比较,理解其主要变化。

2.2K20

一文完全读懂 | Linux中断处理

处理器一经检测到该信号,便中断自己当前正在处理工作,转而去处理中断。此后,处理器会通知 OS 已经产生中断。这样,OS 就可以对这个中断进行适当处理。...中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux中断处理过程。...中断处理 - 下半部(软中断) 由于中断处理一般在关闭中断情况下执行,所以中断处理不能太耗时,否则后续发生中断就不能实时地被处理。...鉴于这个原因,Linux中断处理分为两个部分,上半部 和 下半部,上半部 在前面已经介绍过,接下来就介绍一下 下半部 执行。...softirq机制 中断下半部 由 softirq(软中断) 机制来实现,在Linux内核中,有一个名为 softirq_vec 数组,如下: static struct softirq_action

2.3K20

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

讲解这部分之前,我们先阐述一个概念-内核控制路径:就是一段在内核态执行代码,比如说,异常处理程序,中断处理程序,系统调用处理,内核线程等等在内核态执行代码。...图4-3 内核控制路径一个嵌套异常示例 允许内核控制路径嵌套代价就是中断处理程序不能阻塞,也就是说,中断处理程序运行时不能发生进程切换。...所以,中断执行不会引起进程切换,也就可以无限嵌套处理中断处理程序可以打断中断或异常处理程序执行,但是反过来,异常不能打断中断处理程序。...中断处理程序绝对不能包含页错误操作,因为这会诱发进程切换。 Linux嵌套执行中断或异常处理程序两个主要原因是: 为了提高可编程中断控制器和设备控制器吞吐量。...内核正在处理一个中断时候,能够及时响应另一个中断。 实现没有中断优先级模型。这可以简化内核代码并提高可移植性。 在多核系统中,几个中断或异常处理程序可能会并发执行。

2.1K20

中断机制和中断描述符表、中断和异常处理

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中一些概念性问题...非屏蔽中断向量和异常向量是固定,而屏蔽中断向量可以通过对中断控制器编程来改变。Linux 对256 个向量分配如下。 • 从0~31 向量对应于异常和非屏蔽中断。...Intel x86 处理器发布了大约20 种异常,Linux 内核必须为每种异常提供一个专门异常处理程序,它们通常把一个UNIX 信号发送到引起异常进程。...当控制权通过中断门进入中断处理程序时,处理器清IF 标志,即关中断,以避免嵌套中断发生。...通过系统门来激活4 个Linux 异常处理程序,它们向量是3、4、5 及128,也就是说,在用户态下,可以使用int 3、into、bound 及int 0x80 四条汇编指令。

3.5K10

Linux中断 - IDT

[toc] 如何设置IDT IDT 中断描述符表定义 中断描述符表简单来说说是定义了发生中断/异常时,CPU按这张表中定义行为来处理对应中断/异常。...中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应中断描述符,再根据中断描述符记录信息来作权限判断,运行级别转换,最终调用相应中断处理程序; 这里涉及到Linux...idt3.jpg 硬件中断实现 硬件中断IDT初始化和调用流程 这里我们不讲解具体代码细节,只关注流程 。...硬件中断相关IDT初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int...,其实很简单它相当于填充一个中断处理函数数组,填充多少次呢?

6.5K10

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

如果中断线是激活中断控制器就把电信号发送给处理某个特定引脚。处理器于是立即停止自己正在做事,跳到中断处理程序入口点,进行中断处理。...linux为了实现这个特点,当中断发生时候,硬中断处理那些短时间就可以完成工作,而将那些处理事件比较长工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套,但是没有优先级概念,也就是说任何一个新中断都可以打断正在执行中断,但同种中断除外。软中断不能嵌套,但相同类型中断可以在不同CPU上并行执行。...(4)软中断指令 int是软中断指令。 中断向量表是中断号和中断处理函数地址对应表。 int n -- 触发软中断n。相应中断处理函数地址为:中断向量表地址 + 4 * n。...如果有待处理中断,do_softirq()会循环遍历每一个,调用它们相应处理程序。 在中断处理程序中触发软中断是最常见形式。

21.7K21
领券