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

19

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

Anweisung: Da USB-Tastaturen auf einem USB-Treiber und einer USB-Architektur basieren, die nur auf niedrigere IRQ-Ebenen zugreifen können, kann die Tastatur nicht auf einen IRQ mit einer so hohen Priorität wie ein anderer Controller (z. B. PS2) zugreifen.

Bedeutet dies (wenn es wahr ist), dass USB-Tastaturen eine niedrigere Priorität (in Bezug auf die Verfügbarkeit mehr als die Geschwindigkeit) haben als Tastaturen, die an einen anderen Anschlusstyp (wie PS2) angeschlossen sind?

Nehmen Sie zum Beispiel eine USB-Tastatur, die einem IRQ mittlerer Priorität zugeordnet ist, auf einem fehlerhaften System, das an einer anderen Interruptroutine mittlerer Priorität hängt. Aufgrund der relativ gleichen Priorität werden Tastaturereignisse ignoriert und Sie können weder Strg-Alt-Entf noch andere Nottastenanschläge senden. Wenn die Tastatur eine höhere Priorität hätte, könnte das System die Tastendruckunterbrechungsroutine eingeben.

Oder verfügt der USB-Controller über einen ausreichenden IRQ-Bereich (unabhängig davon, ob die Priorität kontinuierlich ist oder nicht), um Ihrer Tastatur die Priorität zuzuweisen, die sie benötigt (im Grunde nur knapp unter dem Stromausfall)?

Und was ist mit virtuellen Tastaturen, die über eine Netzwerkverbindung in einer Remotedesktopsitzung zugeordnet werden?

EDIT: Bei meiner Frage geht es nicht viel um Geschwindigkeit (siehe Kommentare): Die Hauptfrage lautet: Hat eine PS2-Tastatur mehr Chancen, mit einer CPU zu sprechen, die irgendwo auf einer Interrupt-Priorität steckt, die höher als USB und niedriger als Tastatur ist?

PPC
quelle
2
Ich frage mich, ob dies auch für USB-Mäuse gilt. Meins scheint ja nach dem Umschalten der Schnittstelle (aber nicht der Maus selbst) vor ein paar Monaten.
Martineau
Wenn es für die Tastatur zutrifft, ist es für Mäuse höchstwahrscheinlich dasselbe. aber wahrscheinlich weniger wichtig, da es keine Nottastenanschläge für die Maus gibt
PPC
Ich denke nicht, dass dies etwas Sinnvolles ist, um das man sich Sorgen machen muss. Wenn Sie dies tun und die Tastatur stecken bleibt, werden die Netzwerkschnittstellen ausgehungert und Sie können das System nicht fernsteuern. Es scheint, als würden Sie nur ein Problem gegen ein anderes austauschen.
David Schwartz
1
@DavidSchwartz: Es handelt sich meistens um eine theoretische Frage, die vom Standpunkt eines Computerarchitekten aus betrachtet wird. Dennoch gibt es eine Anwendung aus dem PoV eines Benutzers: "Mein Computer steckt fest, antwortet nicht auf Strg-Alt-Rücktaste: Soll ich nach einer PS2-Tastatur suchen oder sie vergessen und neu starten"
PPC
2
@PPC: Ctl-alt-del würde wahrscheinlich sowieso nicht funktionieren. Der Neustart wird von einer Software auf hoher Ebene gesteuert, mit der Programme heruntergefahren, Caches geleert und so weiter werden. Bei einem Interrupt-Sturm funktioniert High-Level-Software nicht.
David Schwartz

Antworten:

17

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

  1. Menge der Bus-Anhäufung
  2. Datenmenge
  3. Länge des Datenpfads

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

Dies bedeutete, dass beim Drücken einer Taste eine fast direkte Verbindung zur CPU bestand (über den PIC; aber immer noch nur ein Sprung entfernt). Dadurch konnten Tastaturereignisse in der Hardware sehr schnell verarbeitet werden, zumal dort IRQ1 vorhanden war. (Natürlich dreht sich alles um die normale Tastaturnutzung und ignoriert die Reset-Leitung, die vom Tastatur-Controller direkt zur CPU führt.)

USB-Geräte hingegen teilen sich alle den gleichen Bus und den IRQ des USB-Controllers (bei dem es sich normalerweise um einen IRQ-Steuerungs-IRQ handelt, der mit anderen Geräten wie Netzwerkkarten, Grafikkarten und dergleichen geteilt wird). Bei einer USB-Tastatur werden Ereignisse vom Tastatur-Controller über den USB-Bus zum USB-Host-Controller übertragen, von dort zum sekundären PIC, dann zum Master-PIC und dann entweder zu den Treibern im Betriebssystem oder zum BIOS , dann auf die CPU. Darüber hinaus werden Daten, die über USB übertragen werden, einer Fehlerprüfung unterzogen.

Mit anderen Worten, bei einer USB-Tastatur ist einfach mehr los als bei einer AT- oder PS / 2-Tastatur. Der Datenpfad ist länger und es sind mehr Daten vorhanden. Möglicherweise muss er sogar über Software übertragen werden . Auch wenn die USB-Bandbreite ausreichend groß ist, kann es zu Kollisionen und Verzögerungen kommen, wenn andere Geräte am selben Port angeschlossen sind (Sie können einen Hub hinzufügen, aber alle Ports auf dem Controller sind immer noch derselbe Port). Es geht also noch viel weiter.

Ein eigener (IRQ bedeutet, dass eine ältere Tastatur die CPU-Verarbeitung bei Bedarf unterbrechen kann. Bei USB verfügt die Tastatur über keinen solchen Mechanismus und kann nur einige Daten senden und warten / hoffen, dass der USB-Controller die CPU unterbricht irgendwann.

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

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

Bildbeschreibung hier eingeben

Synetech
quelle
Ich bin nicht so sehr auf Geschwindigkeit als auf Priorität bedacht: Ich verstehe, dass ein längerer Datenpfad dazu führen kann, dass mein Tastendruck wartet. aber ich denke über "Chancen, dass der Tastenanschlag auf einem fehlerhaften System verloren gehen würde" nach, was meiner Meinung nach nicht von der Pfadlänge abhängt.
PPC
Wie kann der IRQ in der Software verarbeitet werden, bevor er auf die CPU trifft? Haben APICs eigene Prozessoren? Mit ihren Routinen im zentralen Speicher? Leihen sie sich CPU-Zeit aus?
PPC
> "Chancen, dass der Tastendruck bei einem fehlerhaften System verloren geht" Es hängt vom Fehler ab, aber ja, offensichtlich besteht bei einer USB-Tastatur aufgrund der zusätzlichen Komplexität eine viel höhere Wahrscheinlichkeit, dass Tastendruck verloren geht. > Betreff: APICs Ja, sie haben einen Prozessor, der ein gewisses Maß an Verarbeitung leistet, genau wie der Tastaturcontroller einen Prozessor, Grafikkarten mit GPUs usw. Die meiste Hardware hat eine Art Chip, der eine gewisse Verarbeitung übernimmt.
Synetech
> Wie kann der IRQ in der Software verarbeitet werden, bevor er auf die CPU trifft? Eine USB-Tastatur verfügt nicht nur über Treiber, sondern auch über Treiber für den USB-Controller. Die Tastaturdaten gehen nicht direkt an die CPU, sondern es macht seinen Weg über die Tastatur an den USB - Controller, um seine Fahrer, auf die Tastatur - Laufwerk, dann an die CPU oder andere Software wie nötig, so einige Dinge wie Ctrl+Alt+Deldon‘ Sie arbeiten nicht über eine Hardware-Leitung, sondern werden über Software verarbeitet.
Synetech
Also, wenn ich Sie gut verstehe, wäre der grundlegende Datenfluss meines Tastenanschlags: USB-Controller, APIC, CPU-Eingang über Low-PRI-IRQ, USB-ISR / IST, CPU-selbstgenerierter IRQ (wie ein TRAP), Tastatur-ISR / IST? Auf diese Weise ist die relevante Priorität die des USB-Controllers. In meiner Frage dachte ich, dass der USB-Controller die USB-Pakete in echte Tastatur-IRQs übersetzen könnte.
PPC
14

Kurze Antwort

Beide Tastaturen würden für den Code auf Benutzerebene absolut die gleiche Leistung erbringen. Beim Schreiben von Gerätetreibern kann es zu kleinen Unterschieden kommen ( Nanosekunden bis Mikrosekunden auf einem modernen PC). Wenn das System hängen bleibt, können beide Tastaturen das Problem nicht lösen. Machen Sie einen harten Neustart.


Lange Antwort TL; DR;

Was ist ein Interrupt?

Wenn Hardware (oder ein kritischer Teil der betriebssysteminternen Software, wie der Kernel) einen Prozessordienst benötigt, wird eine Nachricht oder ein Interrupt ausgelöst , die bzw. der den Prozessor auffordert, alle Aktionen zu verschieben und diese Anforderung zu verarbeiten.

Wie es funktioniert?

Wenn die Hardware einen Interrupt generiert (z. B. einen Tastendruck), wird diese Anforderung an einen Interrupt-Controller gesendet. Die Steuerung unterbricht die CPU dann sofort in einer einzigen Zeile ihres Maschinencodes (die CPU führt die letzte Zeile noch aus). Sobald der Prozessor bereit ist, diese Anforderung zu bearbeiten, fordert er von einem Interrupt-Controller eine Interrupt-Anforderung (IRQ) und eine Verarbeitungsroutine an. Interrupt-Controller hat eine interne Datenstruktur - 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 genau definierten IRQL ( Interrupt Request Level ). Auf x86-Systemen gibt es beispielsweise 32 IRQLs, und auf x64 und IA64 gibt es tatsächlich weniger - 16 IRQLs. Es ist klar, dass es mehr Hardware- und Softwaredienste als IRQLs gibt, was bedeutet, dass alle Systemobjekte IRQLs gemeinsam nutzen.

IRQLs-Tabelle für x64

    IRQL | Beschreibung
--------------------------------------------
    15 | Hoch / Profil
    14 | Interprozessor Interrupt / Power
    13 | Uhr
    12 | Synchronisieren
    11 | Gerät N
    .. | ...
     3 | Gerät 1
     2 | Versand / DPC
     1 | APC
     0 | Passiv / Niedrig

Höhere IRQL (mit größerer Anzahl) haben höhere Priorität. Alle Komponenten eines Systems versuchen, den aktuellen IRQL-Wert eines Prozessors auf dem niedrigstmöglichen Wert (0) zu halten. Tritt ein Interrupt auf höherer Ebene auf, wird der aktuelle IRQL-Wert eines Prozessors angehoben und die Interrupts mit niedrigerer Ebene werden erst verarbeitet Alle Interrupts mit höheren Pegeln werden aufgelöst. IRQ kann im Stapelbetrieb verarbeitet werden, wenn der IRQ-Scheduler mehrere IRQs derselben Ebene für die Prozessorausführung in die Warteschlange stellen kann.

Was ist der Sinn?

Dies alles wurde sehr gut entwickelt, um den Endbenutzer von der Komplexität der Hardware zu trennen und eine universelle Architektur zu schaffen, die mit vielen Arten von Hardware / Software arbeiten kann.

  1. Code auf Benutzerebene (dh nicht auf Kernelebene) wird nur ausgeführt, wenn sich der Prozessor im Passiv / Niedrig (0) -IRQL befindet. Das Wichtigste ist, dass Sie ein Ereignis mit gedrückter Taste in Ihrer Anwendung nur dann verarbeiten können, wenn alle IRQLs verarbeitet wurden. Daher spielt es für eine Tastatur keine Rolle, welche IRQL dem Hardware-Interrupt zugewiesen ist.

  2. IRQL sind nur OS-Abstraktionen und nicht in Stein gemeißelt . Entsprechende IRQs und IRQLs 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 auf einige IRQ-Kanäle zugreifen kann, kann die Tastatur keinen IRQ mit einer so hohen Priorität wie ein anderer Controller (z. B. PS2) erhalten.

Vielleicht meinte der Autor weniger IRQL als weniger IRQ-Kanäle . Auf jeden Fall spielt es keine Rolle, da es für den Benutzer auf keinem modernen PC sichtbar ist. Die möglichen Unterschiede liegen zwischen Nanosekunden und Mikrosekunden und treten nur auf Kernelebene auf. In beiden Fällen wird Code auf Benutzerebene vom Betriebssystemkern blockiert.

Bedeutet dies (wenn es stimmt), dass USB-Tastaturen weniger ansprechend sind als Tastaturen, die an einen anderen Anschlusstyp angeschlossen sind?

Es ist nicht wahr, weil das Betriebssystem so konzipiert ist. Wenn das Betriebssystem mit etwas beschäftigt und "langsam" ist, verhalten sich beide Tastaturen identisch.

Nehmen Sie zum Beispiel eine USB-Tastatur, die einem IRQ mittlerer Priorität zugeordnet ist, auf einem fehlerhaften System, das an einer anderen Interruptroutine mittlerer Priorität hängt

In diesem Fall wird das System BSOD, IRQ-Behandlungsroutinen müssen bis zu einem bestimmten Standard entworfen werden (wie sie müssen schnell, synchron, nicht blockierend usw. sein). Jede Abweichung von diesem und dem Kernel wird BSOD.

Aufgrund der relativ gleichen Priorität werden Tastaturereignisse ignoriert und Sie können weder Strg-Alt-Entf noch andere Nottastenanschläge senden.

Wenn das System hängen bleibt, kann vieles schief gehen, aber höchstwahrscheinlich wird der Tastaturbefehl IRQL auf Treiberebene gehandhabt. Das Problem ist, dass es nicht an die Anwendung gesendet wird, die eine solche Benachrichtigung abonniert hat, da das Betriebssystem gerade mit anderen Aufgaben beschäftigt ist.

oleksii
quelle
Die Anwendung, die ich anvisiere, ist der Fenstermanager (einfacher Fall) oder das Betriebssystem. Ich erwarte, dass meine CPU ihre USB-ähnliche IRQL-Verarbeitung fallen lässt, um meine Synchronisierungsdisketten sauber zu empfangen, bevor ich Sie neu
PPC
>> Bedeutet dies, dass USB-Kbds weniger ansprechbar sind: Können Sie Ihre Nein-Antwort genau beschreiben?
PPC
@PPC Wenn Sie einen Gerätetreiber entwerfen, ist die Geschwindigkeit von USB-Kbit möglicherweise für Nano- bis Mikrosekunden langsamer. Wenn Sie an einem Code auf Benutzerebene interessiert sind, bleibt der Code blockiert, wenn IRQL der Ebene> 1 verarbeitet wird. Es spielt also keine Rolle, ob kbd IRQL dem höchsten IRQL oder dem mittleren IRQL entspricht. Benutzercode ist gesperrt.
oleksii