Fork Me on GitHub

源码开放学ARM

LASO - Learn ARM with Source Open

首页         目录索引         资料下载         代码下载         联系作者        
下载PDF打印版本

Linux 中断处理

中断的概念

所谓中断,是一个过程。一般CPU在执行程序的时候,遇到外部紧急事件需要处理。CPU会立即暂停正在执行的程序,马上处理紧急事件后,再接着执行被暂停的程序。这个概念叫做中断。

中断可分为同步(synchronous)中断和异步(asynchronous)中断:

  1. 同步中断是当指令执行时由 CPU 控制单元产生,之所以称为同步,是因为只有在一条指令执行完毕后 CPU 才会发出中断,而不是发生在代码指令执行期间,比如系统调用。
  2. 异步中断是指由其他硬件设备依照 CPU 时钟信号随机产生,即意味着中断能够在指令之间发生,例如键盘中断,串口中断,网卡中断。

根据中断的来源,中断可分为内部中断和外部中断,内部中断的中断源来自CPU内部(软件中断指令、溢出、除法错误等,例如,操作系统从用户态切换到内核态需借助CPU内部的软件中断) ,外部中断的中断源来自CPU外部,由外设提出请求。 根据是否可以屏蔽中断分为可屏蔽中断与不屏蔽中断 (NMI) ,可屏蔽中断可以通过屏蔽字被屏蔽,屏蔽后,该中断不再得到响应,而不屏蔽中断不能被屏蔽。

根据中断入口跳转方法的不同,中断分为向量中断和非向量中断。采用向量中断的 CPU 通常为不同的中断分配不同的中断号,当检测到某中断号的中断到来后,就自动跳转到与该中断号对应的地址执行。

不同中断号的中断有不同的入口地址。非向量中断的多个中断共享一个入口地址,进入该入口地址后再通过软件判断中断标志来识别具体是哪个中断。也就是说,向量中断由硬件提供中断服务程序入口地址,非向量中断由软件提供中断服务程序入口地址。

一般我们将第一类归为异常;第二类归为外部中断,也就是我们常说的中断(不包括异常)。今天我们要描述的就是外部中断。

中断与轮询/DMA的关系

轮询

轮询是早期计算机对I/O设备访问的一种管理方式;定时对各种设备轮流询问,看是否有需要处理的要求。如果设备需要处理,我们就加以处理,否则返回继续执行。

中断

当设备希望CPU处理此设备的数据时,设备就会主动向CPU发送处理请求。CPU会暂停当前任务来执行这个请求。这种处理方式叫做中断。

DMA

DMA (Direct Memory Access)直接内存访问,原本是指:设备不通过CPU将数据传输到内存的意思。目前很多系统都有DMA控制器,支持DMA访问。

中断轮询优缺点

轮询的缺点:

在我们使用的桌面系统中经常需要获取键盘,鼠标的输入信息。这些信息的输入是不定时的。 如果采取轮询方式去读取数据,就给设计者带来麻烦。有些应用需要不停的敲打键盘,例如打字员。有些应用很少敲打键盘,例如:媒体播放。如何给定一个合理的轮询时间间隔是非常重要的。

再如我们的网络应用,有时候我们几个小时不需要接收网络数据,有些应用需要大量网络数据,例如:网络服务器。

当这些设备都采取轮询方式去工作的时候,几乎很难设计一个完善的操作系统。这就是轮询的最大缺点。而中断恰好解决了这个问题。

中断的缺点:

但是中断方式处理起来非常复杂;当中断产生后,系统需要保存当前执行的任务信息,并且中断执行完成后,需要返回到正确的执行任务。这是一个复杂的事情。而像Bootloader这样的系统里去实现这样的程序是没有必要的。因此大部分的Bootloader里是没有中断处理的。 当一个设备的中断非常频繁的时候,会给系统带来非常大的开销,这个时候如果采用轮询的方式,避免大量的中断进程与系统进程的切换,可以提高系统的执行效率。

DMA与轮询

轮询的方式读取数据会消耗很多CPU的时间,而DMA的方式就会减少很多CPU的时间,从而大大提高的了系统的效率。

看一个例子分别说明: 当我们从硬盘上读取一个扇区(512字节)内容。

★ 轮询方式:

设置硬盘寄存器,告诉硬盘我们需要读取第315扇区内容; 从硬盘的寄存器读取512次(如果每次一个字节)。

★ DMA方式:

设置硬盘寄存器,告诉硬盘我们需要读取第315扇区内容; DMA控制器将512个字节的内容存放到内存后通知CPU。

因此DMA方式省去了CPU去访问512次硬盘的时间。

DMA与中断

上面我们两次提到了轮询,我们是否能够发现这两次轮询的作用并不一样。 也就是中断取代了轮询的通知方式,DMA取代了轮询的读写数据方式。

那么DMA和中断是什么关系呢?其实在现代的操作系统中,DMA和中断是并存的。 他们的着重点不相同。他们是互相配合的关系。

上一节 | 目录索引 | 下一节

blog comments powered by Disqus