2.2 操作系统 中断与异常

一、中断发生的过程和处理流程

硬件触发中断——中断请求处理——中断处理程序调用——中断处理——恢复执行

硬件触发中断:分 内部中断(如除零错误)和 外部中断。

中断请求处理:CPU 根据优先级判断是否响应中断,如果优先级高,CPU会暂停当前任务执行。

中断程序调用:根据中断号从中断向量表找到中断处理程序的入口。

中断处理:执行中断处理程序。

恢复执行:中断处理完毕后,CPU会恢复到被中断的程序执行状态。

二、中断为什么要尽快执行完毕

首先,中断一般是发生了一些关键事件,需要得到快速响应;其次,被中断的程序处于暂停状态,并且关闭了进程调度,会影响系统的响应性能和实时性;最后,中断处理程序如果执行时间过长,可能会导致设备状态超时或失效。

三、中断与异常有何区别?

中断是指外部硬件产生一个电信号从 CPU 的中断引脚进入,打断 CPU 的执行。

异常是指软件运行过程中发生了一些必须作出处理的事件,CPU 自动产生一个陷入来打断 CPU 的执行

四、硬中断与软中断是什么?有什么区别?

1、硬中断

硬件产生,比如:键盘、网卡、磁盘、时钟。每个设备都有自己的 IRQ,硬中断可以直接中断 CPU(通常只会中断一颗 CPU)。

时钟中断,内核会将当前进程挂起,让其他进程运行。其目的是为了让调度器可以调度多个任务。

2、软中断

仅由当前正在运行的进程产生的,由软件触发的中断机制,由软件主动发起。

区别:

软中断由软件产生,硬中断由硬件产生;

软中断的中断号由指令直接给出,硬中断的中断号由中断控制器提供;

硬中断可屏蔽,软中断不可屏蔽

硬中断处理程序,称为上半部,软中断处理硬中断未完成的工作,称为下半部。

五、中断为什么区分上半部和下半部?

这样既可以快速响应,又可以分离耗时操作,还可以提高系统并发度。

六、DMA(直接存储器访问)

DMA (Direct Memory Access) 提供 外设与内存、存储器与存储器、外设与外设、外设与存储器之间 的高速数据传输。DMA 传输是 不需要 CPU 参与数据搬运

工作方式:

1、CPU 配置 DMA 控制器

设定数据源(存储器或外设)

设定数据目的地(存储器或外设)

设定数据大小

设定 DMA 触发条件(如 ADC 采集完成、串口接收完成等)

2、DMA 开始工作

由硬件触发(如 ADC 采样完成、SPI 接收完成等)

或者软件触发(CPU 命令)

3、DMA 自动搬运数据

在不占用 CPU 资源的情况下,把数据搬运到目标地址。

4、DMA 传输完成

可触发中断,通知 CPU 数据已经传输完成,CPU 可以继续后续处理。

七、中断与 DMA 区别

中断需要 CPU 参与,DMA 不需要 CPU 参与。

八、中断能不能睡眠?为什么?下半部可不可以睡眠?

上半部不能,一旦进入中断上下文,就只有更高优先级的中断才能打断当前中断,内核无法进行抢占,如果在中断里睡眠,内核将挂起

下半部可以睡眠,工作队列可以,tasklet 不可以。

工作队列将下半部的任务放到内核线程中执行,由于内核线程有自己独立的进程上下文,拥有完整的内核栈和资源,所以可以在工作队列的处理函数中进行睡眠。

九、当一个异常出现以后,ARM微处理器会执行哪几步操作?

1、将下一条指令的地址存入连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。

2、将 CPSR(当前程序状态寄存器) 复制到相应的 SPSR中。

3、根据异常类型,强制设置 CPSR 的运行模式位。

4、强制 PC 从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序执行。

十、为什么 FIQ 比 IRQ 要快

1、硬件优先级:FIQ 在硬件上优先级更高。

2、专用寄存器:FIQ 有自己专用的寄存器组,不需要像 IRQ 保存和恢复通用寄存器。

3、中断向量表位置,FIQ 的中断向量在末端,可以直接在后面放 FIQ 的中断处理程序,不用进行再次跳转。

十一、中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?

就实时性而言,是中断效率更高。具体采用那种需要看 CPU 资源情况、设备特性、实时性要求。

C++/嵌入式开发 秋招面经 文章被收录于专栏

一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务