Computerarchitektur: Sind USB-Tastaturen aufgrund des engen IRQ-Bereichs weniger ansprechbar?

3557
PPC

Hier ist eine Aussage, an die ich gerade gedacht habe. Kann mir jemand sagen, ob und warum es stimmt?

Behauptung: Da USB-Tastaturen auf einem generischen USB-Treiber und einer USB-Architektur basieren, die nur Zugriff auf niedrigere IRQ-Pegel haben, können sie der Tastatur keinen Zugriff auf einen IRQ mit Priorität als einem anderen Controller (z. B. PS2) gewähren.

Bedeutet dies (falls zutreffend), dass USB-Tastaturen eine geringere Priorität (hinsichtlich der Verfügbarkeit als Geschwindigkeit) haben als Tastaturen, die an einen anderen Anschlusstyp (wie PS2) angeschlossen sind?

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. 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 die Tastatur eine höhere Priorität hatte, konnte das System die Interrupt-Routine für Tastatureingaben aufrufen.

Oder verfügt der USB-Controller über einen ausreichenden IRQ-Bereich (ob kontinuierlich oder nicht kontinuierlich), um Ihrer Tastatur die Priorität zu geben, die sie benötigt (im Wesentlichen knapp unter Stromausfall)?

Und was ist mit virtuellen Tastaturen, die über eine Netzwerkverbindung auf einer Remote-Desktopsitzung zugeordnet werden?

EDIT: Meine Frage bezieht sich nicht auf Geschwindigkeit (siehe Kommentare): Die Hauptfrage lautet: Hat eine PS2-Tastatur mehr Möglichkeiten, mit einer CPU zu sprechen, die irgendwo auf einer Interrupt-Priorität hängt, die höher als USB und niedriger als die Tastatur ist?

18
Ich frage mich, ob das Gleiche für USB-Mäuse gilt. Meines scheint sicher nach dem Umschalten der Schnittstelle (aber nicht der Maus selbst) vor einigen Monaten. martineau vor 11 Jahren 2
Wenn es für die Tastatur zutrifft, ist es wahrscheinlich für Mäuse dasselbe. aber wahrscheinlich weniger wichtig, da für die Maus keine Notentastenanschläge vorhanden sind PPC vor 11 Jahren 0
Ich denke nicht, dass dies etwas Besorgnis erregendes ist. Wenn Sie dies tun und die Tastatur hängen bleibt, sind die Netzwerkschnittstellen verhungert und Sie können das System nicht fernsteuern. Es scheint, dass Sie nur ein Problem für ein anderes tauschen. David Schwartz vor 11 Jahren 0
@ DavidSchwartz: Es ist meistens eine theoretische Frage und aus Sicht eines Computerarchitekten. Es gibt immer noch eine Anwendung aus der PoV eines Benutzers: "Mein Computer hängt nicht, reagiert nicht auf Strg-Alt-Rückschritt: Wenn ich nach einer PS2-Tastatur suche oder sie vergesse und einen Neustart durchführe" PPC vor 11 Jahren 1
@PPC als Antwort auf Ihre Bearbeitung. Wenn das System hängt, würden beide Tastaturen das Problem nicht lösen. Gönnen Sie sich einen Neustart. oleksii vor 11 Jahren 0
@PPC: Ctl-alt-del würde wahrscheinlich sowieso nicht funktionieren. Der Neustart wird durch eine High-Level-Software gesteuert, die Programme herunterfährt, Cache-Speicher löscht und so weiter. Mit einem Interrupt-Sturm funktioniert High-Level-Software nicht. David Schwartz vor 11 Jahren 2
Ich denke, dass der IRQ-Unterschied im Vergleich zum Unterschied der Abfrageraten vernachlässigbar ist. PS / 2 ist auf 100 Hz begrenzt, während USB standardmäßig auf 125 eingestellt ist und bei 1000 Hz abfragen kann. Ich kann mir nur schwer vorstellen, dass ein USB-Eingang länger als 5 Millisekunden im USB-Controller oder PCIe-Bus stecken bleibt. Ampersand vor 11 Jahren 0
@ Ampersand: Ich mache mir nicht so viel Gedanken über die Geschwindigkeit: Ich möchte eine höhere Wahrscheinlichkeit haben, dass mein Tastendruck den Kern trifft, wenn etwas schief geht PPC vor 11 Jahren 0
@PPC: Auch wenn der Kernel nichts dagegen tun kann? David Schwartz vor 11 Jahren 0

2 Antworten auf die Frage

16
Synetech

Es geht nicht um den IRQ-Bereich, es geht um drei Hauptfaktoren:

  1. Anzahl der überfüllten Busse
  2. Datenmenge
  3. Länge des Datenpfads

In der Vergangenheit hatten Tastaturen und Mäuse einen eigenen IRQ (IRQ1 für Tastaturen, IRQ12 für PS / 2-Mäuse).

Das bedeutete, dass beim Drücken einer Taste eine fast direkte Verbindung zur CPU bestand (über den PIC; aber immer noch nur ein Sprung entfernt). Dies ermöglichte, dass Tastaturereignisse in Hardware sehr schnell verarbeitet werden konnten, insbesondere da sie IRQ1 hatten. (Natürlich dreht sich hier alles um die normale Tastaturbenutzung und ignoriert die Reset-Zeile, die vom Tastaturcontroller direkt zur CPU führt.)

Auf der anderen Seite teilen sich USB-Geräte den gleichen Bus und den IRQ des USB-Controllers (normalerweise einer der IRQ-Steuergeräte, der mit anderen Geräten wie NICs, Grafikkarten usw. verwendet wird). Bei einer USB-Tastatur gehen die Ereignisse vom Tastaturcontroller über den USB-Bus in den USB-Hostcontroller von dort zum sekundären PIC, dann zum Master-PIC und dann zu den Treibern im Betriebssystem oder im BIOS dann auf die CPU. Außerdem werden den über USB übertragenen Daten Fehlerprüfungsdaten hinzugefügt.

Mit einer USB-Tastatur ist also einfach mehr los als mit einer AT- oder PS / 2-Tastatur. Der Datenpfad ist länger und es gibt mehr Daten, und es muss sogar Software durchlaufen werden . Auch wenn die USB-Bandbreite ausreichend groß ist, können andere Geräte am gleichen Port Kollisionen und Verzögerungen verursachen (Sie können einen Hub hinzufügen, aber alle Ports auf dem Controller sind immer noch derselbe Port des Controllers). Es gibt also noch viel mehr Warten.

Darüber hinaus kann eine eigene Tastatur verwendet werden (IRQ bedeutet, dass eine ältere Tastatur die Verarbeitung der CPU jederzeit unterbrechen kann.) Bei USB verfügt die Tastatur nicht über einen solchen Mechanismus und kann nur einige Daten senden und darauf warten, dass der USB-Controller die CPU unterbricht irgendwann.

Virtuelle Tastaturen sind sogar noch schlimmer, da sie definitiv eine Software durchlaufen, die mit einer Hardware-Linie natürlich nicht konkurrieren kann.

Hier ist eine einfache Visualisierung des Unterschieds zwischen einer AT- oder PS / 2-Tastatur und einer USB-Tastatur:

enter image description here

Mir geht es nicht so sehr um Geschwindigkeit als um Priorität: Ich verstehe, dass ein längerer Datenpfad dazu führen kann, dass mein Tastendruck wartet. Ich denke jedoch an "die Wahrscheinlichkeit, dass der Tastenanschlag bei einem fehlerhaften System verloren geht", was meiner Meinung nach nicht von der Pfadlänge abhängt. PPC vor 11 Jahren 0
Wie kann der IRQ in der Software verarbeitet werden, BEVOR Sie die CPU erreichen? Haben APICs eigene Prozessoren? Mit ihren Routinen im zentralen Speicher? Borgen sie sich CPU-Zeit? PPC vor 11 Jahren 0
*> "Die Wahrscheinlichkeit, dass der Tastenanschlag bei einem fehlerhaften System verloren geht" * Es hängt von der Störung ab. Ja, natürlich hat eine USB-Tastatur aufgrund der zusätzlichen Komplexität eine viel höhere Wahrscheinlichkeit, dass sie Tastenanschläge verliert. *> Re: APICs * Ja, sie verfügen über einen Prozessor, der eine gewisse Verarbeitungsstufe durchführt, genau wie der Tastaturcontroller einen Prozessor, Grafikkarten mit GPUs usw. Die meisten Hardware verfügt über eine Art Chip, der die Verarbeitung übernimmt. Synetech vor 11 Jahren 0
*> Wie kann der IRQ in der Software verarbeitet werden, BEVOR die CPU angestoßen wird? * Eine USB-Tastatur hat nicht nur Treiber, sondern auch der USB-Controller. Die Tastaturdaten werden nicht direkt zur CPU geleitet, sondern sie gelangen über die Tastatur zum USB-Controller, zum Treiber, zum Tastaturlaufwerk, dann zur CPU oder zu anderer Software, je nach Bedarf, also zum Beispiel `Ctrl + Alt + Del` funktionieren nicht über eine Hardwarelinie, sondern werden über Software verarbeitet. Synetech vor 11 Jahren 0
Wenn ich Sie also gut verstehen würde, würde der grundlegende Datenfluss meines Tastenanschlags lauten: USB-Controller, APIC, CPU-Eingang durch Low-Pri-IRQ, USB-ISR / IST, CPU-selbstgenerierter IRQ (wie ein TRAP), Tastatur-ISR / IST? Auf diese Weise ist die Priorität des USB-Controllers relevant. In meiner Frage dachte ich, dass der USB-Controller die USB-Pakete in echte IRQ-Tastaturen übersetzen könnte. PPC vor 11 Jahren 0
Huh Nein, USB-Tastaturen sind nur ein weiteres USB-Gerät. Sie sind nicht mehr speziell oder haben einen direkten Draht zum System. Wenn Sie denken, dass dies eine Verschwendung einer IRQ-Leitung ist, haben Sie recht. Auch bei einem 64-Bit-System ohne PS / 2-Port ist IRQ1 [immer noch „PS / 2-Tastatur“ zugewiesen] (http://i.stack.imgur.com/HCL4K.png). Beachten Sie aber auch, dass moderne Systeme nicht mehr nur auf 16 IRQs beschränkt sind. Synetech vor 11 Jahren 0
14
oleksii

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.

  1. 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.

  2. 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.

Die Anwendung, die ich anvisiere, ist der Fenstermanager (Easy Case) oder das Betriebssystem selbst. Ich erwarte, dass meine CPU ihre USB-like-IRQL-Verarbeitung einstellt, um meine Synchronisationsdisketten vor dem Neustart sauber zu empfangen PPC vor 11 Jahren 0
>> Bedeutet dies .., dass USB-kbds weniger ansprechbar sind: Könnten Sie Ihre "Nein" -Antwort detailliert beschreiben? PPC vor 11 Jahren 0
@PPC Wenn Sie einen Gerätetreiber entwerfen, können USB-kbds für Nano- bis Mikrosekunden möglicherweise langsamer sein. Wenn Sie an einem Code auf Benutzerebene interessiert sind, bleibt der Code gesperrt, wenn ein IRQL-Level> 1 verarbeitet wird. Es ist also egal, ob kbd IRQL dem höchsten oder mittleren IRQL entspricht. Benutzercode ist gesperrt. oleksii vor 11 Jahren 0