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

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

edge 触发中断的基本处理过程: 电压跳变触发中断===>中断控制器接收中断,记IRR寄存器===>中断控制器置ISR寄存器===>CPU屏蔽本CPU中断===>CPU处理中断,发出EOI===>中断控制器确认可以处理下一次中断...===>ISR清中断源,电压归位===>中断源可以发起下一次中断===>CPU中断处理完成,执行完现场处理后执行IRET,不再屏蔽本CPU中断。...那么在ISR处理开始的时候,A会告诉ISR,不是它干的,然后ISR处理B的中断,完成后通过清理中断源把B的电压归位,但是由于A的中断没有得到处理,电压没有归位,这个共享的中断就不能得到再次触发了。...注册的中断处理接口。...4、 在外设/驱动中断处理函数层次往往也有中断使能的功能,比如启用了NAPI的网卡,在中断处理函数开始执行的时候,往往会通过硬件功能关闭该中断,要在对应的软中断完成处理后才通过硬件功能使能该中断

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

Linux 中断处理浅析

正在处理同一中断的那个CPU完成一次处理后, 会再次检查”触发”标记, 如果设置, 则再次触发处理过程. 于是, 中断处理是一个循环过程, 每次循环调用handle_IRQ_event来处理中断....注册的中断处理函数有个中断开关属性, 一般情况下, 中断处理函数总是在关中断的情况下进行的....而调用request_irq注册中断处理函数时也可以设置该中断处理函数在开中断的情况下进行, 这种情况比较少见, 因为这要求中断处理代码必须是可重入的....于是, 一个中断处理过程被分成了两部分, 第一部分在中断处理函数里面关中断的进行, 第二部分在软中断处理函数里面开中断的进行....极端情况下,嵌套发生的软中断可能非常多,全部处理完可能需要很长的时间,于是内核会在处理完一定数量的软中断后,将剩下未处理的软中断推给一个叫ksoftirqd的内核线程来处理,然后结束本次中断处理过程。

7.3K80

DragonOS的中断处理设计

在这里简单记录一下目前DragonOS中的中断处理的设计吧。...* @param irq_num 中断向量号   * @param arg 传递给中断安装接口的参数   * @param handler 中断处理函数   * @param paramater 中断处理函数的参数...可作为中断下半部使用,任务处理实时性低于硬中断。 软中断模块设计与硬中断的设计类似。其包括了一个软中断向量表及一些函数模型。...2.1软中断向量表表项定义 表项类型定义为softirq_t 成员 类型 参数 返回值 描述 action 函数 void*data void 软中断处理函数 data void* – – 传递给软中断处理函数的数据...unregister_softirq  * @param irq_num 软中断号 2.4软中断处理程序do_softirq 在该函数中,先检测软中断是否正在被处理,如果空闲,则发起处理并置位标志位。

61420

linux内核缺页中断处理

现代处理器大部分都有MMU,除了一些小型嵌入式设备。...缺页中断处理一般流程: 1.硬件陷入内核,在堆栈中保存程序计数器,大多数当前指令的各种状态信息保存在特殊的cpu寄存器中。 2.启动一个汇编例程保存通用寄存器和其他易丢失信息,以免被操作系统破坏。...7.当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映他的位置,页框也标记位正常状态。 8.恢复发生缺页中断指令以前的状态,程序计数器重新指向这条指令。...9.调度引发缺页中断的进程,操作系统返回调用他的汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...,这样不会导致死循环中断,内核设计很安全。

10.6K21

ARM中断处理过程

以s3c2440  ARM9核为例: 一:s3c2440 ARM处理器特性:   1、S3C2440支持60个中断源,含子中断源;   2、ARM9采用五级流水线方式;    3、支持外部中断和内部中断...EINTMASK:这个简单,是屏蔽中断用的,也就是说位为1时,此次中断无效。 2.2 内部中断寄存器             内部中断有8个寄存器。...INTPND:中断优先级仲裁器选出优先级最高中断后,这个中断在INTPND寄存器中的相应位被置1,随后,CPU进入中断模式处理它。同一时间内,此寄存器只有一位被置1。            ...三、中断处理流程  1、中断控制器汇集各类外设发出的中断信号,然后通知CPU。     2、CPU保存当前程序的运行环境,然后调用中断服务程序(ISR),来处理中断。     ...3、在ISR中通过读取外设的相关的寄存器来识别中断的类型,并进行相应的处理。     4、清除中断:通过读写相关中断控制寄存器和外设相关寄存器来实现。

1.6K70

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

smp_affinity 代表中断号核CPU之间的亲缘绑定关系,也就是如果某个中断号绑定了一个CPU核,那么这个中断就会一直在这个CPU上处理。 如何让某个中断在某个特定的 CPU 处理?...Pending:中断到达 GIC ,等待 CPU 的处理。 Active:中断得到 CPU 的应答,中断被CPU处理。...因为在中断处理过程中,CPU处于关中断状态(关闭本CPU),需要等低优先级中断处理完毕,直到发送 EOI 给GIC,然后CPU才会响应pending状态中优先级最高的中断进行处理。...core 执行中断处理时,是关中断和关抢占的状态,不再相应中断信号。...2、中断上下文处于关中断中,需要发送个 EOI 通知 GIC 中断处理结束,GIC 和CPUinterface 才会进入下一次中断处理。如果中途 schedule,那么整个系统的中断都会被屏蔽掉。

4.8K20

Linux 内核如何处理中断

中断服务程序(ISR)是一个小的程序,用来处理具体的数据,其具体的处理方式依赖于造成中断请求(IRQ)的原因。之前正在运行的进程在中断服务程序(ISR)运行结束前都会被中断。...在过去,中断请求由单独的芯片处理中断控制器芯片 PIC),I/O 设备直接与中断控制器(PIC)相连。中断控制器(PIC)管理着多种硬件的中断请求(IRQ),并且可以直接与 CPU 通信。...现如今,中断请求(IRQ)由 CPU 中的 高级可编程中断控制器(advanced programmable interrupt controller)(APIC)部分来处理。...硬件中断 当一个硬件设备想要告诉 CPU 某一需要处理的数据已经准备好后(例如:当键盘被按下或者一个数据包到了网络接口处),它将会发送一个中断请求(IRQ)来告诉 CPU 数据是可用的。...这是最严重的中断,终止将会调用系统的终止异常处理程序来结束造成异常的进程。 动手实践 中断请求按照高级可编程中断控制器(APIC)中的优先级高低排序(0是最高优先级)。

2.3K40

Linux 网络中断下半部处理

由于在处理硬件中断服务时会关闭硬件中断,所以在处理硬件中断服务的过程中,如果发生了其他的硬件中断,也不能得到有效的处理,从而导致硬件中断丢失的情况。...为了避免这种情况出现,Linux 内核把中断处理分为:中断上半部 和 中断下半部,上半部在关闭中断的情况下进行,而下半部在打开中断的情况下进行。...由于中断上半部在关闭中断的情况下进行,所以必须要快速完成,从而避免中断丢失的情况。而中断下半部处理是在打开中断的情况下进行的,所以可以慢慢进行。...一般来说,网卡驱动向内核注册的中断处理服务属于 中断上半部,如前面介绍的 NS8390网卡驱动 注册的 ei_interrupt 中断处理服务,而本文主要分析网卡 中断下半部 的处理。...对于 Linux 内核的中断处理机制可以参考我们之前的文章 Linux中断处理,这里就不详细介绍了。在本文中,我们只需要知道网络中断下半部处理例程为 net_rx_action 函数即可。

2.2K50

Exynos4412 中断处理流程详解

Linux 中,当外设触发中断后,大体处理流程如下:   a -- 具体CPU architecture相关的模块会进行现场保护,然后调用machine driver对应的中断处理handler;   ...control(处理中断的嵌套、抢占等),当然最终会遍历该中断描述符的IRQ action list,调用外设的specific handler来处理中断;   d -- 具体CPU architecture...相关的模块会进行现场恢复;   总结下来,整个过程可以分为三部分:1、硬件处理部分;2、汇编处理部分;3、C 处理部分;   下面我们来追踪一下代码,了解当中断发生时,Linux 是如何处理的,前面的一些中断初始化部分就不再这里详述了...,下面开始具体分析:   一、硬件处理部分   当一切准备好之后,一旦打开处理器的全局中断就可以处理来自外设的各种中断事件了。   ...现在处理中断中我们就看到了调用了我们自己的中断处理函数来处理中断了。

98730

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

处理器一经检测到该信号,便中断自己当前正在处理的工作,转而去处理中断。此后,处理器会通知 OS 已经产生中断。这样,OS 就可以对这个中断进行适当的处理。...中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux对中断处理过程。...处理中断请求 当一个中断发生时,中断控制层会发送信号给CPU,CPU收到信号会中断当前的执行,转而执行中断处理过程。...处理中断后,调用 do_softirq() 函数来对中断下半部进行处理(下面会说)。...中断处理 - 下半部(软中断) 由于中断处理一般在关闭中断的情况下执行,所以中断处理不能太耗时,否则后续发生的中断就不能实时地被处理

2.1K20

系统休眠(System Suspend)和设备中断处理

外设的中断信号被送到“通用的中断信号处理模块”和“特定中断信号接收模块”。...正常工作的时候,我们会turn on“通用的中断信号处理模块”的处理逻辑,而turn off“特定中断信号接收模块” 的处理逻辑。...一旦唤醒,我们最好是turn off“特定中断信号接收模块”,让外设的中断处理回到正常的工作模式,同时,也避免了系统suspend-resume模块收到不必要的干扰。...),而普通中断由于其IRQ被disable了,因此无法唤醒idle状态中的处理器。...整个过程和将系统从suspend状态中唤醒一样,唯一不同的是:将系统从freeze状态唤醒走的中断处理路径,而将系统从suspend状态唤醒走的唤醒处理路径,需要电源管理HW BLOCK中特别的中断处理逻辑的参与

1.6K30

DragonOS的简单的中断处理模块的设计

中断响应模块目前使用了8259A PIC芯片进行中断处理。使用两块8259A芯片级联,并采用AEOI、FNM全嵌套、无缓冲模式进行处理。...级联结构: 中断引脚与外部设备对照表 8259A PIN 中断请求源 主芯片 IR0 timer时钟 IR1 键盘 IR2 级联从8259A芯片 IR3 串口2 IR4 串口1 IR5 并口...2 IR6 软驱 IR7 并口1 从芯片 IR0 CMOS RTC实时时钟 IR1 重定向到主芯片的IR2引脚 IR2 保留 IR3 保留 IR4 PS/2鼠标 IR5 协处理器 IR6...SATA主硬盘 IR7 SATA从硬盘 初始化中断处理模块 定义了保存寄存器的宏定义 使用Build_IRQ宏,创建每个中断号的中断入口函数。...初始化中断门(使用ist=2) 设置主、从芯片的ICW1-4以及OCW1. 中断处理流程 在中断入口处,保存寄存器 将返回地址压入堆栈 跳转到do_IRQ()函数 发送EOI到PIC,结束中断

44620

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

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

2K20

嵌入式基础知识-中断处理过程

中断的一些基本概念: 中断源:引起中断的事件称为中断中断请求:中断源向CPU提出处理的请求称为中断请求 中断向量:中断源的识别标志,中断服务程序的入口地址 中断向量表:按照中断类型号从小到大的顺序存储对应的中断向量...保存现场:保存程序当前断点执行所需的寄存器和相关数据 中断服务程序:处理中断源的程序称为中断处理程序 中断处理:CPU执行有关的中断服务函数称为中断处理 中断返回:返回断点的过程称为中断返回 2 中断的分类.../非屏蔽中断 按是否可屏蔽,可分为: 可屏蔽中断:通过INTR(Interrupt Require)线向CPU请求的中断,此类中断并不会影响系统运行,可随时处理,或不处理。...线上的请求 ,不受中断标志位IF的影响,内部中断是不可屏蔽的中断 3 中断处理具体细节 中断的整个处理过程,由硬件和软件共同完成,具体处理细节如下图: 根据此图,再来分析下各个过程: 关中断:进入不可响应中断请求的中断.../关中断,也可用下图描述 4 总结 本编介绍了中断基本概念,中断的分类,以及 中断处理的具体细节

40641

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

如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事, 跳到中断处理程序的入口点,进行中断处理。...linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间 就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。 软中断处理中断未完成的工作,是一种推后执行的机制,属于下半部。...如果有待处理的软中断, do_softirq()会循环遍历每一个,调用它们的相应的处理程序。 在中断处理程序中触发软中断是最常见的形式。...中断处理程序执行硬件设备的相关操作, 然后触发相应的软中断,最后退出。内核在执行完中断处理程序以后,马上就会调用 do_softirq(),于是软中断开始执行中断处理程序完成剩余的任务。

2.5K40
领券