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

Linux中断可以嵌套

问答 问:Linux中断可以嵌套? 答:以前是可以嵌套的,现在不可以!...历史 早前的Linux内核版本,中断分为两种: 快中断,申请的时候带IRQF_DISABLED标记,在IRQ HANDLER里面不允许新的中断进来; 慢中断,申请的时候不带IRQF_DISABLED标记...老的Linux内核中,如果一个中断服务程序不想被别的中断打断,我们能看到这样的代码: request_irq(FLOPPY_IRQ, floppy_interrupt,\ - IRQF_DISABLED...也就是说,从这个commit开始,实际Linux已经不再支持中断的嵌套, 也没有快慢中断的概念了,IRQF_DISABLED标记也作废了。...Linux内核会在如下2个时候重新开启CPSR对IRQ的响应: 从IRQ HANDLER返回中断底半部的SOFTIRQ 从IRQ HANDLER返回一个线程上下文 从1大家可以看出,SOFTIRQ里面是可以响应中断

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

    Linux中断处理

    中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux中断的处理过程。...return 1; } do_IRQ() 函数首先通过IRQ号获取到其对应的 irq_desc_t 结构,注意的是同一个中断可能发生多次,所以要判断当前IRQ是否正在被处理当中(判断 irq_desc_t...鉴于这个原因,Linux中断处理分为两个部分,上半部 和 下半部,上半部 在前面已经介绍过,接下来就介绍一下 下半部 的执行。...softirq机制 中断下半部 由 softirq(软中断) 机制来实现的,在Linux内核中,一个名为 softirq_vec 的数组,如下: static struct softirq_action...类型32个位,每一个位代表一种softirq),而 __softirq_mask 字段表示哪种softirq被屏蔽了。

    6.6K20

    Linux中断 - IDT

    [toc] 如何设置IDT IDT 中断描述符表定义 中断描述符表简单来说说是定义了发生中断/异常时,CPU按这张表中定义的行为来处理对应的中断/异常。...中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...kernel的分段式内存管理,我们这里不详细展开,兴趣的同学可以自行学习。...传统系统调用相关 IDT 的设置 Linux系统启动过程中内核压解后最终都调用到start_kernel, 在这里会调用trap_init, 然后又会调用idt_setup_traps: void...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int

    6.6K10

    Linux 中断处理浅析

    最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....注册的中断处理函数中断开关属性, 一般情况下, 中断处理函数总是在关中断的情况下进行的....中断处理函数的过程可能会很长, 如果整个过程都在关中断的情况下进行, 那么后续的中断将被阻塞很长的时间. 于是, 了soft_irq....可以看出, 软中断中断的模型很类似, 每个CPU一组中断号, 中断其对应的优先级, 每个CPU处理属于自己的中断. 最大的不同是开中断与关中断....工作队列 linux基线版本的内核在解决上述问题上, 提供了workqueue机制.

    7.4K80

    结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程

    中断上下文的切换 进程上下文的切换 异常处理过程: 下面从逻辑上完整走一遍中断处理过程(结合中断上下文的切换,以定时器中断为例,假设从用户态进入中断): 1....中断控制器又与CPU的INTR引脚相连。当定时器产生中断时,中断控制器把对应的中断向量32放到一个I/O端口上,从而允许CPU通过数据总线读到这个向量。...硬件保存现场:SS、SP、eflags、cs、eip,保存到被中断进程的内核堆栈中(tr寄存器保存当前进程的tss段,而tss段里最后一次访问内核栈的指针)。 3....这样就进入到了中断处理程序的入口,CPU开始执行中断处理程序入口的代码ENTRY(interrupt)。 4....所以在外部看来就是:定时器发生中断了,定时器中断服务例程执行。

    1.3K01

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

    这篇文章以按键为例子讲解linux中断原理,中断的架构,中断的实现。 在我们的开发中,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...Linux中断原理: 中断:处理器异常的一种,它是一种特殊的电信号,用硬件发给处理器,处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。...中断服务程序:相应特定中断时,内核会执行的函数。其中:1、中断处理程序是被内核调用来响应中断的。2、而它们运行于我们称之为中断上下文的特殊上下文中。...中断上下部:为了是程序运行得快和完成的工作量多,将中断处理分为两部分,上半部和下半部,其中,上半部(中断处理程序):接收到中断,立马要执行的程序,只做严格时限的工作。下半部:允许稍后完成的工作。...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。

    4.8K10

    linux内核缺页中断处理

    5.如果选择的页框脏了,则将该页写回磁盘,并发生一次上下文切换,挂起产生缺页中断的进程让其他进程运行直到写入磁盘结束。且回写的页框必须标记为忙,以免其他原因被其他进程占用。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:...,也没有用户上下文,或者代码处于原子操作范围内,则不能处理该异 *异常 */ if (in_atomic() || !...* *这里不适用current因为可能处于任务切换的中断内 */ pgd_paddr = read_cr3(); //从cr3获取页目录地址 //获取中间目录的地址,在i386下就是

    10.8K22

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

    linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...(4)软中断指令 int是软中断指令。 中断向量表是中断号和中断处理函数地址的对应表。 int n -- 触发软中断n。相应的中断处理函数的地址为:中断向量表地址 + 4 * n。...(5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断号是由中断控制器提供的,软中断中断号由指令直接指出,无需使用中断控制器。...*/ }; 目前已注册的软中断10种,定义为一个全局数组: static struct softirq_action softirq_vec[NR_SOFTIRQS]; enum { HI_SOFTIRQ

    22.4K21

    Linux中断虚拟化(一)

    作者简介 王柏生 资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。...著有畅销书《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年的IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...图1 CPU处理中断中断需要CPU处理时,中断芯片将有效连接CPU的INTR引脚,也就是说如果INTR是高电平有效,那么中断芯片拉高INTR引脚的电平。...3)当虚拟CPU开始运行时,在其切入Guest前一刻,KVM模块将检查虚拟PIC芯片,查看是否中断需要处理。此时,KVM将触发虚拟PIC芯片的中断评估逻辑。

    6.4K30

    Linux中断虚拟化(二)

    采用中断方式后,在没有外设请求时,CPU就可以继续其他计算任务,而不是进行很多不必要的轮询,极大地提高了系统的吞吐[1] 在每个指令周期结束后,如果CPU关中断标识(IF)没有被设置,那么其会去检查是否中断请求...6)当CPU执行完当前指令周期后,其将检查寄存器FLAGS的中断使能位IF(Interrupt enable flag),如果允许中断,那么将检查INTR是否中断,如果有中断,那么将通过管脚INTR通知...对于外部中断,每个CPU在指令周期结束后,将会去检查INTR是否中断请求。...那么对于处于Guest模式的CPU,其如何知道中断请求呢?...VM entry时,KVM模块检查8259A是否pending的中断等待处理。

    6K10

    Linux中断机制分析

    中断分析最近工作繁忙,没有时间总结内核相关的一些东西。上次更新博客到了linux内核中断子系统。这次总结一下软中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...这样的后果会造成可能丢失外部中断。于是,linux内核设计出了一种架构,中断函数需要处理的任务分为两部分,一部分在中断处理函数中执行,这时系统关闭中断。...第二个好理解,软件中断产生才去处理,没有就不处理。第一个就不好理解了。...系统将唤醒一个软件中断处理的内核进程,在内核进程中处理pending中的软件中断。这里要注意,之前我们分析的触发软件中断的位置其实是中断上下文中,而在软中断的内核线程中实际已经是进程的上下文。...这里说的软中断上下文指的就是系统为每个CPU建立的ksoftirqd进程。 看完这个函数,我不得不佩服这个函数设计的精巧!而我更多的从中体会到其中蕴藏的一种做人的道理。

    8.7K91

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

    1、假如中断上下文中调用 schedule ,此时获取的 struct thread info 数据结构是发生中断时该进程栈信息,而不是中断上下文调用 schedule 时任何信息。...这就导致再也无法返回中断上下文中调用 schedule 的地方。...2、中断上下文处于关中断中,需要发送个 EOI 通知 GIC 中断处理结束,GIC 和CPUinterface 才会进入下一次中断处理。如果中途 schedule,那么整个系统的中断都会被屏蔽掉。...对于这类中断linux kernel一套复杂的机制来处理,你可以通过command line参数(noirqdebug)来控制开关该功能。...当发生了一个中断,但是没有被处理(两种可能,一种是根本没有注册的 specific handler,第二种是 handler,但是 handler 否认是自己对应的设备触发的中断),怎么办?

    5.4K20

    Linux系统中断的硬件框架

    资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...中断控制器多种实现,比如: STM32F103中被称为NVIC:Nested vectored interrupt controller(嵌套向量中断控制器) ARM9中一般是芯片厂家自己实现的...,没有统一标准 Cortex A7中使用GIC(Generic Interrupt Controller) CPU CPU每执行完一条指令,都会判断一下是否中断发生了。...要注意的是,这些寄存器很多个,比如ISER0、ISER1等等。里面的每一位对应一个中断。...3.3.2 EXTI GPIO引脚可以向CPU发出中断信号,所有的GPIO引脚都可以? 不是的,需要在EXTI控制器中设置、选择。 GPIO引脚触发中断的方式是怎样的?

    4.5K40

    Linux中断下半部实现机制

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

    3.2K10
    领券