摸水了一周,准备在家里好好敲敲代码,赶赶稿子,正当我专心输出的时候,被老婆打断了。
娃拉臭了,赶紧过来!语气中带着一丝丝我害怕的味道。
怎么办?没办法只有过去换尿布咯,三两下,搞定!
之后,我继续开始肝,但是心想,要是娃再哭闹了,老婆是不是会骂人了?
想着不行,我得去看看,于是我每隔几分钟就去瞅瞅,媳妇看到我这么用心,笑开了花!
是的,从中我也悟出了中断与轮询的味道,今天我们来看看这两者的内涵与区别。
在嵌入式开发过程中,使用到处理器的时候,中断是我们必不可少的元素。
中断是一种硬件机制,在CPU在正常运行程序的过程中,中断可以随时发生。
由预选安排或各种随机的内外部事件,一般称为中断源,发出中断请求,使CPU中断正在运行的程序,并通过将控制权传递给服务设备的中断处理程序来响应,这个过程称为程序中断。
一般认为中断是外部设备向处理器发起的请求事件,这还不够彻底,中断可以说是是处理器对外开放的实时受控接口。
比如计算机系统中,如果没有中断,计算机所有的程序都是定论的,我们事先就可以知道其运行的全部过程,无法交互,相当于一个加速器。
有中断后,外部服务程序可能打断当前任务。
CPU“正在执行的程序”与“随时可能发生的服务”,二者形成了异步关系,由人实时控制的中断输入,是无法预测的。
中断可以看作是一种“硬件轮询”。即本质上,CPU会通过读取外部信号来判断CPU的下一步状态。
设备管理中,高速的处理器和低速的输入输出设备相对来说,会降低整体效率,为了减少程序直接控制方式中CPU的等待时间,提高系统的并行工作程度,采用中断处理方式是很有必要的。
在I/O设备中断方式下,CPU与I/O设备之间数据的传输步骤如下:
举个例子,比如说键盘,按下键盘Enter键时,cpu是怎么样知道我按下了Enter键而不是Shift键呢?
首先说明cpu不会知道你按下的哪个键,cpu只会按着机器指令的执行顺序,一条一条的执行机器指令。
cpu只知道按设计好的逻辑执行指令,不管这个指令是干嘛的。
知道你按下哪个键的是操作系统,操作系统是根据中断控制器以及相应的寄存器的状态判断是不是中断。
所以当你按下一个键,这个键的地址马上被写入RAM中,同时发出中断信号,CPU获取中断信号,就会去执行中断程序。
中断产生时,程序需要跳转到某个地址去运行该段的程序,那么CPU是不是要读整个内存然后去找中断向量表呢?
不是的,不需要去读取整个内存,而是通过映射的关系。
例如在x86架构中,中断向量表的位置保存在IDTR寄存器里,CPU通过这个寄存器就能找到中断向量表,然后根据中断号就可以找到具体的中断入口了。
这个问题极大激发我的兴趣,对我们理解中断也有极大的好处。
首先我们需要知道:中断并不直接把数据送给用户进程的,中断通知的是驱动程序,而不关心当前正在执行的是哪个进程。
而进程操作都是一样的:保存现场,进入内核,执行需要的操作,返回中断前的现场,继续进程执行。
一个系统的的中断系统通常是类似这样的组成,包括设备的中断、中断控制器、CPU的中断
指设备要产生一个事件来通知CPU,事件的产生的方法有很多。对设备“关中断”,指的是让这个设备停止发出中断信号,如果中断控制器已经获得这个中断信号,那么这个中断信号还是会报到CPU上的。
指对多个设备的中断进行采样,排队,分发的机制。对中断控制器说:关中断,是让中断控制器不要给CPU(或者上级)发送中断信号了,设备报不报信号上来,这些信号是否被排队,那是另一个问题。
指CPU核上有一条中断线,当这条线加上合适的电平或者信号,CPU核就会从当前的执行上下文中,直接跳转到中断处理程序中执行。在CPU的角度上关中断,就是不要执行“跳转到中断处理程序”这个动作。
I/O设备中断方式使处理器的利用率显著提高;
支持多道程序和I/O设备的并行操作,提高了效率。
各种各样的输入输出设备通过中断处理方式进行并行操作,使中断次数增加,会造成CPU无法响应中断;
如果在缓冲区装满数据之后发生中断。那么在数据传送过程中,发生中断的机会较多,将耗去大量的CPU处理时间。
轮询是一种CPU决策如何提供周边设备服务的方式。
在轮询过程中,由CPU定时发出询问,依序询问每一个周边设备是否需要其服务。
每个设备都有一个指示命令就绪的位,指示该设备的状态。
当此状态就绪即给予服务,服务结束后再问下一个周边,接着不断周而复始。
I/O设备的程序轮询是计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。
轮流询问之后,有要求的,则加以处理。
在处理I/O设备的要求之后,处理机返回继续工作。
在一些应用中可以增强了程序的实时性...
能处理的输入输出设备的数量也是有一定限度的。
程序轮询占用CPU的处理时间,效率较低。
https://www.zhihu.com/question/47862508 https://www.cnblogs.com/jhxk/articles/1893314.html https://www.eet-china.com/mp/a20627.html
推荐阅读:
嵌入式编程专辑 Linux 学习专辑 C/C++编程专辑