0

我正在研究中断。所以大多数架构都是中断驱动的,如果一切都是中断驱动的,处理器能以多快的速度处理所有这些。例如,在按下键盘按键时,它会创建一个中断,要求内核寻找新字符的缓冲区,在这种情况下,处理器可以服务多快,同时在发出中断时,处理器需要切换到内核空间,这在上下文切换方面成本很高。所以我假设,即使在所有这些之后,如果处理器具有良好的性能,那么我只能假设两次击键之间的时间在计算机速度方面是很多时间?一个平均,一分钟发生多少上下文切换?我想这会让我对我真正学习的内容有所了解并获得真实的生活感觉......谢谢......

4

2 回答 2

2

多快取决于多种因素:

  1. CPU 和中断控制器的硬件延迟(如果有)
  2. CPU 时钟频率(通常,事件(或对它们的响应)的发生速度不会比这快)
  3. CPU 访问所需内存的速度(系统表(例如中断向量表,但可能有段表和页表等),堆栈(中断的代码指令指针通常会保存在堆栈上,因此 ISR 可以返回到它)、ISR 代码本身及其使用的所有数据)。显然,代码、数据和 TLB 缓存将在这里发挥作用。
  4. ISR 完成工作所需的时间,特别是如果 ISR 不能相互抢占,因此必须串行化并发中断。
  5. 中断优先级。通常,不同的中断源被分配不同的优先级。例如,您希望不可屏蔽中断、机器检查中断(基本上是报告严重硬件问题的中断)和定时器中断具有比键盘中断更高的优先级。在基于优先级的中断处理中,所有优先级低于当前正在服务的中断的中断都必须“等待”。因此,如果您有许多高优先级中断,则可以以明显且变化的延迟来处理低优先级中断。极端情况是高优先级中断不断出现。这可能是由于设计不当或硬件故障造成的。
  6. 与其他 CPU 的通信和交互。在 MP 系统中,中断处理程序有时可能会使用自旋锁来独占访问多个 CPU 之间共享的资源。如果存在争用,ISR 将等待并且所有其他中断(或所有较低优先级的中断)将不会得到服务,直到当前 ISR 完成其工作。

这是对一般问题的一般回答。

编辑:我忘了提一件事。存在一些奇怪的 CPU,其中某些指令是可重复的(想想 x86 的rep movsb),并且在重复的指令完全完成之前,中断无法开始得到服务,这可能需要相当于执行大约 1000 条甚至更简单的单个指令的时间。因此,尽管启用了中断,但可能会有一些 CPU 怪癖不让 ISR 开始运行。TI 的 TMS320C54xx 就是此类 CPU 之一。有了它,您必须小心 FIR 滤波器代码。如果过滤器很长并且被实现为重复的 MAC 指令,则会在中断服务中引入延迟。

于 2012-09-30T06:00:56.063 回答
0

在普通的 linux 系统中,有一个 nice 值,较低的 nice 值具有大约 800ms 的典型量子值,较高的 nice 值具有 5ms 的量子。

Linux 系统使用启发式方法来决定进程是否是交互式的。您最好阅读此说明:

https://www.cs.columbia.edu/~smb/classes/s06-4118/l13.pdf

关于调度程序,有几种数据结构,例如 linux 跟踪等待 IO 绑定的交互进程的数量等。

在 Windows 中,不仅仅是抢占式多任务,应用程序通过 GetMessage() API 调用支持内核[在 Windows GUI 程序的情况下]。当您调用 GetMessage() 时,该进程将在有消息挂起时调度回来在它的系统队列中处理。

于 2012-09-30T03:14:06.653 回答