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

被抢占的中断处理程序会发生什么?

被抢占的中断处理程序会发生什么?

当一个中断处理程序被抢占时,它将被强制停止执行,并将控制权返回给操作系统。这通常是因为操作系统需要执行更高优先级的任务或处理其他中断。被抢占的中断处理程序可能会在稍后的时间重新开始执行,具体取决于操作系统的调度策略。

在被抢占的中断处理程序被强制停止执行之前,它应该完成以下操作:

  1. 保存当前的上下文:中断处理程序应该保存其当前的寄存器和栈状态,以便在稍后恢复执行时可以从中断点继续执行。
  2. 处理中断:中断处理程序应该处理与中断相关的任务,例如更新设备状态或记录日志等。
  3. 恢复上下文:在完成中断处理后,中断处理程序应该恢复其之前保存的寄存器和栈状态,以便可以在稍后继续执行。

总之,被抢占的中断处理程序会导致当前正在执行的中断处理程序被强制停止,并将控制权返回给操作系统。这种情况通常是由于操作系统需要执行更高优先级的任务或处理其他中断而发生的。被抢占的中断处理程序可能会在稍后的时间重新开始执行,具体取决于操作系统的调度策略。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

处理、编译和汇编这些步骤程序发生变化

现在大多数程序都是在IDE上进行开发,预处理、编译、汇编和链接这些过程都有编译器已经设定完成,而实际程序在这个过程发生什么,我们就无从得知了。...但是作为程序员,我们有必要去了解在这个过程中我们程序发生了哪些变化。 下面就详细描述每一个步骤发生什么。...参考《程序自我修养》 预处理 1.将所有的#define删除,宏定义进行替换。 2.处理所有条件预编译指令,比如#ifndef ,#define,#if,#elif等。...gcc main.c -E -o main.i 可以看到,此时main.i文件相对main.c大了许多,这是因为预处理阶段展开了头文件,大量库函数声明即路径写入到main.i文件中,由于...我们重点关注一下,宏定义是否替换、注释是否被删除、以及条件编译指令是否被删除。 对照我们上边写出程序,可以看出。

64530

Linux系统驱动之GIC驱动程序中断处理流程

: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 GIC驱动程序中断处理流程...一级中断控制器处理流程 2. 多级中断控制器处理流程 参考资料: linux kernel中断子系统之(七):GIC代码分析 使用逐步演进方法才能形象地理解。 1....发生UART中断程序从GIC中读取寄存器知道发生了32号中断,通过GIC irq_domain可以知道virq为16 调用irq_desc[16]中handleA函数,它作用是调用action...多级中断控制器处理流程 假设GPIO模块下有4个引脚,都可以产生中断,都连接到GIC33号中断 GPIO也可以看作一个中断控制器,对于它4个中断 对于GPIO模块中0~3这四个hwirq,一般都会一下子分配四个...按下KEY时: 程序从GIC中读取寄存器知道发生了33号中断,通过GIC irq_domain可以知道virq为16 调用irq_desc[16]中handleB函数 handleB

2.2K20
  • Linux内核24-内核同步理解

    处理完老板最后一个请求后,服务员也可能决定是临时性地放弃之前顾客,而迎接新顾客。 上面的服务员就非常类似于处于内核态代码执行。如果CPU用户态程序占用,服务员认为是空闲。...让我们举例说明抢占式内核和非抢占式内核区别: 假设进程A正在执行异常处理程序(内核态),这时候中断请求IRQ发生,相应处理程序唤醒高优先级进程B。...如果内核是抢占,进程立即切换;但是,如果内核是非抢占,进程继续执行,知道进程完成异常处理或自动放弃CPU使用权。...通过上面的规则可以看出,内核只有在执行异常处理程序(尤其是系统调用)时候才能够抢占,而且内核抢占也没有被禁止。所以,CPU必须使能中断,内核抢占才能被执行。...因此,内核抢占既可以发生中断处理程序结束时,也可以发生在异常处理程序重新使能内核抢占时(调用preempt_enable()。

    1.1K20

    Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程管理与调度(二十)

    ) 一般来说,用户抢占发生几下情况: 从系统调用返回用户空间; 从中断(异常)处理程序返回用户空间 从这里我们可以看到, 用户抢占发生在用户空间抢占现象....如果内核可以抢占, 那么单处理器系统也像是一个SMP系统 3.3 内核抢占发生时机 要满足什么条件,kernel才可以抢占一个任务内核态呢? 没持有锁。锁是用于保护临界区,不能抢占。...因为kernel是SMP-safe,所以满足可重入性。 内核抢占发生时机,一般发生在: 当从中断处理程序正在执行,且返回内核空间之前。...任务主动放弃CPU使用权 内核抢占,并不是在任何一个地方都可以发生,以下情况不能发生 内核正进行中断处理。...如果在某些重要点上内核停用了硬件中断, 以保证一次性完成相关处理, 那么抢占也是不可能.irqs_disabled检测是否停用了中断.

    5.3K30

    【不是问题问题】为什么复位中断服务程序里面直接调用main函数,难道所有程序都在复位中断里面执行

    这个问题之前一直理所当然,没有深究过,认为就是复位中断服务程序退出后进入到main,实际不然。...【视频版】 https://www.bilibili.com/video/BV1Le411V7jS 【引出问题】 我们这里以MDK,IAR和GCC分别进行说明: (1) MDK处理: main函数确实是在复位中断服务程序里面执行...: 下面是__main具体执行流程,其中调用了main,进入到main后,我们程序就是一个死循环,一般不会退出main去执行exit(): (2)IAR处理: 跟MDK__main类似:...(3)GCC处理: 这个过程是全开源,也是类似流程。...也就是说上电复位或者手动复位,此时复位中断服务器程序就是作为普通程序来执行,已经不再是中断处理机制,就是简单函数跳转到了main里面。

    76440

    Linux驱动实践:中断处理【工作队列】 workqueue 是什么鬼?

    目录 工作队列是什么 驱动程序 编译、测试 别人经验,我们阶梯! 大家好,我是道哥,今天我为大伙儿解说技术知识点是:【中断处理下半部分机制-工作队列】。...这篇文章,我们就通过实际代码操作,来演示一下工作队列(workqueue)使用方式。 工作队列是什么 工作队列是Linux操作系统中,进行中断下半部分处理重要方式!...由于内核默认创建工作队列,是所有的驱动程序共享。 如果所有的驱动程序都把等待处理工作项委托给它们来处理,那么就会导致某个工作队列中过于拥挤。...说明:驱动程序初始化函数 myirq_init 调用了,并且成功注册了 1 号中断处理程序。 此时,按一下键盘上 ESC 键。...操作系统在捕获到键盘中断之后,依次调用此中断所有中断处理程序,其中就包括我们注册 myirq_handler 函数。

    1.9K40

    程序员为什么忧虑自己未来?

    而下文中提到程序员群体也泛指在一线具体执行编码任务程序员,不包含一些高精尖技术岗位专业技术人才或是已经有自己明确职业规划,已经进阶成功工程师。 什么引发了焦虑?...而程序职业特性加剧了这种焦虑,主要表现在以下几方面: 一、程序员职业复利性较低。 什么叫复利性?...很多工程师抱怨产品经理设计产品有问题,逻辑不严密,用起来很别扭。但让工程师做产品,问题一般更多。为什么呢?...随着社区发展,在线教育普及,达到同样熟练度时间越来越短,而热门互联网技术发展是以月计,你需要花费大量时间去学习积累新技术。新人与你差距越来越小,你随时面临超车局面。...我规划是什么? 分析了这么多,我最想表达意思是:所谓稳定,是最大谎言。在高速发展行业,根本没有一个稳定职业。

    91790

    Linux桌面GUI系统调度器应该怎么做才不卡顿呢?

    如此优化之所以可行,有个前提,那就是 程序自己运行到结束输出结果,程序逻辑都是编程的人在编程阶段就确定好了程序运行期间不需要人干涉。批处理程序就是那时产生。...程序自己排队之后,随着程序可能越来越大,执行时间越来越长,程序之间运行时间差异变得巨大,这时便有了 程序调度 需求!比如,让短程序先执行完,避免它等待太久。...考虑一下中断处理,它优先级就比普通进程任何优先级都要高。Linux内核十分明确,中断处理是可以抢占一切,并且确实也发生抢占中断可以抢占任何进程执行进入中断处理函数。...两个思路訇然而出: 为什么不把和中断相关进程处理和该中断关联,让中断返回后,该进程继续保持优高先级从而继续中断相关后续呢?...Windows其实就是把窗口焦点得失事件作为像I/O事件一样作为中断一样事件来处理,同时,既然中断概念泛化,那么和纯硬件中断相反,泛化后中断必须分层,这就有了IRQL概念,任何一个时刻,Windows

    1.8K20

    Go 协作与抢占

    协作式和抢占式这两个理念解释起来很简单:协作式调度依靠调度方主动弃权;抢占式调度则依靠调度器强制将被调度方被动中断。...Goroutine 永远无法抢占,其中创建 Goroutine 执行一个不产生任何调用、不主动放弃执行权死循环。...这就给中断信号带来了麻烦,如果中断信号恰好发生在一些关键阶段(例如写屏障期间),则无法保证程序正确性。这也就要求我们需要严格考虑触发异步抢占时机。...SIGURG 可以不加选择地虚假发生信号。例如,我们不能选择 SIGALRM,因为信号处理程序无法分辨它是否是由实际过程引起(可以说这意味着信号已损坏)。...,当信号处理函数执行结束后,程序再次进入内核空间,进而恢复到中断位置。

    2.1K20

    图解Linux进程调度(一)

    你可以理解成,当CPU在运行某一个进程时候,发生系统调用或者中断暂停进程运行,然后去执行特定处理程序,在执行完处理程序想要恢复进程运行这个时候,就是系统调用返回或中断返回时机;中断是由硬件触发...每当产生定时器中断时候,CPU就会执行中断处理程序: 在滴答定时器中断处理中,我们判断current进程是否需要被抢占,怎么判断?...很明显,这一部分需要具体调度算法来实现,Linux将调度算法实现抽象成调度类 在滴答定时器中断处理中,通过调度类去实现相应计算,然后判断current进程是否需要被抢占,如果需要被抢占,那么就在...函数发生) 在硬件电路有一个滴答定时器,每隔10ms产生一次中断,CPU就处理一次中断。...在滴答定时器中断处理中,通过调度类来检查current进程是否需要被切换,如果需要就设置需要重新调度标志 对于整个操作系统来说,中断和系统调用总是随机且频繁地产生,在中断返回或者系统调用返回地时候,检查

    1.4K20

    无MMU抢占式操作系统抢占工作原理

    包含: 线程基础原理 线程之间抢占 中断抢占线程 中断抢占中断 strongerHuang 1 运行多个线程 1.单核“单线程” 严格来说,单核处理器一次只能执行一条指令,也就是说只能“单线程”。...strongerHuang 3 中断(ISR)抢占 上面在执行过程中,或进行上下文切换时,还可能涉及到一个非常重要内容:中断。...中断处理程序称为ISR(中断服务程序): 中断可能具有不同优先级,例如,如果触发了一些低优先级中断,则当前正在执行线程将暂停,并且ISR获得控制权。...然后,如果触发了某个高优先级中断,则当前正在执行ISR将再次暂停,并为该高优先级中断运行一个新ISR。 这样一来,完成后,控制权将返回到第一个ISR,并且在完成时,也恢复中断线程。...一般有两种方法: 使用中断线程堆栈; 为中断使用单独堆栈空间; 1.使用中断线程堆栈 如果使用中断线程堆栈,就类似如下图: ? 这种情况存在你一个严重问题,你知道是什么吗?

    1.1K20

    OSEK OS介绍

    什么是OSEK/VDX?...OSEK OS处理等级 优先级规则: 中断优先于任务 中断处理级别有一个或多个中断优先级 中断服务具有静态分配中断优先级 中断服务优先级分配取决于实现和硬件架构 对于任务优先级和资源上限优先级,...3)发生中断,导致CPU切换到中断服务 扩展任务(Extended Tasks) Extended Tasks区别于Basic Tasks是可以使用操作系统调用WaitEvent,这可能导致等待状态...03 — 中断处理 处理中断功能(中断服务例程:ISR)分为两类: ISR category 1 这类中断不使用OS服务,当中断执行完成后,程序接着上次被打断地方继续执行,即对任务管理没有影响,...,这时候再次发生调度,执行T2。

    58410

    Linux进程调度器概述--Linux进程管理与调度(十五)

    以及fair_sched_class调度非实时进程(组)是可以调度实体对象, 而stop_sched_class和idle_sched_class 4.2 进程调度 首先,我们需要清楚,什么进程进入调度器进行选择...系统发生调度时机如下 调用cond_resched()时 显式调用schedule()时 从系统调用或者异常中断返回用户空间时 从中断上下文返回用户空间时 当开启内核抢占(默认开启)时,多出几个调度时机...之后章节会放上代码进行详细说明。 系统并不是每时每刻都允许调度发生,当处于硬中断期间时候,调度是系统禁止,之后硬中断过后才重新允许调度。...如果内核检查进程抢占标识设置, 则会在一个关键时刻, 调用调度器来完成调度和抢占工作 4.4 内核抢占和用户抢占 而根据进程抢占发生时机, 抢占可以分为内核抢占和用户抢占, 内核抢占就是指一个在内核态运行进程..., 可能在执行内核函数期间另一个进程取 一般来说,用户抢占发生几下情况: 从系统调用返回用户空间; 从中断(异常)处理程序返回用户空间 内核抢占发生时机,一般发生在: 当从中断处理程序正在执行,且返回内核空间之前

    3.5K20

    RTOS内功修炼记(三)—— 内核到底是如何管理中断

    CPU停止执行当前程序,转而去执行中断处理程序(ISR); ③ 中断处理程序执行完毕,返回断点处,继续执行中断程序; 在执行低优先级中断处理程序时,如果CPU允许中断嵌套,则转而去执行更高优先级中断处理程序...; ③ 使得中断处理程序可以按照中断优先级正常嵌套,不会受任务影响; 这样一来,即使程序中有了RTOS内核,「从中断产生到执行中断处理程序整个过程都和裸机程序没有什么不同」。...中断返回有什么变化 在裸机程序中,中断处理程序(包括嵌套执行)最后执行完都会返回main函数中断处。...这种方法有个缺陷,当中断发生嵌套时候,执行完最高优先级中断处理程序就会跳出去,漏掉所有的低优先级中断处理程序,这是非常危险,如图: ?...② 「RTOS中,较复杂中断处理程序应该设计为一个任务,在中断处理程序中去激活/唤醒该任务执行」。 ③ 禁止在临界段代码中调用各种API,影响系统实时性,还可能会引起系统崩溃。

    2.3K21

    什么泛型让你Go程序变慢

    这可能让你感到奇怪:“哼,那么,当我们想在这些对象上调用方法时,会发生什么?这种方法位置,不可能是 gcshape 一部份!”...](W, []byte), 而 *strings.Builder 无疑满足了这个约束,产生了一个 *uint8 gcshape 如果我们把我们 *strings.Builder 隐藏在一个接口后面,会发生什么...但是生成实例化代码什么样?...与前面生成代码比较,多了很多。上面看到,额外指针解引用,对性能是有影响,想象一下这次更多了 这里发生什么了?...当在对性能敏感情况下处理泛型时,只使用指针而不是接口 不要重写基于接口 API 来使用泛型。考虑到当前实现限制,任何目前使用非空接口代码,如果继续使用接口,其行为将更有预见性,而且更简单。

    28830

    深入理解Linux内核之内核抢占

    但是如果处于一个内核态任务正在运行,这个时候发生中断唤醒了一个高优先级任务,那么这个唤醒任务能否调度执行呢?...当前任务设置了重新调度标志,只是表明不久将来会发生调度,并不是马上发生调度,对于用户任务来说就是中断异常返回用户态前夕发生调度,而对于处于内核态任务来说,想要在内核态抢占当前进程,仅仅置位重新调度标志还不行...0,但是在这些临界区中如果中断唤醒了高优先级任务,中断返回内核态前夕是不能进行调度,所以在这些临界区结束时候检查调度条件是否满足,如果满足进行抢占式调度,从而使得唤醒任务及时响应。...1)中断返回内核态 当开启内核抢占时候,在中断返回内核态前夕,检查当前任务是否设置了重新调度标志且抢占计数器为0,如果都满足,进行抢占式调度。...5.不可抢占内核低延迟处理 下面我们来看下在没有开启内核抢占内核中如何处理低延迟: 我们会看到在一些比较耗时处理中如文件系统和内存回收一些路径会调用cond_resched,它是干什么用呢: 下面是使用这个宏例子

    2.6K21

    FreeRTOS学习笔记 | 基础知识体系梳理

    ,这部分可以看做后台行为;中断服务程序处理异步事件,这部分可以看做是前台行为。...抢占式调度,每个任务都有不同优先级,任务一直运行直到高优先级任务抢占或者遇到阻塞式 API 函数,比如 vTaskDelay。...又比如,如果中断服务程序使一个高优先级任务进入就绪态,中断完成时,中断低优先级任务挂起,优先级高那个任务开始运行。...使用抢占式调度器,使得最高优先级任务什么时候可以得到 CPU 控制权并运行是可知,同时使得任务级响应时间得以最优化。...中断服务程序临界区处理 与任务代码里临界段处理方式类似,中断服务程序里面临界段处理也有一对开关中断函数。

    1.6K20

    Linux内核同步原理学习笔记

    在单处理时候,只有在中断发生时候,或是在内核代码显式地请求重新调度(调用schedule())时,数据才可能并发访问。...增加i(7->8) 增加i(8->9) - 两个原子操作交错执行更本就不可能发生, 因为处理从物理上确保这种不可能。...用户空间可能产生并发地方有: *共享内存 同一个进程两个可执行线程,访问共享内存时可能因为调度程序抢占发生重新调度而并发 *信号 信号处理是异步,如果信号处理程序和进程其他部分共享数据,则有可能并发...它是不是要在两个不同中断处理程序中共享? c.进程在访问数据时可不可能抢占调度程序会不会访问同一数据? d.当前进程是不是睡眠(阻塞)在某些资源上?...e.如果这个函数又在另一个处理器上调度将会发生什么? f.你要对这些代码做什么? 简言之,几乎访问所有的内核全局变量和共享数据都需要某种形式同步方法。

    1.3K20
    领券