中断的原理

合集下载

中断和dma工作原理

中断和dma工作原理

中断和dma工作原理1. 中断中断是计算机系统中一种非常重要的机制,它可以帮助处理器在执行程序的同时处理其他任务。

在计算机运行过程中,当发生一些特殊的事件时,比如外设发出信号、软件产生异常等,CPU就会暂停当前的工作,转而去执行一些特定的程序,这个就是中断。

中断可以让CPU 完成对当前任务的暂停并转而处理其他任务,保证了系统的实时性、可靠性和可扩展性。

2. DMADMA是Direct Memory Access的缩写,直接内存访问,是一种无需CPU干预的数据传输技术。

和中断机制不同,DMA技术可以用来解决大数据传输、高速数据采集等计算机系统中的瓶颈问题。

DMA技术通过预设的高速通道,直接控制外部设备与内存之间的数据传输。

相比于中断机制,DMA技术能够避免CPU等待时间的浪费,提高了数据传输的效率。

3. 中断和DMA的区别中断是由特定事件触发并暂停当前工作以执行其他任务,而DMA 技术则是无需CPU干预地控制外部设备与内存之间的数据传输。

中断机制可以解决一些对实时性有要求的事件处理,DMA技术则可以用来解决大数据传输、高速数据采集等计算机系统中数据传输的瓶颈问题。

4. 中断和DMA的工作原理中断的具体操作方式和实现方法和硬件和操作系统架构有关,但是大体流程大致相同。

当事件发生时,CPU会根据当前运行的进程和中断优先级等信息去调用相应的中断处理程序,从而响应和处理触发事件。

中断处理程序执行完毕后,CPU会回到原任务的位置继续执行。

DMA的工作方式则是整个过程被分为了三个步骤:通道的设置、数据传输、中断的设置。

DMA传输的流程分为如下几个步骤:首先,CPU 将要传输的数据拷贝到DMA缓冲区中;然后,DMA将从外部设备中读取数据并传输到内存对应地址的缓冲区;最后,DMA传输完成后会发送一个DMA传输结束的中断,通知CPU数据已经传输完毕。

因此,中断机制和DMA技术是计算机系统中非常重要和常用的技术手段,相较之下每种技术都有其适用性,可根据实际应用需求或具体情况而使用。

中断原理实验

中断原理实验

中断原理实验一、什么是中断?中断是计算机中的一种机制,用于打破程序的正常执行流程,以响应特定事件的发生。

当发生中断时,计算机会暂停当前的任务,转而执行一个中断处理程序,处理完中断事件后再返回原来的任务。

二、中断原理中断原理是计算机操作系统的核心概念之一,其基本原理是通过硬件或软件的方式,在计算机的执行过程中插入一个中断请求信号,使得CPU停止当前任务的执行,转而执行中断处理程序。

中断可以分为硬件中断和软件中断两种:2.1 硬件中断硬件中断是由计算机硬件设备发送给CPU的信号,表示某个事件已经发生。

例如,键盘的按键、鼠标的移动等都可以触发硬件中断。

硬件中断的处理过程如下: 1. 硬件设备发送中断请求信号给CPU。

2. CPU检测到中断请求信号后,中断当前正在执行的任务。

3. CPU保存当前任务的上下文信息,并跳转到预定义的中断向量表中查找中断服务程序的入口地址。

4. CPU开始执行中断服务程序,处理中断事件。

5. 中断服务程序执行完毕后,CPU恢复之前保存的任务上下文,并继续执行原来的任务。

2.2 软件中断软件中断是由程序员主动触发的中断,通过在代码中插入中断指令来进行触发。

软件中断的处理过程与硬件中断类似,区别在于触发的原因不同。

软件中断的处理过程如下: 1. 程序执行到中断指令。

2. CPU检测到中断指令后,中断当前正在执行的任务。

3. CPU保存当前任务的上下文信息,跳转到中断服务程序的入口地址。

4. CPU开始执行中断服务程序,处理中断事件。

5. 中断服务程序执行完毕后,CPU恢复之前保存的任务上下文,并继续执行原来的任务。

三、中断的应用中断机制的应用广泛存在于计算机系统中,它可以实现很多重要的功能,包括以下几个方面:3.1 外设设备的响应计算机可以通过中断机制来响应外设设备的事件,如按键、鼠标、打印机等。

当外设设备有数据需要处理时,可以通过产生中断请求信号,让CPU停止当前任务,转而处理外设设备的数据。

单片机中的中断与定时器的原理与应用

单片机中的中断与定时器的原理与应用

单片机中的中断与定时器的原理与应用在单片机(Microcontroller)中,中断(Interrupt)和定时器(Timer)是重要的功能模块,广泛应用于各种嵌入式系统和电子设备中。

本文将介绍中断和定时器的基本原理,并探讨它们在单片机中的应用。

一、中断的原理与应用中断是指在程序执行过程中,当发生某个特定事件时,暂停当前任务的执行,转而执行与该事件相关的任务。

这样可以提高系统的响应能力和实时性。

单片机中的中断通常有外部中断和定时中断两种类型。

1. 外部中断外部中断是通过外部触发器(如按钮、传感器等)来触发的中断事件。

当外部触发器发生状态变化时,单片机会响应中断请求,并执行相应的中断服务程序。

外部中断通常用于处理实时性要求较高的事件,如按键检测、紧急报警等。

2. 定时中断定时中断是通过定时器来触发的中断事件。

定时器是一种特殊的计时设备,可以按照设定的时间周期产生中断信号。

当定时器倒计时完成时,单片机会响应中断请求,并执行相应的中断服务程序。

定时中断常用于处理需要精确计时和时序控制的任务,如脉冲计数、PWM波形生成等。

中断的应用具体取决于具体的工程需求,例如在电梯控制系统中,可以使用外部中断来响应紧急停车按钮;在家电控制系统中,可以利用定时中断来实现定时开关机功能。

二、定时器的原理与应用定时器是单片机中的一个重要模块,可以用于计时、延时、频率测量等多种应用。

下面将介绍定时器的工作原理和几种常见的应用场景。

1. 定时器的工作原理定时器是通过内部时钟源来进行计时的。

它通常由一个计数器和若干个控制寄存器组成。

计数器可以递增或递减,当计数值达到设定值时,会产生中断信号或触发其他相关操作。

2. 延时应用延时是定时器最常见的应用之一。

通过设定一个合适的计时器参数,实现程序的精确延时。

例如,在蜂鸣器控制中,可以使用定时器来生成特定频率和持续时间的方波信号,从而产生不同的声音效果。

3. 频率测量应用定时器还可以用于频率测量。

中断工作原理

中断工作原理

中断工作原理
中断是计算机中一种重要的工作机制,它允许计算机在执行某个任务时,被其他紧急任务或事件中断,暂时停止当前任务的执行,转而处理新的任务或事件。

中断工作原理为以下几个步骤:
1. 当发生中断事件时,如外部设备的输入、定时器的时间到达等,硬件会将中断请求信号发送到中断控制器。

2. 中断控制器会通过中断向量表来确定中断源的类型,并保存当前的执行状态。

3. 中断控制器会发送一个中断请求到处理器,请求其响应中断。

4. 处理器在当前指令执行完后,会检查中断请求,并根据优先级确定处理的中断优先级。

5. 处理器会执行中断服务程序,即中断处理程序,该程序可以是预定义的,也可以是由操作系统或应用程序提供的。

6. 在完成中断服务程序后,处理器会将中断处理的结果返回给被中断的任务,并继续原先的工作。

中断工作原理的核心思想是允许处理器在执行任务时,根据优先级和紧急程度,及时地处理其他任务或事件,以提高系统的响应速度和效率。

通过中断机制,系统可以在不同的任务之间进行切换,从而使得计算机能够同时处理多个任务,并且能够及时响应外部的事件,如用户的输入、设备的响应等。

总结起来,中断工作原理是通过中断请求信号、中断控制器和处理器之间的协作,实现了对不同任务和事件的快速响应和处理,从而提高了计算机系统的并发性和执行效率。

中断的原理及其应用方法

中断的原理及其应用方法

中断的原理及其应用方法1. 中断的原理中断是计算机系统中常用的一种机制,用于处理系统中的各种事件和异常。

当一个事件发生时,计算机会暂时中止正在执行的程序,并转而执行相应的中断服务程序。

中断的原理主要包括以下几个方面:•中断向量表:中断向量表是一个存储中断处理程序入口地址的表格,每个中断对应一个入口地址。

当一个中断发生时,计算机会根据中断号在中断向量表中查找对应的中断处理程序。

•中断控制器:中断控制器是负责管理和分配中断的硬件设备。

它可以接收多个中断信号,并根据优先级分配给相应的处理器。

•中断服务程序:中断服务程序是响应中断事件的代码段,它会保存当前执行的程序状态,执行相应的处理逻辑,然后返回到中断发生前的状态继续执行。

2. 中断的应用方法2.1 异步通信中断可以用于实现异步通信,当外部设备有数据到达时,可以触发中断,通知处理器进行数据的接收和处理。

这种方式可以避免处理器的资源浪费,提高系统的效率。

2.2 实时任务处理在实时系统中,有一些任务需要以固定的时间响应,例如控制系统中的数据采集、传输和处理。

利用中断机制,系统可以及时地响应外部事件并进行相应的处理,保证实时任务的完成。

2.3 异常处理当程序执行过程中出现异常情况,如除0错、内存溢出等,中断可以及时地对这些异常进行捕捉和处理。

通过中断,系统可以提供相关的错误信息,并采取相应的措施,以确保系统的正常运行。

2.4 设备驱动程序在计算机系统中,各种外部设备都需要通过设备驱动程序与计算机进行通信。

当外部设备发生事件时,可以通过中断机制触发相应的设备驱动程序,以进行数据传输和控制操作。

2.5 多任务处理中断机制还可以用于实现多任务处理,通过在不同任务之间切换,使得系统可以同时执行多个任务。

当一个任务需要等待某个事件发生时,可以进行任务切换,执行其他任务,提高系统的并发性。

3. 中断的使用注意事项•中断处理程序需要尽可能地简洁和高效,以减少对系统性能的影响。

单片机中断原理及应用

单片机中断原理及应用

单片机中断原理及应用单片机中断是一种重要的编程技术,它在嵌入式系统中起到关键作用。

本文将介绍单片机中断的原理以及在实际应用中的一些常见用法。

一、中断的原理中断是一种在程序执行期间由外部事件引发的特殊信号,它会打断正常的程序流程,跳转到中断处理程序进行相应的处理。

单片机中断可以通过硬件或软件触发,根据中断优先级的不同,可以采用优先级编码或轮询方式进行中断请求的处理。

硬件中断通常由外部事件引起,例如按键按下、定时器溢出、串口数据接收等。

当这些事件发生时,单片机会发出中断请求信号,并保存当前的执行状态,然后跳转到相应的中断服务程序进行处理。

处理完毕后,单片机会恢复到被中断的位置继续执行。

软件中断是通过执行特殊的指令触发,常用于在程序中主动请求中断。

软件中断一般用于实现程序间的通信、任务调度等功能。

二、中断的应用1. 外部中断外部中断是单片机中最常见的中断类型之一,它可以响应外部事件的触发。

例如,当用户按下按键时,就可以通过外部中断实现按键检测并进行相应的处理。

外部中断通常用于实现外设的输入功能,如按钮检测、触摸屏输入等。

在外部中断的应用中,首先需要配置外部中断引脚的触发方式和中断服务程序。

当外部事件触发时,单片机会跳转到中断服务程序中执行相应的操作。

在中断服务程序中,可以对输入信号进行处理,如检测按键是否按下、读取触摸屏坐标等,然后根据需求进行相应的响应或操作。

2. 定时器中断定时器中断是单片机中另一个常见的中断类型。

通过定时器中断,可以实现精确的定时任务,如测量时间间隔、产生定时脉冲等。

定时器中断通常用于实现系统时钟、延时、定时采样等功能。

在定时器中断的应用中,首先需要对定时器进行配置以及中断服务程序的编写。

在中断服务程序中,可以进行一系列与时间相关的操作,如更新系统时钟、执行定时任务、控制脉冲输出等。

3. 串口中断串口中断用于处理串口通信中的数据接收或发送中断事件。

单片机通过串口中断可以实现与外部设备的可靠通信,如与PC机的数据传输、与传感器的数据采集等。

中断的基本原理和处理流程。

中断的基本原理和处理流程。

中断的基本原理和处理流程。

中断是计算机中的一个重要概念,它是指CPU在执行程序的过程中,由于内部或外部的原因,需要暂时停止当前正在执行的程序,转而去执行另一段程序,这段程序执行完后,再返回到原来暂停的程序继续执行。

中断的基本原理和处理流程如下:
一、中断的基本原理
中断是一种由硬件或软件引起的、能改变处理器执行顺序的一种机制。

当中断发生时,处理器会停止当前的执行流,跳转到另一个预定义的地址,即中断服务程序(Interrupt Service Routine, ISR)的入口地址,去执行中断服务程序。

中断服务程序执行完毕后,处理器会恢复原来的执行流,继续执行被中断的程序。

二、中断的处理流程
中断请求:中断源向CPU发出中断请求信号。

中断响应:CPU响应中断请求,保护现场,将断点地址及有关状态信息压入堆栈或存入特定的寄存器中,以便在中断服务程序执行完毕后能正确地返回到原来的程序。

中断处理:CPU跳转到中断服务程序入口地址,执行中断服务程序。

中断服务程序负责处理中断事件,完成后需要清除中断标志位,以便CPU能继续响应其他中断。

中断返回:中断服务程序执行完毕后,CPU恢复现场,从堆栈或特定的寄存器中弹出断点地址及有关状态信息,然后返回到
原来的程序继续执行。

需要注意的是,中断的优先级是一个重要的概念。

在多个中断同时发生时,处理器会根据中断的优先级来决定先处理哪个中断。

高优先级的中断可以打断低优先级的中断,但同级或低优先级的中断不能打断高优先级的中断。

中断与回调函数的关系

中断与回调函数的关系

中断与回调函数的关系1. 引言中断是计算机系统中的一种重要机制,用于处理与系统正常执行流程不一致的事件。

回调函数是一种常见的编程技术,用于处理异步事件。

本文将深入研究中断与回调函数之间的关系,并探讨它们在计算机系统中的应用。

2. 中断的概念和原理2.1 中断概念中断是指计算机系统在执行某个任务时,由于发生了某个特定事件而暂时停止当前任务,转而处理这个特定事件。

这些特定事件可以是硬件设备发出的信号,也可以是软件发出的信号。

2.2 中断原理当一个特定事件发生时,硬件会向处理器发送一个中断信号。

处理器会暂停当前任务,并保存当前任务执行状态和上下文信息。

然后转向执行一个预定义好的中断服务程序(Interrupt Service Routine, ISR),该程序负责处理这个特定事件。

当ISR执行完毕后,处理器会恢复之前保存好的上下文信息,并继续执行之前被打断的任务。

3. 回调函数概念和原理3.1 回调函数概念回调函数指被传递给其他函数作为参数,并在该函数内部被调用以完成某个特定任务的函数。

回调函数的作用是将任务的执行权交给调用方,以便异步执行。

3.2 回调函数原理回调函数的原理是通过将一个函数作为参数传递给其他函数,当特定事件发生时,其他函数会调用该回调函数来处理事件。

这种机制使得程序能够异步执行一些任务,而不需要等待特定事件的发生。

4. 中断与回调函数的关系4.1 中断与回调函数之间的联系中断和回调函数都是处理异步事件的重要机制。

中断通过硬件信号触发,而回调函数通过被传递给其他函数来触发。

它们都能够使程序在处理异步事件时能够及时响应,并在处理完成后继续执行之前被打断的任务。

4.2 中断与回调函数之间的区别中断和回调函数在触发机制上有一些区别。

中断是由硬件设备触发,并由处理器响应和处理;而回调函数是由程序员显式地将一个特定任务交给其他代码来完成。

此外,中断通常会导致当前任务被打断并保存上下文信息;而在使用回调函数时,当前任务可以继续执行,并不会被打断。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中断解析一、中断是什么中断的汉语解释是半中间发生阻隔、停顿或故障而断开。

那么,在计算机系统中,我们为什么需要“阻隔、停顿和断开”呢?举个日常生活中的例子,比如说我正在厨房用煤气烧一壶水,这样就只能守在厨房里,苦苦等着水开——如果水溢出来浇灭了煤气,有可能就要发生一场灾难了。

等啊等啊,外边突然传来了惊奇的叫声“怎么不关水龙头?”于是我惭愧的发现,刚才接水之后只顾着抱怨这份无聊的差事,居然忘了这事,于是慌慌张张的冲向水管,三下两下关了龙头,声音又传到耳边,“怎么干什么都是这么马虎?”。

伸伸舌头,这件小事就这么过去了,我落寞的眼神又落在了水壶上。

门外忽然又传来了铿锵有力的歌声,我最喜欢的古装剧要开演了,真想夺门而出,然而,听着水壶发出“咕嘟咕嘟”的声音,我清楚:除非等到水开,否则没有我享受人生的时候。

这个场景跟中断有什么关系呢?如果说我专心致志等待水开是一个过程的话,那么叫声、电视里传出的音乐不都让这个过程“半中间发生阻隔、停顿或故障而断开”了吗?这不就是活生生的“中断”吗?在这个场景中,我是唯一具有处理能力的主体,不管是烧水、关水龙头还是看电视,同一个时间点上我只能干一件事情。

但是,在我专心致志干一件事情时,总有许多或紧迫或不紧迫的事情突然出现在面前,都需要去关注,有些还需要我停下手头的工作马上去处理。

只有在处理完之后,方能回头完成先前的任务,“把一壶水彻底烧开!”中断机制不仅赋予了我处理意外情况的能力,如果我能充分发挥这个机制的妙用,就可以“同时”完成多个任务了。

回到烧水的例子,实际上,无论我在不在厨房,煤气灶总是会把水烧开的,我要做的,只不过是及时关掉煤气灶而已,为了这么一个一秒钟就能完成的动作,却让我死死地守候在厨房里,在10分钟的时间里不停地看壶嘴是不是冒蒸气,怎么说都不划算。

我决定安下心来看电视。

当然,在有生之年,我都不希望让厨房成为火海,于是我上了闹钟,10分钟以后它会发出“尖叫”,提醒我炉子上的水烧开了,那时我再去关煤气也完全来得及。

我用一个中断信号——闹铃——换来了10分钟的欢乐时光,心里不禁由衷地感叹:中断机制真是个好东西。

正是由于中断机制,我才能有条不紊地“同时”完成多个任务,中断机制实质上帮助我提高了并发“处理”能力。

它也能给计算机系统带来同样的好处:如果在键盘按下的时候会得到一个中断信号,CPU就不必死守着等待键盘输入了;如果硬盘读写完成后发送一个中断信号,CPU就可以腾出手来集中精力“服务大众”了——无论是人类敲打键盘的指尖还是来回读写介质的磁头,跟CPU的处理速度相比,都太慢了。

没有中断机制,就像我们苦守厨房一样,计算机谈不上有什么并行处理能力。

跟人相似,CPU也一样要面对纷繁芜杂的局面——现实中的意外是无处不在的——有可能是用户等得不耐烦,猛敲键盘;有可能是运算中碰到了0除数;还有可能网卡突然接收到了一个新的数据包。

这些都需要CPU具体情况具体分析,要么马上处理,要么暂缓响应,要么置之不理。

无论如何应对,都需要CPU暂停“手头”的工作,拿出一种对策,只有在响应之后,方能回头完成先前的使命,“把一壶水彻底烧开!”先让我们感受一下中断机制对并发处理带来的帮助。

让我们用程序来探讨一下烧水问题,如果没有“中断”(注意,我们这里只是模仿中断的场景,实际上是用异步事件——消息——处理机制来展示中断产生的效果。

毕竟,在用户空间没有办法与实际中断产生直接联系,不过操作系统为用户空间提供的异步事件机制,可以看作是模仿中断的产物),设计如下:voidStayInKitchen(){boolWaterIsBoiled = false;while ( WaterIsBoiled != true ){boolVaporGavenOff= false;if(VaporGavenOff )WaterIsBoiled = true;elseWaterIsBoiled = false;}// 关煤气炉printf(“Close gas oven.\n”);// 一切安定下来,终于可以看电视了,10分钟的宝贵时间啊,逝者如斯夫…watching_tv();return;}可以看出,整个流程如同我们前面描述的一样,所有工作要顺序执行,没有办法完成并发任务。

如果用“中断”,在开始烧水的时候设定一个10分钟的“闹铃”,然后让CPU去看电视(有点难度,具体实现不在我们关心的范围之内,留给读者自行解决吧:>)。

等闹钟响的时候再去厨房关炉子。

#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <signal.h>#include <stdio.h>// 闹钟到时会执行此程序voidsig_alarm(intsigno){//关煤气炉printf(“Close gas oven.\n”);}voidwatching_tv(){while(1){// 呵呵,悠哉悠哉}}int main()// 点火后设置定时中断printf(“Start to boil water, set Alarm”);if (signal( SIGALRM, sig_alrm ) == SIG_ERR){perror("signal(SIGALRM) error");return -1;}// 然后就可以欣赏电视节目了printf(“Watching TV!\n”);watching_tv();return 0;}这两段程序都在用户空间执行。

第二段程序跟中断也没有太大的关系,实际上它只用了信号机制而已。

但是,通过这两个程序的对比,我们可以清楚地看到异步事件的处理机制是如何提升并发处理能力的。

Alarm定时器:alarm相当于系统中的一个定时器,如果我们调用alarm(5),那么5秒钟后就会“响起一个闹铃”(实际上靠信号机制实现的,我们这里不想深入细节,如果你对此很感兴趣,请参考Richard Stevens不朽著作《Unix环境高级编程》)。

在闹铃响起的时候会发生什么呢?系统会执行一个函数,至于到底是什么函数,系统允许程序自行决定。

程序员编写一个函数,并调用signal对该函数进行注册,这样一旦定时到来,系统就会调用程序员提供的函数(CallBack函数?没错,不过在这里如何实现并不关键,我们就不引入新的概念和细节了)。

上面的例子里我们提供的函数是sig_alarm,所做的工作很简单,打印“关闭煤气灶”消息。

上面的两个例子很简单,但很能说明问题,首先,它证明采用异步的消息处理机制可以提高系统的并发处理能力。

更重要的是,它揭示了这种处理机制的模式。

用户根据需要设计处理程序,并可以将该程序和特定的外部事件绑定起来,在外部事件发生时系统自动调用处理程序,完成相关工作。

这种模式给系统带来了统一的管理方法,也带来无尽的功能扩展空间。

计算机系统实现中断机制是非常复杂的一件工作,再怎么说人都是高度智能化的生物,而计算机作为一个铁疙瘩,没有程序的教导就一事无成。

而处理一个中断过程,它受到的限制和需要学习的东西太多了。

首先,计算机能够接收的外部信号形式非常有限。

中断是由外部的输入引起的,可以说是一种刺激。

在烧水的场景中,这些输入是叫声和电视的音乐,我们这里只以声音为例。

其实现实世界中能输入人类CPU——大脑的信号很多,图像、气味一样能被我们接受,人的信息接口很完善。

而计算机则不然,接受外部信号的途径越多,设计实现就越复杂,代价就越高。

因此个人计算机(PC)给所有的外部刺激只留了一种输入方式——特定格式的电信号,并对这种信号的格式、接入方法、响应方法、处理步骤都做了规约(具体内容本文后面部分会继续详解),这种信号就是中断或中断信号,而这一整套机制就是中断机制。

其次,计算机不懂得如何应对信号。

人类的大脑可以自行处理外部输入,我从来不用去担心闹钟响时会手足无措——走进厨房关煤气,这简直是天经地义的事情,还用大脑想啊,小腿肚子都知道——可惜计算机不行,没有程序,它就纹丝不动。

因此,必须有机制保证外部中断信号到来后,有正确的程序在正确的时候被执行。

还有,计算机不懂得如何保持工作的持续性。

我在看电视的时候如果去厨房关了煤气,回来以后能继续将电视进行到底,不受太大的影响。

而计算机则不然,如果放下手头的工作直接去处理“意外”的中断,那么它就再也没有办法想起来曾经作过什么,做到什么程度了。

自然也就没有什么“重操旧业”的机会了。

这样的处理方式就不是并发执行,而是东一榔头,西一棒槌了。

那么,通用的计算机系统是如何解决这些问题的呢?它是靠硬件和软件配合来协同实现中断处理的全过程的。

我们将通过Intel X86架构的实现来介绍这一过程。

CPU执行完一条指令后,下一条指令的逻辑地址存放在cs和eip这对寄存器中。

在执行新指令前,控制单元会检查在执行前一条指令的过程中是否有中断或异常发生。

如果有,控制单元就会抛下指令,进入下面的流程:1.确定与中断或异常关联的向量i (0£i£255)2.寻找向量对应的处理程序3.保存当前的“工作现场”,执行中断或异常的处理程序4.处理程序执行完毕后,把控制权交还给控制单元5.控制单元恢复现场,返回继续执行原程序整个流程如下图所示:图一:中断处理过程让我们深入这个流程,看看都有什么问题需要面对。

1、异常是什么概念?在处理器执行到由于编程失误而导致的错误指令(例如除数是0)的时候,或者在执行期间出现特殊情况(例如缺页),需要靠操作系统来处理的时候,处理器就会产生一个异常。

对大部分处理器体系结构来说,处理异常和处理中断的方式基本是相同的,x86架构的CPU也是如此。

异常与中断还是有些区别,异常的产生必须考虑与处理器时钟的同步。

实际上,异常往往被称为同步中断。

2、中断向量是什么?中断向量代表的是中断源——从某种程度上讲,可以看作是中断或异常的类型。

中断和异常的种类很多,比如说被0除是一种异常,缺页又是一种异常,网卡会产生中断,声卡也会产生中断,CPU如何区分它们呢?中断向量的概念就是由此引出的,其实它就是一个被送通往CPU数据线的一个整数。

CPU给每个IRQ分配了一个类型号,通过这个整数CPU来识别不同类型的中断。

这里可能很多朋友会寻问为什么还要弄个中断向量这么麻烦的东东?为什么不直接用IRQ0~IRQ15就完了?比如就让IRQ0为0,IRQ1为1……,这不是要简单得多么?其实这里体现了模块化设计规则,及节约规则。

首先我们先谈谈节约规则,所谓节约规则就是所使用的信号线数越少越好,这样如果每个IRQ都独立使用一根数据线,如IRQ0用0号线,IRQ1用1号线……这样,16个IRQ就会用16根线,这显然是一种浪费。

相关文档
最新文档