计算机架构:由于 IRQ 范围较窄,USB 键盘是否响应较慢?

PPC*_*PPC 19 usb operating-systems irq

这是我刚刚想到的一个声明。谁能告诉我这是否是真的,为什么是真的?

声明: 由于 USB 键盘依赖于只能访问较低 IRQ 级别的 USB 通用驱动程序和体系结构,因此它不能像另一个(例如 PS2)控制器那样让键盘访问 IRQ 的优先级高。

这(如果是真的)是否意味着 USB 键盘的优先级(在可用性方面而不是速度方面)低于插入其他端口类型(如 PS2)的键盘?

以映射到中等优先级 IRQ 的 USB 键盘为例,在卡在另一个中等优先级中断例程的故障系统上。由于其相对平等的优先级,键盘事件将被忽略,您将无法发送 Ctrl-Alt-del 或任何其他紧急击键。如果键盘具有更高的优先级,则系统可以进入击键中断例程。

或者 USB 控制器是否有足够的 IRQ 范围(无论是否连续优先)来为您的键盘提供所需的优先级(基本上就在电源故障以下)?

那么通过网络连接映射到远程桌面会话的虚拟键盘呢?

编辑:我的问题与速度无关(请参阅评论):主要问题是:PS2 键盘是否有更多机会与卡在某个中断优先级高于 USB 且低于键盘的 CPU 通话?

Syn*_*ech 17

这不是关于 IRQ 范围,而是关于三个主要因素:

  1. 公交车拥挤程度
  2. 数据量
  3. 数据路径长度

过去,键盘和鼠标会有一个专用的 IRQ(键盘为 IRQ1,PS/2 鼠标为 IRQ12)。

这意味着当按下一个键时,它几乎与 CPU 直接相连(通过 PIC;但仍然只有一个跳跃距离)。这允许在硬件中非常快速地处理键盘事件,特别是因为它具有 IRQ1。(当然,这完全是关于正常的键盘使用,忽略了从键盘控制器直接到 CPU 的复位线。)

另一方面,USB 设备都共享相同的总线和 USB 控制器的 IRQ(通常是与其他设备(如 NIC、视频卡等)共享的 IRQ 控制之一)。因此,对于 USB 键盘,事件从键盘控制器通过 USB 总线进入 USB 主机控制器,从那里到辅助 PIC,然后到主 PIC,然后到操作系统或 BIOS 中的驱动程序,然后到 CPU 上。此外,在通过 USB 传输的数据中添加了错误检查数据。

换句话说,与 AT 或 PS/2 键盘相比,USB 键盘的功能更多。数据路径更长,数据更多,甚至可能要经过软件。即使 USB 带宽足够大,在同一端口上放置其他设备也会导致冲突和延迟(您可以添加集线器,但其上的所有端口仍然是控制器上的同一端口)。所以还有很多等待。

此外,拥有自己的(IRQ意味着旧键盘可以在需要时中断CPU的处理。使用USB,键盘没有这种机制,只能发送一些数据并等待/希望USB控制器中断CPU在某一点。

虚拟键盘更糟糕,因为它们肯定通过软件,当然无法与硬件产品线竞争。

以下是 AT 或 PS/2 键盘与 USB 键盘之间差异的简单可视化:

在此处输入图片说明


ole*_*sii 14

简答

对于用户级代码,两种键盘的性能绝对相同。可能有微小差异(纳米微米秒现代PC上),如果你写的设备驱动程序。如果系统挂起,两个键盘都不能解决问题。进行硬重启。


长答案 TL; DR;

什么是中断?

当硬件(或操作系统内部软件的一些关键部分,如内核)需要处理器服务时,它会触发消息或中断,请求处理器推迟它正在执行的任何操作,并处理此请求。

这个怎么运作?

当硬件产生中断(例如按键)时,该请求进入中断控制器。然后控制器立即在其机器代码的单行上中断 CPU(CPU 仍然执行最后一行)。一旦处理器准备好服务这个请求,它就向中断控制器请求一个中断请求(IRQ)和一个处理程序。中断控制器有一个内部数据结构——中断调度表,它包含一个指向一个例程的指针,该例程应该由 CPU 为特定的 IRQ 执行。

所有不同的中断都对应于明确定义的有限中断请求级别(IRQL)。例如,在 x86 系统上有 32 个 IRQL,而在 x64 和 IA64 上实际上更少 - 16 个 IRQL。显然,硬件设备和软件服务比 IRQL 多,这意味着所有系统对象都将共享 IRQL。

x64 的 IRQL 表

    IRQL | 描述
-----------------------------------------
    15 | 高/高
    14 | 处理器间中断/电源
    13 | 时钟
    12 | 同步
    11 | 设备N
    .. | ...
     3 | 设备 1
     2 | 调度/DPC
     1 | APC
     0 | 被动/低

更高的 IRQL(更大的数字)具有更高的优先级。系统的所有组件都试图将处理器的当前 IRQL 保持在尽可能低的级别 - 0。如果发生更高级别的中断,则处理器的当前 IRQL 级别会升高,并且较低级别的中断将不会被处理,直到所有更高级别的中断都得到解决。如果 IRQ 调度程序能够将多个相同级别的 IRQ 排队以供处理器执行,则可以批量处理 IRQ。

重点是什么?

这一切都经过精心设计,可以将最终用户与硬件的复杂性分开,并构建一个可以与多种类型的硬件/软件一起使用的通用架构。

  1. 用户级代码(即非内核级)仅在处理器处于被动/低 (0) IRQL 时执行。重点是,您只能在处理完所有 IRQL 后才能处理应用程序中的按键事件。因此,对于键盘来说,分配给硬件中断的 IRQL 并不重要。

  2. IRQL 只是操作系统抽象,并不是一成不变的。对应的 IRQ 和 IRQL 存储在 Windows 注册表中(例如),任何热心的用户都可以手动更改它们。

结论

引自问题

因为 USB 键盘依赖于只能访问少数 IRQ 通道的 USB 通用驱动程序和体系结构,所以它不能像另一个(比如 PS2)控制器那样让键盘访问 IRQ 的优先级高。

也许作者的意思是更低的 IRQL而不是更少的 IRQ 通道。无论如何,这并不重要,因为用户在任何现代 PC 上都看不到它。可能的差异是的纳米微米秒水平,他们只在内核级别发生。在这两种情况下,用户级代码都被操作系统内核阻止。

这(如果是真的)是否意味着 USB 键盘的响应速度会低于插入其他端口类型的键盘?

这是不正确的,因为操作系统的设计方式。如果操作系统忙于某事并且“缓慢”,则两个键盘的行为将相同。

以映射到中等优先级 IRQ 的 USB 键盘为例,在卡在另一个中等优先级中断例程的故障系统上

在这种情况下系统会出现 BSOD,IRQ 处理例程必须设计成一定的标准(例如它们必须是快速的、同步的、非阻塞的等等)。任何偏离这一点,内核都会蓝屏死机。

由于其相对平等的优先级,键盘事件将被忽略,您将无法发送 Ctrl-Alt-del 或任何其他紧急击键。

如果系统挂起,有很多事情可能会出错,但很可能会在驱动程序级别处理击键 IRQL。问题是,它不会传递给订阅此类通知的应用程序,因为操作系统正忙于做其他事情。