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

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

在上一篇文章中,我们已经了解了中断异常一些概念,对于中断异常也有了大概理解。那么,系统中硬件到底是如何处理中断异常呢?本文我们就以常见X86架构为例,看看中断异常硬件工作原理。...内核必须为每种异常提供专用处理函数。对于某些异常,CPU控制单元也会产生硬件错误码,并将其压入内核态栈,然后再启动异常处理函数。 下表是异常列表,列出了异常号,名称,类型等等。...陷阱门 同中断门类似,只是不会修改IF标志。 4 中断异常硬件处理 现在,我们来探究一下CPU控制单元是如何处理中断异常。我们假设内核已经完成初始化,CPU工作在保护模式下。...其实对于Linux来说,只使用了supervisoruser两种特权等级。所以中断应该都是在supervisor特权等级下运行。...(处理中断异常后,还要恢复到旧任务执行) 根据造成异常指令逻辑地址,加载cseip寄存器(异常解决后,程序可以继续从这儿执行); 保存eflags、cseip到堆栈中; 如果异常携带异常错误码

2K10

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

来源: CSDN | phenix_lord专栏 硬件处理 最近解决一个关于Linux中断问题,把相关机制整理了一遍,记录在此。...对应I/O APIClocal APIC组合,其连接方式见下图 ? 针对X86中断控制器硬件linux对这些硬件初始化,在《interrupt in linux》中有很详细描述。...CPU对中断异常处理 相关概念 1、 vector(中断向量) vector是一个整数,在X86CPU上,使用vector对中断(interrupt,外部设备产生)异常(exception,...CPU在程序执行中产生)统一编号,每个CPU核心内部,中断/异常vector所以一一对应;但是在各个不同CPU核心上,相同vector可以对应不同中断(至少对于linux设置,异常还是使用相同...4、 在外设/驱动中断处理函数层次往往也有中断使能功能,比如启用了NAPI网卡,在中断处理函数开始执行时候,往往会通过硬件功能关闭该中断,要在对应中断完成处理后才通过硬件功能使能该中断

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

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

讲解这部分之前,我们先阐述一个概念-内核控制路径:就是一段在内核态执行代码,比如说,异常处理程序,中断处理程序,系统调用处理,内核线程等等在内核态执行代码。...图4-3 内核控制路径一个嵌套异常示例 允许内核控制路径嵌套代价就是中断处理程序不能阻塞,也就是说,中断处理程序运行时不能发生进程切换。...也就是说,页错误异常最多嵌套2层。 异常相反,尽管内核代表当前进程处理这些中断,但是,I/O设备引发中断当前进程没有直接数据引用关系。事实上,给定一个中断,无法推断出是哪个进程在运行。...所以,中断执行不会引起进程切换,也就可以无限嵌套处理中断处理程序可以打断中断异常处理程序执行,但是反过来,异常不能打断中断处理程序。...中断处理程序绝对不能包含页错误操作,因为这会诱发进程切换。 Linux嵌套执行中断异常处理程序两个主要原因是: 为了提高可编程中断控制器设备控制器吞吐量。

2K20

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

中断又分为外部可屏蔽中断(INTR)外部非屏蔽中断(NMI),所有I/O 设备产生中断请求(IRQ)均引起屏蔽中断,而紧急事件(如硬件故障)引起故障产生非屏蔽中断。...非屏蔽中断向量异常向量是固定,而屏蔽中断向量可以通过对中断控制器编程来改变。Linux 对256 个向量分配如下。 • 从0~31 向量对应于异常非屏蔽中断。...异常就是CPU 内部出现中断,也就是说,在CPU 执行特定指令时出现非法情况。非屏蔽中断就是计算机内部硬件出错时引起异常情况。从图3.1 可以看出,二者与外部I/O接口没有任何关系。...Intel x86 处理器发布了大约20 种异常Linux 内核必须为每种异常提供一个专门异常处理程序,它们通常把一个UNIX 信号发送到引起异常进程。...4、中断异常处理 当CPU 执行了当前指令之后,CS EIP 这对寄存器中所包含内容就是下一条将要执行指令逻辑地址。

3.5K10

Linux系统中断硬件框架

中断控制器会向CPU发出中断信号,CPU可以读取中断控制器寄存器,判断当前处理是哪个中断。...CPU也有自己寄存器,可以设置它来使能/禁止中断,这是中断处理总开关。...ISER0中bit0对应异常向量表中第16项(向量表从第0项开始),如下图: 3.2.4 CPU cortex M3/M4处理器内部有这几个寄存器: 1....它使软件能够屏蔽,启用禁用来自各个中断中断,以(在硬件中)对各个中断源进行优先级排序生成软件触发中断。它还提供对TrustZone安全性扩展支持。...它使软件能够屏蔽,启用禁用来自各个中断中断,以(在硬件中)对各个中断源进行优先级排序生成软件触发中断。它还提供对TrustZone安全性扩展支持。

4.5K40

中断异常

一般是定时器中断I/O设备中断异常通常分为2类:一类是编程错误,另外一类就是需要内核处理异常情况。编程错误,比如程序异常终止,处理这种异常,内核只需要给当前进程发送一个信号即可。...但是,需要注意中断处理进程切换有着很大不同:中断或者异常处理程序不是进程。它处理完全在内核态,而且处理内容非常少,要求响应时间必须非常短。...非可屏蔽中断 只有很少重要事件会产生非屏蔽中断。比如,硬件错误。非屏蔽中断总是能够被硬件识别。 异常: Fault 这类异常可以纠正。...这类错误一般是硬件错误或系统页表中非法或者不一致地址等。控制单元发出信号,让CPU跳转到异常处理程序。Abort异常处理程序一般都是终止程序执行。...非可屏蔽中断异常编号是固定;而可屏蔽中断是不固定,可以通过对中断控制器进行编程进行修改。 4 中断请求线-IRQ 硬件设备可编程中断控制器之间使用中断请求线(IRQ)进行连接。

1.3K20

Linux中断处理

中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux中断处理过程。...handler: 类型为 hw_interrupt_type 结构,表示IRQ线对应硬件相关处理函数,比如 8259A中断控制器 接收到一个中断信号时,需要发送一个确认信号才会继续接收中断信号,发送确认信号函数就是...action: 类型为 irqaction 结构,中断信号处理入口。由于一条IRQ线可以被多个硬件共享,所以 action 是一个链表,每个 action 代表一个硬件中断处理入口。...next: 每个硬件中断处理入口对应一个 irqaction 结构,由于多个硬件可以共享同一条IRQ线,所以这里通过 next 字段来连接不同硬件中断处理入口。...鉴于这个原因,Linux中断处理分为两个部分,上半部 下半部,上半部 在前面已经介绍过,接下来就介绍一下 下半部 执行。

6.6K20

保护模式下中断异常(上) -- 硬件原理篇

Abort — “中止”,是严重异常,比如硬件错误系统表中包含非法值或不一致状态等,一旦这类异常发生,程序运行便随之中止 2.1.2....中断 正常程序运行,除了发生异常外,即便是发生跳转,也都是程序主动行为,但有时,处理器外部硬件事件,比如外围设备请求突然到来等都是随机发生,我们可以预先设定事件发生时执行程序,但不能预知事件何时到来...可屏蔽中断响应 — 可编程中断控制器 8259A 不可屏蔽中断可屏蔽中断分别是通过 CPU NMI 引脚 INTR 引脚触发,顾名思义,可屏蔽中断硬件中断实现了是否屏蔽标识,这意味着更加灵活中断控制...结语 本文我们详细介绍了保护模式下中断异常与实地址模式下不同之处,以及如何通过程序操作硬件 — 可编程中断控制器初始化、屏蔽或打开中断响应,这些是理解硬件系统、操作系统基础知识,也是硬件部分...参考资料 《Orange’s 一个操作系统实现》。 《linux 内核完全注释》。

96320

Linux 中断处理浅析

最近在研究异步消息处理, 突然想起linux内核中断处理, 里面由始至终都贯穿着”重要事马上做, 不重要事推后做”异步处理思想....(另外, 这里如果开中断, 正在处理这个中断一般也是会被阻塞. 因为正在处理某个中断时候, 硬件中断控制器上这个中断并未被ack, 硬件不会发起下一次相同中断.)...而第二部分开中断情况下进行处理过程一般是由tasklet机制来完成. tasklet是由软中断引出, 内核定义了两个软中断掩码HI_SOFTIRQTASKLET_SOFTIRQ(两者优先级不同...中断处理这几个阶段中不能调用可能导致睡眠函数(包括分配内存); 对于第一个问题, 较新linux内核增加了ksoftirqd内核线程, 如果持续处理softirq超过一定数量, 则结束中断处理过程...据说在montavista(一种嵌入式实时linux)中, 将内核中断机制做了修改. (某些中断)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题.

7.3K80

5-中断异常

中断异常 本质 发生中断就意味着需要操作系统介入,开展管理工作。由于操作系统管理工作(如进程切换,分配I/O设备等)需要使用特权指令,所以需要CPU由用户态切换到核心态。...有了中断,才能实现多道程序并发执行 概念 中断发生时,CPU立即进入核心态 中断发生后,当前进程暂停运行,并由操作系统内核对中断进行处理 对于不同中断信号,会进行不同处理 用户态切换到核心态是通过中断实现...,并且中断是唯一实现方式 核心态到用户态切换只需要执行一个特权指令,将程序状态字(PSW)标志位设置为“用户态”即可 中断分类 内中断 也称为异常,例外,陷入 信号来源:CPU内部,与当前执行指令有关...内中断还细分为 自愿中断:指令中断,如系统调用时访管指令(陷入指令,trap指令) 强迫中断硬件故障(如缺页中断),软件中断(如除0) 内中断另一种分类方式: 陷阱,陷入(trap):有意而为之异常...,如系统调用 故障(fault):由错误条件引起,可能被故障处理程序修复,如缺页 终止(abort):不可恢复致命错误造成结果,终止处理程序不再将控制返回给引发终止应用程序,如整数除0操作 外中断

41910

中断异常概念详解

中断(interrupt)通常被定义为一个事件,该事件改变处理器执行指令顺序。这样事件与CPU芯片内外部硬件电路产生电信号相对应。...异步中断是由其他硬件设备依照CPU时钟信号随机产生中断是由间隔定时器I/O设备产生,例如,用户一次按键会引起一个中断。...异常 在Intel微处理器手册中,把同步异步中断分别称为异常(exception)中断(interrupt)。我们也采用这种分类,当然有时我们也用术语“中断信号”指这两种类型。...3.中断异常 Intel文档把中断异常分为以下几类: (1)中断: 可屏蔽中断(maskable interrupt) 非屏蔽中断(nonmaskable interrupt) (2)异常处理器探测异常...Intel把这个8位无符号整数叫做一个向量(vector)。非屏蔽中断向量异常向量是固定,而可屏蔽中断向量可以通过对中断控制器编程来改变。 参考资料: 《深入理解LINUX内核》

1.3K10

Linux BSP实战课(中断篇):中断控制器硬件实现

从技术深层次来看,中断处理器在正常运行过程中,因外部或内部事件(如外围设备输入/输出请求、异常错误等)而暂时中断当前执行程序,转而执行特定中断服务程序(Interrupt Service Routine...中断机制允许处理器在这些设备需要服务时,能够立即响应,而不必等待处理器完成当前任务。这种异步处理能力极大地提高了系统响应性效率。 此外,中断机制还在系统调度核间交互中发挥着不可或缺作用。...系统调度是操作系统根据一定策略选择下一个要执行进程或线程过程。当中断发生时,处理器可能会根据中断类型优先级来决定是否切换当前执行上下文,从而实现任务快速切换调度。...而在多核或多处理系统中,中断也是核间通信同步重要手段,它可以帮助不同处理器核心之间传递信息、协调工作。...主要作用为: 接受硬件中断信号,并经过一定处理后,分发给对应CPU进行处理。 当前GIC 有四个版本,GIC v1~v4, 本文主要介绍GIC v3控制器。

18010

linux内核缺页中断处理

缺页中断处理一般流程: 1.硬件陷入内核,在堆栈中保存程序计数器,大多数当前指令各种状态信息保存在特殊cpu寄存器中。 2.启动一个汇编例程保存通用寄存器其他易丢失信息,以免被操作系统破坏。...3.当操作系统发现缺页中断时,尝试发现需要哪个虚拟页面。通常一个硬件寄存器包含了这些信息,如果没有的话操作系统必须检索程序计数器,取出当前指令,分析当前指令正在做什么。...9.调度引发缺页中断进程,操作系统返回调用他汇编例程 10.该例程恢复寄存器其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常处理流程很复杂,但是基本思想上述流程差不多。...下面看linux基本处理流程: 内核处理缺页异常主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器值 * error_code,由硬件产生:

10.6K21

Linux 多核下绑定硬件中断到不同 CPU

硬件中断发生频繁,是件很消耗 CPU 资源事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同 CPU (core) 处理显然能很好平衡性能。...就像你正在工作时候受到 QQ 干扰一样,一次 QQ 摇头就可以被称为中断中断是一种比较好 CPU 硬件沟通方式。...在计算机里,中断是一种电信号,由硬件产生,并直接送到中断控制器(如 8259A)上,然后再由中断控制器向 CPU 发送信号,CPU 检测到该信号后,就中断当前工作转而去处理中断。...现在来看一下中断控制器,常见中断控制器有两种:可编程中断控制器 8259A 高级可编程中断控制器(APIC),中断控制器应该在大学硬件接口计算机体系结构相关课程中都学过。...光有高级可编程中断控制器硬件支持还不够,Linux 内核还必须能利用到这些硬件特质,所以只有 kernel 2.4 以后版本才支持把不同硬件中断请求(IRQs)分配到特定 CPU 上,这个绑定技术被称为

5.3K83

Linux 内核如何处理中断

此外,键盘并不是导致中断唯一组件。一般来说,有三种类型事件会导致 CPU 发生中断硬件中断、软件中断异常。在具体介绍不同类型中断前,我需要先定义一些术语。...硬件中断 当一个硬件设备想要告诉 CPU 某一需要处理数据已经准备好后(例如:当键盘被按下或者一个数据包到了网络接口处),它将会发送一个中断请求(IRQ)来告诉 CPU 数据是可用。...但并不是所有异常都是由指令错误引起异常可以进一步分为 错误(Fault)、 陷阱(Trap) 终止(Abort)。 错误:错误是系统可以纠正异常。...这是最严重中断,终止将会调用系统终止异常处理程序来结束造成异常进程。 动手实践 中断请求按照高级可编程中断控制器(APIC)中优先级高低排序(0是最高优先级)。...中断描述表(interrupt descriptor table)(IDT)中记录了中断请求(IRQ)中断服务程序(ISR)对应关系。Linux 中定义了从 0 到 256 IRQ 向量。

2.4K40

Linux 网络中断下半部处理

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

2.2K50

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

linux为了实现这个特点,当中断发生时候,硬中断处理那些短时间就可以完成工作,而将那些处理事件比较长工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(4)软中断指令 int是软中断指令。 中断向量表是中断中断处理函数地址对应表。 int n -- 触发软中断n。相应中断处理函数地址为:中断向量表地址 + 4 * n。...二、开关 (1)硬中断开关 简单禁止激活当前处理器上本地中断: local_irq_disable(); local_irq_enable(); 保存本地中断系统状态下禁止激活: unsigned...= TASK_RUNNING) wake_up_process(tsk); } 在下列地方,待处理中断会被检查执行: a. 从一个硬件中断代码处返回时 b....中断处理程序执行硬件设备相关操作,然后触发相应中断,最后退出。内核在执行完中断处理程序以后,马上就会调用do_softirq(),于是软中断开始执行中断处理程序完成剩余任务。

21.4K21

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

“依次轮着把产生中断给各个 CPU,还是说看哪个CPU有空就给哪个CPU来着”,让硬件处理这么复杂逻辑有些不合适,实际上,GIC 硬件是不会进行任何判断,也不会集成任何算法,它就是根据Interrupt...Linux 抢占机制 GIC 中断控制器支持中断优先级抢占,一个高优先级中断可以抢占一个低优先级且处于active状态中断,即GIC仲裁单元会记录比较当前优先级最高pending状态,然后去抢占当前中断...在中断处理过程中,主要是 GIC CPU 交互,即便 GIC 支持高优先级中断抢占正在执行低优先级中断,发信号给 CPU core,但是 CPU core 可以不处理,因为 Linux 中当 CPU...core 执行中断处理时,是关中断关抢占状态,不再相应中断信号。...unhandled interrupt spurious interrupt 未处理中断虚假中断中断处理最后,总会有一段代码如下: irqreturn_t handle_irq_event_percpu

4.8K20
领券