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?
Antworten:
Es geht nicht um den IRQ-Bereich, sondern um drei Hauptfaktoren:
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:
quelle
Ctrl+Alt+Del
don‘ Sie arbeiten nicht über eine Hardware-Leitung, sondern werden über Software verarbeitet.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
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.
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.
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
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.
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.
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.
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.
quelle