【内核】03.中断机制

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

中断机制

结合【ARM中的中断和异常】【Linux内核驱动Interrupt子系统】一起看

注意下图中的流程,函数和注意点 alt

25.Linux中断机制和普通中断机制的区别

相同点:中断上下文切换,保存现场,中断向量表跳转,中断处理程序,恢复现场等

Linux特有的:上下半部

26.Linux中断的响应执行流程?

cpu接受中断->保存中断上下文->经由中断向量表跳转跳转到中断处理程序->执行中断上半部->执行中断下半部->恢复中断上下文。

27.硬中断 / 软中断是什么?有什么区别?

一般是Linux中这样说,和ARM中的中断和异常略有区别

硬中断

  1. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的 IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通 常是内核中的一个子程序,而不是一个独立的进程)。

  2. 处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况, 就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断。)。

  3. 硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。

  4. 对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程来运行。它的存在是为了让调度代码(或称为调度器)可以调度多任务。

软中断

  1. 软中断的处理非常像硬中断。然而,它们仅仅是由当前正在运行的进程所产生的。 2. 通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设 备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不 同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程 之间产生。并且调度过程通常和磁盘I/O的方式是相同。
  2. 软中断仅与内核相联系。而内核主要负责对需要运行的任何其他的进程进行调度。一些内核允许设备驱动的一些部分存在于用户空间,并且当需要的时候内核也会调度这个进程去运行。
  3. 软中断并不会直接中断CPU。也只有当前正在运行的代码(或进程)才会产生软中断。这种中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求。有一个特殊的软中断是Yield 调用,它的作用是请求内核调度器去查看是否有一些其他的进程可以运行。

区别

  • 软中断是执行中断指令产生的,而硬中断是由外设引发的。

  • 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。

  • 硬中断是可屏蔽的,软中断不可屏蔽。

  • 硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。

  • 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。

28.Linux中断为什么要区分上半部和下半部?

在Linux中,中断通常被划分为上半部(也称为快速路径)和下半部(也称为慢速路径),主要是为了提高系统的性能和可靠性。

具体来说,当内核响应一个中断时,它首先会执行上半部的中断处理程序,该程序通常是一些轻量级的操作,如保存寄存器、更新硬件状态等。上半部的中断处理程序通常需要在短时间内完成,以便尽快响应其他中断和系统调用。

下半部的中断处理程序则是一些较重的操作,如磁盘I/O、网络协议栈等。这些操作通常需要较长时间才能完成,如果将它们放在中断处理程序中,会导致中断响应时间过长,影响系统的性能和可靠性。

因此,在Linux中,内核将中断处理程序分成上半部和下半部,上半部的中断处理程序通常在中断上下文中执行,而下半部的中断处理程序则延迟到后续的软中断或工作队列中执行,以避免中断响应时间过长,提高系统的性能和可靠性。

29.中断上半部的编写中应该注意什么问题?

在Linux内核编写中,中断处理程序通常分为上半部和下半部。上半部是指在中断上下文中执行的代码,而下半部是在稍后的时间以不同的上下文中执行的代码(如软中断、工作队列等)。下面是在编写中断上半部时需要注意的一些问题:

1. 快速执行: 中断上半部应该尽可能地快速执行,以确保及时响应硬件中断。避免在中断上下文中进行长时间的计算或阻塞操作,因为这可能会导致系统的不稳定性。

2. 延迟敏感操作: 尽量避免在中断上半部执行可能引起延迟的操作,如内存分配、锁操作等。这些操作可能会阻塞其他中断的响应,影响系统的实时性。

3. 共享资源: 如果中断处理程序需要访问共享资源,必须采取适当的同步机制,以防止竞态条件和数据损坏。使用自旋锁、原子操作等来保护共享数据。

4. 避免睡眠: 在中断上下文中,绝对不要进行睡眠操作。这会导致死锁和系统挂起,因为中断上下文无法被调度器抢占。

5. 延迟工作: 如果需要执行耗时的操作,可以将这些操作移到中断的下半部,例如使用工作队列或定时器。

6. 最小化上下文切换: 避免频繁的上下文切换,因为这会增加处理器开销。中断处理程序应尽量保持简单,避免频繁地切换到用户态。

7. 硬件处理: 理解硬件中断的工作原理,包括中断向量、中断控制器等,以便正确地配置和处理中断。

8. 错误处理: 考虑异常情况,如中断丢失、重复中断等,确保编写健壮的错误处理代码。

9. 资源释放: 如果在中断上半部分配了资源(如内存),必须确保在适当的时机释放这些资源,以避免内存泄漏。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

【嵌入式八股】嵌入式Linux 文章被收录于专栏

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇 4.嵌入式Linux【本专栏】 (建议PC端查看)

全部评论
点赞 回复 分享
发布于 2023-04-02 09:38 辽宁

相关推荐

4 7 评论
分享
牛客网
牛客企业服务