本质上是轮询,中断信号触发中断请求,cpu查询到中断请求之后根据当前中断寄存器配置决定是否进行中断响应。
但是一般情况下的轮询是程序设定固定周期让cpu进行状态查询,是由指令控制的,没记错的话好像某本unix书里称轮询为软中断。
就连中断都是轮询---当有设备事件产生以后,设置CPU的中断引脚触发中断,而CPU在每个时钟周期都查询是否有中断发生,在有中断时就转到中断处理程序去执行.这是典型的轮询...
最近在看Linux内核,看到中断和异常这块,想起来了以前体系结构课上讲到的关于轮询和中断的概念。二者都是操作系统和硬件交互的方式。开始时是轮询的方法,内核(通常是驱动)需要自己去轮询硬件看硬件是否有事件,如果有则处理,没有则继续轮询,直到被操作系统挂起。这显然是很低效的。于是有了中断这种更好的方案。
但我认为中断本质上仍然是轮询,只不过是把轮询操作放在了硬件层,提高了轮询的效率。中断是如何实现的?通过IRQ(Interrup ReQuest),IRQ其实就是一个硬件的轮询系统,它连接了所有的硬件,每个硬件分配一个独立的IRQ编号。硬件有消息就会放在它自己的IRQ里。然后CPU会在每个指令周期结束时查看IRQ里是否有消息,如果有就触发中断给内核去处理。
总结一下就是:当主体需要了解客体的状态,而主体并不能直接接收到客体的消息时,主体的轮询是无法避免的。主体所能做的是尽可能把轮询的操作放在更底层,这样才可以提高效率。
1.对中断进行图示解释
、
2.对轮询进行图示解释
原文地址:https://www.cnblogs.com/jacklong-yin/p/9081360.html