中断是计算机处理数据的关键部分。中断是现代CPU工作方式的重要组成部分。例如:每次按键盘上的一个键,CPU都会中断,以便PC可以读取用户的键盘输入。这个过程进行得如此之快,以至于您在使用过程中不会感到任何改变或损坏。此外,键盘不是引起中断的唯一组件。一般来说,会导致CPU中断的事件有三种:硬件中断,软件中断和异常。在详细介绍不同类型的中断之前,我需要定义一些术语。定义中断请求的中断请求(IRQ)是由可编程中断控制器的可编程中断控制器(PIC)发起的,其目的是中断CPU并执行中断服务程序(ISR)。中断服务程序(ISR)是用于处理特定数据的小程序,其特定处理方法取决于中断请求(IRQ)的原因。在中断服务程序(ISR)运行之前,先前正在运行的进程将被中断。如今,中断请求(IRQ)由CPU的高级可编程中断控制器(APIC)部分处理。每个内核都有其自己的高级可编程中断控制器。中断的类型正如我在上一篇文章中提到的,根据中断的来源,可以将中断分为三种类型。硬件中断当硬件设备要告诉CPU一些要处理的数据准备就绪时(例如:当按下键盘或数据包到达网络接口时),它将发送一个中断请求(IRQ)来告知CPU数据可用。接下来,调用内核启动时设备驱动程序注册的相应中断服务例程(ISR)。软件中断播放视频时,音频和视频同步播放非常重要,这样音乐的速度就不会改变。这是通过软件中断来实现的,软件中断是由精确的计时器系统(称为“抖动”)反复启动的。此计时器将同步您的音乐播放器。也可以通过特殊指令来调用软件中断,以将数据读取或写入硬件设备。当系统需要实时时(例如,在工业应用中),软件中断将变得很重要。您可以在Linux Foundation文章:面向嵌入式开发人员的实时Linux简介中找到更多信息。异常异常是您之前可能知道的中断类型。当CPU执行某些指令将导致被零除或页面错误时,任何其他正在运行的程序都将被中断。在这种情况下,会弹出一个窗口提醒您,或者您会在控制台输出中看到** segmentationfault(coredumped)**。但是,并非所有异常都是由指令错误引起的。异常可以进一步分为故障,陷阱和中止。错误:错误是系统可以纠正的异常。例如,当进程尝试访问已换出到硬盘的页面时。当请求的地址在进程的地址空间中并且满足访问权限时,如果页面不在内存(RAM)中,则会生成中断请求(IRQ),并且将启用页面错误异常处理程序将所需的页面加载到内存。如果操作成功执行,程序将继续运行。陷阱:陷阱主要用于调试。如果在程序中设置了断点,则插入了一条特殊的指令,该指令可以触发陷阱的执行。陷阱可以触发上下文切换,以允许调试器读取和显示局部变量的值。该程序此后可以继续运行。陷阱也可以通过运行系统调用(例如杀死进程)来终止:终止是由硬件错误或系统表中的值不一致引起的。终止将不会报告导致异常的指令的位置。这是最严重的中断,终止将调用系统的终止异常处理程序以终止导致异常的进程。动手练习中断请求在高级可编程中断控制器(APIC)中按优先级排序(0是最高优先级)。前32个中断(0〜31)是由CPU指定的固定序列。您可以在OsDev例外页面上找到它们的概述。随后的中断请求可以以不同的方式分配。中断描述表interruptdescriptortable(IDT)记录了中断请求(IRQ)和中断服务程序(ISR)之间的对应关系。在Linux中定义了从0到256的IRQ向量。要打印出在系统中注册的中断,请打开终端并输入:cat / proc / interrupts。您应该看到与以下f类似的结果