我正在研究中断。因此,大多数架构都是中断驱动的,如果一切都是中断驱动的,那么处理器处理所有这些的速度有多快。例如,当按下键盘按键时,它会创建一个中断,要求内核在缓冲区中查找新字符,在这种情况下,处理器的服务速度有多快,而且当发出中断时,处理器需要切换到内核空间,这在上下文切换方面花费很大。所以我假设,即使在所有这些之后,如果处理器具有良好的性能,那么我只能假设两次击键之间的时间就计算机速度而言是很多时间?平均一分钟内发生多少次上下文切换?我想这会让我对我真正在学习的内容有一些了解,并获得真实的生活感觉……谢谢……
多快取决于多种因素:
- CPU 和中断控制器的硬件延迟(如果有)
- CPU 时钟速率(通常,事件(或对它们的响应)发生的速度不会比此快)
- CPU访问所需内存(系统表(例如中断向量表,但可能有段表和页表等)、堆栈(中断代码指令指针通常保存在堆栈上)的速度,因此 ISR 可以返回它)、ISR 代码本身及其使用的所有数据)。显然,代码、数据和 TLB 缓存将在这里发挥作用。
- ISR 完成其工作所需的时间,特别是当 ISR 无法互相抢占时,因此并发中断必须串行化。
- 中断优先级。通常,不同的中断源被分配不同的优先级。例如,您希望不可屏蔽中断、机器检查中断(基本上是报告严重硬件问题的中断)和计时器中断的优先级高于键盘中断等。在基于优先级的中断处理中,所有优先级低于当前正在服务的中断的中断都必须“等待”。因此,如果您有大量高优先级中断,则可以以明显且不同的延迟来处理较低优先级中断。极端情况是高优先级中断不断出现。这可能是由于设计不当或硬件故障造成的。
- 与其他 CPU 的通信和交互。在 MP 系统中,中断处理程序有时可能会采用自旋锁来独占访问多个 CPU 之间共享的资源。如果存在争用,ISR 将等待,并且所有其他中断(或所有较低优先级的中断)将不会得到服务,直到当前 ISR 完成其工作。
这是对一般问题的一般答案。
EDIT: 我还忘了说一件事。存在一些奇怪的 CPU,其中某些指令是可重复的(想想 x86 的rep movsb
)并且在重复指令完全完成之前,中断无法开始得到服务,这可能需要相当于执行大约 1000 条甚至更简单的单独指令的时间。因此,尽管启用了中断,但可能存在一些 CPU 异常,无法让 ISR 开始运行。 TI 的 TMS320C54xx 就是此类 CPU 之一。使用它你必须小心 FIR 滤波器代码。如果过滤器很长并且被实现为重复的 MAC 指令,则会在中断服务中引入延迟。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)