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

Linux中断处理

中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux中断的处理过程。...action: 类型为 irqaction 结构,中断信号的处理入口。由于一条IRQ线可以被多个硬件共享,所以 action 是一个链表,每个 action 代表一个硬件的中断处理入口。...flags: 标志位,用于表示 irqaction 的一些行为,例如是否能够与其他硬件共享IRQ线。 name: 用于保存中断处理的名字。 dev_id: 设备ID。...next: 每个硬件的中断处理入口对应一个 irqaction 结构,由于多个硬件可以共享同一条IRQ线,所以这里通过 next 字段来连接不同的硬件中断处理入口。...setup_irq(0, &irq0); } 可以看到,时钟中断处理入口的IRQ号为0,处理函数为 timer_interrupt(),并且不支持共享IRQ线(flags 字段没有设置 SA_SHIRQ

6.6K20

Linux中断 - IDT

中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...; segment就是相应的段选择子,根据它在GDT中查找可以最终获取到段基地址; bits是该中断描述符的一些属性值: struct idt_bits { u16 ist : 3,...__KERNEL_CS) 它初始化一个中断门,权限是DPL3, 因此从用户态是允许发起系统调用的。...idt3.jpg 硬件中断的实现 硬件中断的IDT初始化和调用流程 这里我们不讲解具体的代码细节,只关注流程 。...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int

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

Linux 中断处理浅析

最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....将中断号压入栈中; (不同中断号的中断对应不同的中断服务程序入口) 2....中断处理的这几个阶段中不能调用可能导致睡眠的函数(包括分配内存); 对于第一个问题, 较新的linux内核增加了ksoftirqd内核线程, 如果持续处理的softirq超过一定数量, 则结束中断处理过程...据说在montavista(一种嵌入式实时linux)中, 将内核的中断机制做了修改. (某些中断的)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题....工作队列 linux基线版本的内核在解决上述问题上, 提供了workqueue机制.

7.3K80

linux 中断机制《Rice linux 学习笔记》

这篇文章以按键为例子讲解linux中断原理,中断的架构,中断的实现。 在我们的开发中,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...Linux中断原理: 中断:处理器异常的一种,它是一种特殊的电信号,用硬件发给处理器,处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。...handler:指向该中断中断处理程序 flags:中断标志 name:设备名 dev,用于共享中断线 2、释放中断函数:void free_irq(unsigned int irq,void...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。...&pins_desc[0]:用于共享中断线,请求中断和卸载中断会用到。

4.7K10

linux内核缺页中断处理

3.当操作系统发现缺页中断时,尝试发现需要哪个虚拟页面。通常一个硬件寄存器包含了这些信息,如果没有的话操作系统必须检索程序计数器,取出当前指令,分析当前指令正在做什么。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...*有若干此类链表,具体的数目取决于共享物理内存页的映射集合的数目。 anon_vma成员是一 *个指向与各链表关联的管理结构的指针,该管理结构由一个表头和相关的锁组成。...* *这里不适用current因为有可能处于任务切换的中断内 */ pgd_paddr = read_cr3(); //从cr3获取页目录地址 //获取中间目录的地址,在i386下就是...//为这个地址,退出中断后不会在执行1: mov"itype" %2,%"rtype"1\n", "3: movl %3,%0\n" \ //将4复制给err,如果发生了缺页异常会返回

10.6K21

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

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...(5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断号是由中断控制器提供的,软中断中断号由指令直接指出,无需使用中断控制器。...(3)判断中断状态 #define in_interrupt() (irq_count()) // 是否处于中断状态(硬中断或软中断) #define in_irq() (hardirq_count()...action; } 例如: open_softirq(NET_TX_SOFTIRQ, net_tx_action); open_softirq(NET_RX_SOFTIRQ, net_rx_action); (3

21.4K21

Linux中断虚拟化(一)

著有畅销书《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年的IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...当操作系统允许CPU响应中断后,每当执行完一条指令后,CPU都将检查中断引脚是否有效,一旦有效,CPU将处理中断,然后再执行下一条指令,如图3-1所示。...CPU将执行Guest系统IDT中对应的中断处理服务,图3-2为单核系统使用PIC中断芯片下的虚拟中断过程。...对于虚拟化而言,显然也需要虚拟相应的APIC,但是其本质上与PIC基本相同,如图3-3所示。

6.2K30

Linux中断虚拟化(二)

3)有的时候,我们会屏蔽掉某个设备的中断。换句话说,就是的当这个中断源向8259A发送信号后,8259A并不将这个中断信号发送给CPU。...3 设置中断标识 当8259A将中断请求记录到IRR中后,下一步就是开启一个中断评估(evaluate)过程了,包括中断是否被屏蔽,多个中断请求的优先级等等,最后将通过管脚INTA通知CPU处理外部中断...比如,当前处理的中断是irq 2,那么紧接着irq3的优先级设置为是最高,然后依次是irq4、irq5、irq6、irq7、irq1、irq2、irq3。...假设此时irq5和irq2同时来了中断,那么irq5显然会被优先处理。然后irq6被设置为优先级最高,接下来依次是irq7、irq1、irq2、irq3、irq4、irq5。...表3-1 VM-entry interruption-information格式(部分) 位 内容 7:0 中断或异常向量 10:8 中断类型:0: External interrupt1: Reserved2

5.8K10

Linux中断机制分析

中断分析最近工作繁忙,没有时间总结内核相关的一些东西。上次更新博客到了linux内核中断子系统。这次总结一下软中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...这样的后果会造成有可能丢失外部中断。于是,linux内核设计出了一种架构,中断函数需要处理的任务分为两部分,一部分在中断处理函数中执行,这时系统关闭中断。...在linux系统的进程数据结构里,有这么一个数据结构 #define preempt_count()(current_thread_info()->preempt_count), 利用preempt_count...避免多次嵌套,哪里有时间处理软件中断,所以把软件中断推迟到了所有中断处理完成的时候才能触发软件中断3....Linux内核就中断方面就必须考虑平衡这三个方面的问题。而下面我要分析的__do_softirq函数就恰似在这三者之间打太极,游刃有余,面面俱到!

8.6K91

Linux 中断子系统(二):GIC 中断控制器

gic500,支持 GIC-v3 架构。 gic600,支持 GIC-v3 和 GIC-v4 架构。 GIC-v2 GIC V2 最多支持 8 个核。...我们重点要看的肯定是中间的 GIC 部分,GIC 将众多的中断源分为 分为三类: ①、SPI(Shared Peripheral Interrupt),共享外设中断,该中断来自于外设,所有 Core 共享中断...GIC-v3 GIC-v3 架构有改变,中断号也变多了,不过还是向后兼容 GIC-v2 的。...GIC-v3将 CPU interface 从GIC侧移到了CPU侧,因为处理中断会频繁访问 CPU interface 的寄存器,移到 CPU 侧加快访问速度,中断处理就会加快。...寄存器分布,不同东西的寄存器开头不一样: GIC-v 3中断号规定如下,来源于ARM官方文档。 最主要的区别就是增加了 LPI 这个中断类型,是基于消息的中断

5.5K20

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

3、 对X86系统,CPU利用从中断控制器获取到的vector为索引,查询IDT (interrupt descriptor table)得到该中断的处理接口(对linux,是在entry_64.s中定义的函数...由于可能有较多的PCI设备,而PIR的输入/出错管脚有限,所以连接到相同输入关键的INT#会共享一个中断。 ?...针对X86中断控制器硬件和linux对这些硬件的初始化,在《interrupt in linux》中有很详细的描述。...号对应一个该结构,共享相同irq号的中断共享该结构。...b) edge触发的缺点是完成共享不方便: 比如A和B两个中断共享一个中断,每次ISR先检查A再检查B,如果B先发生中断,在ISR检查完A,检查B的过程中,A发生中断

7.7K30

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

Linux 中断相关节点 /proc/interrupts cat 这个节点,会打印系统中所有的中断信息,如果是多核CPU,每个核都会打印出来。...CPU处理的中断,因此状态是pending and active)注意:T61标识CPU开始服务该中断 T64时刻 3个clock之后,由于CPU已经ack了中断,因此GIC中CPU interface...所以 Linux 下: 1、高优先级中断无法抢占正在执行的低优先级中断。 2、同处于 pending 状态的中断,优先响应高优先级中断进行处理。...3、同优先级同是 pending 状态的中断,选择硬件中断号 ID 最小的一个发给CPU。...也不太合适,毕竟 interrupt request 信号线是允许共享的,直接 disable 该 IRQ 有可能会下手太狠,kernel 采取了这样的策略:如果该 IRQ 触发了 100,000 次,

4.8K20

Linux中断下半部实现机制

中断上、下半部产生背景 由于内核中中断不允许嵌套,在程序进入中断后,系统会关闭中断接收,这段时间内,其他中断都无法处理导致中断无法响应,因此需要当前进入的中断子服务函数越快越好。...但是在一些特殊情况下,中断要处理的事情可能是复杂且冗长的,为解决这种问题, 中断上下半部的概念顺势而生。将中断拆成两部分,上半部用来处理紧急的事情;下半部用来处理不紧急的事情。 2....tasklet是以软中断形式实现的,软中断的优先级仅次于硬件中断,在进入软件中断时,硬件中断会被打开,因此软件中断可被硬件中断打断。 使用: 软中断实现服务子函数,优先级高,影响系统执行效率。 a....(3) 线程中断:由于工作队列每次只能处理一个中断下半部,但是内核支持多线程,因此出现为每一个中断下半部开辟一个线程处理。将多个中断的下半部线程分配给多个CPU上执行,提高效率。...在程序中调用request_threaded_irq 原型: /* irq: 中断号 * handler: 中断服务子函数 * thread_fn: 中断线程化 * irqflags: 中断触发标志位

3.1K10

Linux 中断子系统(一):框架

中断是大家用的最多的功能,不管是单片机还是 Linux 系统,都需要用到中断,对它的深入理解是非常必要的。 为什么需要中断?...中断子系统硬件架构 一个完整的设备中,与中断相关的硬件可以划分为3类,它们分别是:设备、中断控制器和CPU本身。...中断控制器:中断控制器负责收集所有中断源发起的中断,现有的中断控制器几乎都是可编程的,通过对中断控制器的编程,我们可以控制每个中断源的优先级、中断的电气类型,还可以打开和关闭某一个中断源,在smp系统中...第二层是 Linux 内核提供的通用中断处理模块,这一层存在的意义在于,希望用户在第一层写的驱动在移植的时候更方便,保持接口不变,不让用户直接使用芯片原厂的 API,而是 Linux 的 API。...关于中断子系统,我写了八篇文章,从头到尾讲了一遍,大家可以去我的blog查看: http://www.linuxer.vip/linux-interrupt1/

3.2K10
领券