Kurze Antwort
Beide Tastaturen würden für den Code auf Benutzerebene absolut gleich gut funktionieren. Beim Schreiben von Gerätetreibern können kleine Unterschiede ( Nano- bis Mikrosekunden auf einem modernen PC) auftreten. Wenn das System hängt, würden beide Tastaturen das Problem nicht lösen. Gönnen Sie sich einen Neustart.
Lange Antwort TL; DR;
Was ist ein Interrupt?
Wenn Hardware (oder ein kritischer Teil der internen Betriebssystemsoftware, wie z. B. der Kernel) einen Prozessordienst benötigt, löst er eine Nachricht oder einen Interrupt aus, der den Prozessor auffordert, das zu verschieben, was er gerade tut, und diese Anforderung zu bearbeiten.
Wie es funktioniert?
Wenn Hardware einen Interrupt generiert (z. B. ein Tastendruck), wird diese Anforderung an einen Interrupt-Controller weitergeleitet. Der Controller unterbricht dann sofort die CPU in einer einzigen Zeile des Maschinencodes (die CPU führt diese letzte Zeile immer noch aus). Sobald der Prozessor bereit ist, diese Anforderung zu bearbeiten, fragt er einen Interrupt-Controller nach einer Interrupt-Anforderung (IRQ) und einer Verarbeitungsroutine. Der Interrupt-Controller verfügt über eine interne Datenstruktur - die Interrupt-Dispatch-Tabelle, die einen Zeiger auf eine Routine enthält, die von der CPU für einen bestimmten IRQ ausgeführt werden soll.
Alle verschiedenen Interrupts entsprechen einem definierten, begrenzten IRQL- Level ( Interrupt Request Level ). Auf x86-Systemen gibt es beispielsweise 32 IRQLs, und auf x64 und IA64 gibt es tatsächlich weniger - 16 IRQLs. Natürlich gibt es mehr Hardwaregeräte und Softwaredienste als IRQLs, was bedeutet, dass alle Systemobjekte IRQLs gemeinsam nutzen.
IRQLs-Tabelle für x64
IRQL | Beschreibung ---------------------------------------- 15 | Hoch / Profil 14 | Interprozessor-Interrupt / Strom 13 | Uhr 12 | Sync 11 | Gerät N .. | ... 3 | Gerät 1 2 | Versand / DPC 1 | APC 0 | Passiv / Niedrig
Höhere IRQL (mit größerer Anzahl) haben eine höhere Priorität. Alle Komponenten eines Systems versuchen, die aktuelle IRQL eines Prozessors auf dem niedrigst möglichen Level - 0 zu halten. Wenn ein Interrupt auf einem höheren Level auftritt, wird der aktuelle IRQL-Level eines Prozessors angehoben, und die Interrupts mit einem niedrigeren Level werden erst dann verarbeitet Alle Interrupts mit höheren Pegeln werden aufgelöst. IRQ kann stapelweise verarbeitet werden, wenn der IRQ-Scheduler mehrere IRQs auf derselben Ebene für die Prozessorausführung in eine Warteschlange stellen kann.
Was ist der Sinn?
Das alles ist wirklich gut entwickelt worden, um den Endbenutzer von der Komplexität der Hardware zu trennen und eine universelle Architektur zu schaffen, die mit vielen Arten von Hardware / Software funktioniert.
Code auf Benutzerebene (dh nicht auf Kernel-Ebene) wird nur ausgeführt, wenn sich der Prozessor auf der Passive / Low (0) -IRQL befindet. Der Punkt ist, Sie können ein durch eine Taste gedrücktes Ereignis in Ihrer Anwendung nur behandeln, nachdem alle IRQLs verarbeitet wurden. Daher spielt es bei einer Tastatur keine Rolle, welche IRQL dem Hardware-Interrupt zugewiesen ist.
IRQL sind nur Betriebssystemabstraktionen und sind nicht in Stein gemeißelt . Entsprechende IRQ und IRQL werden beispielsweise in der Windows-Registrierung gespeichert und können von jedem begeisterten Benutzer manuell geändert werden.
Schlussfolgerungen
Zitate aus der Frage
Da USB-Tastaturen auf einem generischen USB-Treiber und einer USB-Architektur basieren, die nur Zugriff auf einige wenige IRQ-Kanäle hat, kann der Tastatur kein Zugriff auf einen IRQ mit Priorität gewährt werden, wie dies bei einem anderen Controller (z. B. PS2) der Fall wäre.
Vielleicht meinte der Autor weniger IRQL als die weniger IRQ-Kanäle . Egal, es ist nicht wirklich wichtig, da es auf jedem modernen PC für den Benutzer nicht sichtbar ist. Die möglichen Unterschiede liegen auf der Nano- bis Mikrosekundenebene und treten nur auf der Kernelebene auf. In beiden Fällen wird der Code der Benutzerebene vom Betriebssystemkern blockiert.
Bedeutet dies (falls zutreffend), dass USB-Tastaturen weniger ansprechbar sind als Tastaturen, die an einen anderen Anschlusstyp angeschlossen sind?
Dies trifft auf die Art und Weise, wie OS entworfen wurde, nicht zu. Wenn das Betriebssystem mit etwas beschäftigt ist und "langsam" ist, verhalten sich beide Tastaturen identisch.
Nehmen Sie zum Beispiel eine USB-Tastatur, die einem IRQ mit mittlerer Priorität zugeordnet ist, auf einem fehlerhaften System, das in einer anderen Interrupt-Routine mit mittlerer Priorität hängen bleibt
In diesem Fall muss das System BSOD, IRQ-Abwicklungsroutinen müssen bis zu einem bestimmten Standard ausgelegt sein (z. B. müssen sie schnell, synchron, nicht blockierend usw. sein). Jede Abweichung von diesem und dem Kernel wird BSOD sein.
Aufgrund der relativ gleichen Priorität werden Tastaturereignisse ignoriert, und Sie können nicht die Tastenkombination Strg-Alt-Entf oder andere Tastenanschläge senden.
Wenn das System hängt, gibt es viele Dinge, die schief gehen können, aber höchstwahrscheinlich wird der Tastenanschlag-IRQL auf Treiberebene behandelt. Das Problem ist, es wird nicht an die Anwendung übermittelt, die eine solche Benachrichtigung abonniert hat, da das Betriebssystem damit beschäftigt ist, etwas anderes zu tun.