当前位置: 首页 > 科技观察

Linux内核如何处理中断

时间:2023-03-12 08:50:09 科技观察

中断是计算机处理数据的关键部分。中断是现代CPU工作方式的重要组成部分。例如:每按一次键盘上的一个键,CPU就会被中断,以便PC读取用户键盘的输入。这个过程发生得如此之快,以至于您感觉不到任何变化或体验受损。此外,键盘并不是唯一导致中断的组件。一般来说,中断CPU的事件有三种:硬件中断、软件中断和异常。在详细介绍不同类型的中断之前,我需要定义一些术语。定义中断请求中断请求(IRQ)是由可编程中断控制器(PIC)发起的,其目的是中断CPU并执行中断服务程序中断服务程序(ISR)。中断服务程序(ISR)是用来处理特定数据的小程序,其具体处理方式取决于中断请求(IRQ)的产生原因。之前运行的进程被中断,直到中断服务例程(ISR)完成运行。过去,中断请求由单独的芯片(中断控制器芯片PIC)处理,I/O设备直接连接到中断控制器(PIC)。中断控制器(PIC)管理各种硬件中断请求(IRQ),并可直接与CPU通信。当中断请求(IRQ)产生时,中断控制器(PIC)向CPU写入数据并触发中断请求引脚(INTR)。今天,中断请求(IRQ)由CPU的高级可编程中断控制器(APIC)部分处理。每个内核都有自己的高级可编程中断控制器。中断的类型正如我前面提到的,中断可以根据其来源分为三种类型。硬件中断当一个硬件设备想要告诉CPU一些数据已经准备好被处理时(例如:当键盘被按下或者一个数据包到达网络接口时),它会发送一个中断请求(IRQ)来告诉CPU数据可用。接下来调用内核启动时设备驱动程序注册的相应中断服务例程(ISR)。软件中断播放视频时,音频和视频同步播放很重要,这样音乐的节奏就不会改变。这是通过软件中断实现的,由称为jiffies的精确定时器系统重复启动。此计时器将同步您的音乐播放器。软件中断也可以通过特殊指令调用来读取或写入数据到硬件设备。当系统需要实时性能时,软件中断变得很重要,例如在工业应用中。您可以在LinuxFoundation文章中找到更多相关信息:面向嵌入式开发人员的实时Linux简介。异常异常是您以前可能知道的中断类型。当CPU执行某些会导致被零除或页面错误的指令时,任何其他正在运行的程序都将被中断。在这种情况下,您将收到一个弹出窗口的警告,或者在控制台输出中看到**segmentationfault(coredumped)**。但并非所有异常都是由指令错误引起的。异常可以进一步分为Fault、Trap和Abort。错误:错误是系统可以纠正的异常。例如,当进程试图访问已换出到磁盘的页面时。当请求的地址在进程的地址空间中并且满足访问权限时,如果页面不在内存(RAM)中,则会产生中断请求(IRQ),并启用缺页异常处理程序来加载所需的页面到内存中。如果操作执行成功,程序将继续运行。陷阱:陷阱主要用于调试。如果您在程序中设置了断点,则您插入了一条触发陷阱执行的特殊指令。陷阱可以触发上下文切换,让你的调试器读取和显示局部变量的值。然后程序可以继续运行。陷阱也是运行系统调用的方式(比如杀死一个进程)终止:终止是由于硬件错误或系统表中的值不一致造成的。Abort不报告导致异常的指令的位置。这是最严重的中断,terminate会调用系统的terminate异常处理器来结束引发异常的进程。动手中断请求在高级可编程中断控制器(APIC)中按优先级排序(0是最高优先级)。前32个中断(0~31)是CPU指定的固定顺序。您可以在OsDev例外页面上找到它们的概述。可以用不同的方式分配后续中断请求。中断请求(IRQ)和中断服务程序(ISR)的对应关系记录在中断描述符表(IDT)中。从0到256的IRQ向量在Linux中定义。要打印出系统上已注册的中断,请打开一个终端并输入:cat/proc/interrupts,您应该会看到如下内容:Interruptsregisteredinkernelversion5.6.6(StephanAvenwedde,CCBY-SA4.0)每列从左到右依次为:中断向量号、每个CPU的中断发生次数(0~n)、硬件来源、硬件来源通道信息、引起中断请求的设备名称。在表的末尾,有一些非数字中断。它们是特定于体系结构的中断,例如中断请求(IRQ)编号为236的本地定时器中断(LOC)。其中一些在Linux内核源代码树的LinuxIRQ向量布局中指定。特定于体系结构的中断(StephanAvenwedde,CCBY-SA4.0)要实时获取表格,请运行如下命令:watch-n1"cat/proc/interrupts"总结了硬件的正确中断请求(IRQ)处理,驱动程序和软件之间的正常交互是必要的。幸运的是,Linux内核做得非常好,PC的普通用户几乎不会注意到内核的整个中断处理过程。中断相当复杂,本文只是对它们的概述。那些想要深入研究该主题的人可以阅读LinuxInside电子书(CCBY-NC-SA4.0)和Linux内核教程存储库。【小编推荐】Linux5.10出现Btrfs性能急剧下降的问题LinuxShell习题100篇视频教程第17部分视频教程Linux网络服务器实战视频教程Redhat6.4LinuxShell习题100篇视频课程第15部分视频教程Linux网络基础与网络命令_MySQL数据库学习入门培训视频课程14