首页
学习
活动
专区
圈层
工具
发布

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

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间 就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3) 中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断 除外。...= 0, /* 优先级高的tasklets */ TIMER_SOFTIRQ, /* 定时器的下半部 */ NET_TX_SOFTIRQ, /* 发送网络数据包 */ NET_RX_SOFTIRQ.../* 接收网络数据包 */ BLOCK_SOFTIRQ, /* BLOCK装置 */ BLOCK_IOPOLL_SOFTIRQ, TASKLET_SOFTIRQ, /* 正常优先级的...当大量软中断出现的时候,内核会唤醒一组内核线程来处理。 这些线程的优先级最低(nice值为19),这能避免它们跟其它重要的任务抢夺资源。

3.9K40

NVIC 中断优先级管理详解

1.NVIC(内嵌向量中断控制器) STM32系列总共有84个中断,其中我用的STM32F103系列的板子也有60个中断,可想而知STM32一定有一个中断的管理机制来管理这么多中断,使能中断并且配置相关中断的优先级...,这就是NVIC的工作 优先级高的中断可以打断优先级低的中断,这样一个中断执行的时候被另外中断给打断,这个中断执行完再执行上一个中断,形成中断之间的嵌套,或许这就是NVIC 名字为内嵌向量中断控制器来源...NVIC中对于每个中断需要设置 抢占优先级 和 响应优先级(又称子优先级),很明显多个中断会先比较 抢占优先级,抢占优先级相同的比较响应优先级,这里值得注意的是 高抢占优先级能够打断低抢占优先级的,但是相同抢占优先级的高响应优先级不能打断低响应优先级...中断分组表 中断优先级分组 分配结果 抢占优先级取值 响应优先级取值 0 0位抢占优先级,4位响应优先级 0~0 0~15 1 1位抢占优先级,3位响应优先级 0~1 0~7 2 2位抢占优先级,2位响应优先级...0~3 0~3 3 3位抢占优先级,1位响应优先级 0~7 0~1 4 4位抢占优先级,0位响应优先级 0~15 0~0 提示:我们最好一个程序就用就只指定一个中断分组,否则容易混肴!

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

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

    对应I/O APIC和local APIC的组合,其连接方式见下图 ? 针对X86中断控制器硬件和linux对这些硬件的初始化,在《interrupt in linux》中有很详细的描述。...4、 如果该中断优先级高于当前CPU正在执行的中断,且当前CPU没有屏蔽中断(按照X86和LINUX的实现,这时是屏蔽了中断的),则该高优先级中断会中断当前正在执行的中断(置ISR位,并开始执行),低优先级中断会在高优先级中断完成后继续执行...2、 中断优先级 对应通过local APIC发送到CPU的中断,按照其vector进行优先级排序: 优先级=vector/16 数值越大,优先级越高。...Local APIC中还有一个关于中断优先级的寄存器TPR(task priority register)寄存器:用于确定打断线程执行需要的中断优先级级别,只有优先级高于设置值的中断才会被CPU执行 (...总结 中断的使能状态 1、 在local APIC层次(当前CPU),一个中断正在处理的时候,不会有相同的中断或者优先级低于该中断的其它中断来打断当前中断的执行;但是高优先级中断可以打断低优先级中断。

    9.5K31

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

    中断可以指定给单个CPU,或者一组CPU,或者所有的CPU(相当于广播)。 动态分配 IRQ请求被发送给正在运行低优先级进程的处理器的私有APIC中断控制器上。...通俗地说,就是哪个处理器正在运行低优先级任务,IRQ请求就发送给谁。 每个私有APIC都有一个可编程任务优先级寄存器,用来保存当前运行任务的优先级。...如果有多个CPU拥有相同的最低任务优先级,则使用仲裁技术分配中断请求。根据仲裁,每个CPU被分配一个不同的优先级(0-15,数字越小,优先级越大),这个优先级存储在私有APIC的任务优先级寄存器中。...然后通过APIC总线发送给目标APIC,该APIC就会给自己的CPU发送一个相应的中断。 CPU间的中断(简称IPI)是多核系统一个重要组成部分。Linux有效地利用它们,在CPU之间传递消息。...其实对于Linux来说,只使用了supervisor和user两种特权等级。所以中断应该都是在supervisor特权等级下运行。

    2.8K10

    【STM32】NVIC中断优先级管理(中断向量表)

    NVIC的核心功能是中断优先级分组、中断优先级的配置、读中断请求标志、清除中断请求标志、使能中断、清除中断等,它控制着STM32中断向量表中中断号为0-59的60个中断!!...STM32中断优先级分组 中断优先级分组寄存器 这60个中断,怎么管理呢?这就涉及到STM32的中断分组。...介绍一下抢占优先级、响应优先级的区别: 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的; 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断; 抢占优先级相同的中断,当两个中断同时发生的情况下...,哪个响应优先级高,哪个先执行; 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行; 除此之外有两点需要注意: 打断的情况只会与抢占优先级有关, 和响应优先级无关!...中断优先级设置寄存器 分组设置好了之后,怎么设置单个中断的抢占优先级和响应优先级?

    4.8K41

    FreeRTOS 中断与任务优先级关系及中断延迟处理(建议收藏!!!)

    二、中断与任务优先级关系 (一)理论概述 在 FreeRTOS 环境下,中断优先级高于任务优先级是一个基本原则。...当一个中断发生时,无论当前正在执行的任务优先级多高,处理器都会立即暂停任务执行,转而进入中断服务程序(ISR)处理中断。...(二)代码示例 以下是一个简单的代码示例,用于演示中断与任务优先级关系。假设我们有一个简单的嵌入式系统,其中包含一个按键中断和两个任务:一个高优先级任务和一个低优先级任务。...只有在中断处理完成后,才会根据任务优先级来决定是继续执行高优先级任务还是低优先级任务。 三、中断的延迟处理 (一)理论概述 在某些情况下,硬件中断的处理可能非常耗时。...如果在中断服务程序中直接处理所有事务,可能会导致其他低优先级中断无法及时响应(因为高优先级中断服务程序执行期间会屏蔽低优先级中断),同时也会使任务长时间得不到执行,导致系统出现卡顿现象。

    1K11

    Linux中断 - IDT

    中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...传统系统调用相关 IDT 的设置 Linux系统启动过程中内核压解后最终都调用到start_kernel, 在这里会调用trap_init, 然后又会调用idt_setup_traps: void...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int...__init idt_setup_apic_and_irq_gates(void) { int i = FIRST_EXTERNAL_VECTOR; void *entry;...idt_setup_from_table(idt_table, apic_idts, ARRAY_SIZE(apic_idts), true); for_each_clear_bit_from

    8.6K10

    STM32中断优先级NVIC

    同时,对每个中断设置一个抢占优先级和一个响应优先级, 2^4 = 16级可编程的中断优先级 抢占优先级 & 响应优先级区别 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的 抢占优先级相同的中断...,高响应优先级不可以打断低响应优先级 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行 如果两个中断的抢占优先级和相应优先级都是一样的话,则看哪个中断先发生就先执行 举例...假定设置中断优先级组为2,然后设置中断3(RTC中断)的抢占优先级为2,响应优先级为1。...中断6(外部中断0)的抢占优先级为3,响应优先级为0。...中断7(外部中断1)的抢占优先级为2,响应优先级为0 那么这3个中断的优先级顺序为:中断7 > 中断3 > 中断6 特别说明 一般情况下,系统代码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组之后一般不会再改变分组

    1.7K10

    xv6(4) 中断理论部分

    APIC 上述就是中断控制器 $PIC$ 的内容,PIC 只用于单处理器,对于如今的多核多处理器时代,PIC 无能为力,所以出现了更高级的中断控制器 APIC ,APIC($Advanced$ $Programmable...这个机制使得操作系统能够暂时屏蔽低优先级中断,防止打扰高优先级的处理。...如果优先级别设置为 15,则不会接受任何中断,如果优先级别设置为 0,表示接受所有中断,这也是 $Linux$ 设置的默认值。...中断完成,接着原任务执行 软件中断 最后这一部分简单说说软件中断($Software$-$Generated$ $Interrupts$),注意软件中断和 $Linux$ 里面上下半部分中的软中断机制是两个不同的概念...这里软件中断指的就是 $INT$ $n$ 指令来模拟一个 $n$ 号中断。以前 $Linux$ 中系统调用就是使用 $int$ 0x80 来实现的。

    87100

    (十二)STM32——NVIC中断优先级管理

    特点 数值越小所代表的优先级就越高。 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。...而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。...例子         假定设置中断优先级组为 2,然后设置中断 3(RTC_WKUP 中断)的抢占优先级为 2,响应优先级为 1。中断 6(外部中断 0)的抢占优先级为 3,响应优先级为 0。...中断 7(外部中断 1)的抢占优先级为 2,响应优先级为 0。那么这 3 个中断的优先级顺序为:中断 7>中断 3>中断 6。中断 3 和中断 7 都可以打断中断 6 的中断。...IP[81]~IP[0]分别对应中断 81~0。而每个可屏蔽中断占用的 8bit 并没有 全部使用,而是只用了高 4 位。这 4 位,又分为抢占优先级和响应优先级。抢占优先级在前, 响应优先级在后。

    2.9K21

    聊聊 Linux 中断机制

    我没有查到中断到底是何时引入的,但是从 Linux 问世以来就已经有了,而且 Linux 是基于 UNIX 开发的,可以认为 UNIX 就已经引入中断机制了,而且换个角度来说,UNIX 作为如此著名的操作系统...不过真实的情况是,计算机无时无刻都在发出 IRQ,所以中断控制器经常会收到很多 IRQ,甚至有可能 CPU 正在执行中断过程的同时 PIC 还收到了 IRQ,这时中断控制器需要对这些 IRQ 排出一个响应优先级...PIC 更多是适用于单核 CPU ,对于多核 CPU 来说并不适用,适用于多核 CPU 的是 APIC,APIC 我们后面简单提到一些,不过目前还是以 PIC 为主,因为 Linux 0.11 用的是...通过中断判优选择,芯片将当前最高优先级的中断请求作为中断服务对象,并通过 INT 请求通知 CPU 外中断请求到来,然后根据中断号执行中断处理程序。...对于 Linux 内核来说,中断信号分为两类:硬件中断和软件中断,每个中断是由 0 - 255 之间的一个数字来标识。

    2.1K20

    Linux 中断处理浅析

    最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....可以看出, 软中断与中断的模型很类似, 每个CPU有一组中断号, 中断有其对应的优先级, 每个CPU处理属于自己的中断. 最大的不同是开中断与关中断....而第二部分开中断情况下的进行的处理过程一般是由tasklet机制来完成的. tasklet是由软中断引出的, 内核定义了两个软中断掩码HI_SOFTIRQ和TASKLET_SOFTIRQ(两者优先级不同...据说在montavista(一种嵌入式实时linux)中, 将内核的中断机制做了修改. (某些中断的)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题....工作队列 linux基线版本的内核在解决上述问题上, 提供了workqueue机制.

    9K80

    x86中断和中断虚拟化

    就来就是不同的事件,如时钟中断/网卡中断/CPU间中断,中断有优先级之分,高优先级和低优先级的中断同时来,中断控制器负责把高优先级的中断交给CPU,CPU可以选择屏蔽(mask)中断,不让中断再打断自己的执行流...还有中断之间优先级的逻辑处理也要由中断控制器来处理。中断控制器要处理这么复杂的逻辑,它需要信息,这些信息来自于哪里?来自于CPU。...外设中断先到了IOAPIC,它根据Redirection Table Entry把中断路由到不同CPU的LAPIC,可以静态配置或者动态调整,它根据所有CPU的TPR选择优先级最低的CPU。...中断有优先级之分,中断处理程序不可重入,所以CPU要把自己正在处理的中断以及优先级更低的中断都要mask掉,CPU处理中不可以block,中断处理的过程要快,否则一些中断信号就发送不到CPU了,那代表着...CPU处理完这个中断就开中断,再告诉中断控制器这个中断处理完了,中断控制器就可以把这个中断从自己的队列中清除了,接着投递其它优先级更低的中断。

    3.3K10

    STM32中断设置以及中断优先级设置三步曲

    ISER用于使能中断,ICER用来清除中断,IP用来设置中断优先级。   ...其次,我们了解一下中断优先级,中断优先级寄存器NVIC_IPRx,本寄存器宽度为8位,原则上每个外部中断可配置的优先级为0~255,实际上精简了,只用到了它的高4位。...这4位,又被分成了抢占优先级和响应优先级两组,然后,中断优先级有分为以下几种情况:   1、抢占优先级不同,会涉及到中断嵌套,抢占优先级高的会优先抢占优先级低的,优先得到执行。...(例如:两个中断同时响应,这里就会先执行响应优先级高的那个中断)(注意:优先级数字越小,优先级越高)   3、抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高。...(硬件中断编号从中断向量表当中查看)   中断优先级分组,因为中断优先级只使用了高4位,所以,中断优先级的分组分别有以下几种情况: 03.jpg   最后,总结一下中断编程的三步曲:   第一步:使能外设某个中断

    3.1K10

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

    表4-2 Linux中断向量表 中断线号 使用范围 0–19 不可屏蔽中断和异常 20–31 为Intel保留 32–127 外部中断 128 系统调用专用 129–238 外部中断 239 APIC定时器中断...240 APIC温度中断 241–250 保留 251–253 CPU之间的中断 254 APIC错误中断 255 APIC伪中断 对于IRQ可配置的设备,有三种方法选择IRQ中断请求线: 通过跳线帽...除了8259A芯片之外,Linux还支持其它的PIC控制器,比如SMP IO-APIC、Intel PIIX4内部的8259中断控制器、SGI的Visual Workstation Cobalt (IO...也就是初始化其中断重定向表(24项),然后所有来自I/O设备的IRQ就可以被中继到各个CPU上,分配原则是最低优先级优先原则。...当然也可以将中断控制器中的TPR(任务优先级寄存器)写入相同值,从而公平地对待每个CPU,按照循环的方式分配IRQ。一旦初始化完成,内核就不能再修改这个值了。

    3.7K20

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

    这篇文章以按键为例子讲解linux的中断原理,中断的架构,中断的实现。 在我们的开发中,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...Linux的中断原理: 中断:处理器异常的一种,它是一种特殊的电信号,用硬件发给处理器,处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。...Linux中断的相关函数: 1、注册中断函数: 中断处理函数结构: typedef irqreturn_t (*irq_handler_t)(int, void*); 注册中断函数:int request_irq...dev:与request_irq的参数dev必须一致,将request_irq指定的dev传递给这个参数; Linux中断处理分析: 第一种方式:应用层的读,不管什么情况下,都会返回。...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。

    6.2K10
    领券