Krótka odpowiedź
Obie klawiatury działałyby absolutnie równo dla kodu na poziomie użytkownika. Mogą występować niewielkie różnice (od nano do mikro sekund na nowoczesnym komputerze), jeśli napiszesz sterowniki urządzeń. Jeśli system zawiesi się, obie klawiatury nie rozwiążą problemu. Przejdź na twardy restart.
Długa odpowiedź TL; DR;
Co to jest przerwanie?
Gdy sprzęt (lub niektóre krytyczne oprogramowanie wewnętrzne systemu operacyjnego, takie jak jądro) wymaga usługi procesora, uruchamia komunikat lub przerwanie , które żąda od procesora odroczenia tego, co robi, i obsłużenia tego żądania.
Jak to działa?
Gdy sprzęt generuje przerwanie (np. Naciśnięcie klawisza), to żądanie trafia do kontrolera przerwań. Następnie kontroler natychmiast przerywa procesor w jednym wierszu kodu maszynowego (procesor nadal wykonuje ten ostatni wiersz). Gdy procesor jest gotowy do obsługi tego żądania, prosi kontroler przerwań o żądanie przerwania (IRQ) i procedurę obsługi. Kontroler przerwań ma wewnętrzną strukturę danych - tablicę wysyłania przerwań, która zawiera wskaźnik do procedury, która ma być wykonywana przez CPU dla określonego przerwania.
Wszystkie różne przerwań odpowiadają dobrze zdefiniowanemu ograniczonemu poziomowi żądania przerwania (IRQL). Na przykład na systemach x86 jest 32 IRQL, a na x64 i IA64 jest ich mniej - 16 IRQL. Oczywiste jest, że istnieje więcej urządzeń i usług programowych niż IRQL, co oznacza, że wszystkie obiekty systemowe będą współdzielić IRQL.
Tabela IRQL dla x64
IRQL | Opis
--------------------------------------------
15 | Wysoki profil
14 | Interprocessor interrupt / Power
13 | Zegar
12 | Synchronizacja
11 | Urządzenie N
.. | ...
3 | Urządzenie 1
2 | Wysyłka / DPC
1 | APC
0 | Pasywny / niski
Wyższy IRQL (z większą liczbą) ma wyższy priorytet. Wszystkie komponenty systemu próbują utrzymać bieżący IRQL procesora na najniższym możliwym poziomie - 0. Jeśli wystąpi przerwanie na wyższym poziomie, wówczas aktualny poziom IRQL procesora zostanie podniesiony, a przerwania na niższym poziomie nie będą obsługiwane, dopóki wszystkie przerwania o wyższych poziomach są rozpatrywane. Przerwanie IRQ może być obsługiwane wsadowo, jeśli program planujący przerwania IRQ może kolejkować kilka przerwań IRQ tego samego poziomu w celu wykonania procesora.
O co chodzi?
Wszystko to zostało naprawdę dobrze zaprojektowane, aby oddzielić użytkownika końcowego od złożoności sprzętu i stworzyć uniwersalną architekturę, która może współpracować z wieloma rodzajami sprzętu / oprogramowania.
Kod na poziomie użytkownika (tj. Nie na poziomie jądra) jest wykonywany tylko wtedy, gdy procesor jest w pasywnym / niskim (0) IRQL. Chodzi o to, że możesz obsłużyć zdarzenie naciśnięcia klawisza w aplikacji tylko po obsłużeniu wszystkich IRQL. Dlatego dla klawiatury nie ma znaczenia, jaki IRQL jest przypisany do przerwania sprzętowego.
IRQL to tylko abstrakcje systemu operacyjnego i nie są osadzone w kamieniu . Odpowiednie IRQ i IRQL są przechowywane w rejestrze systemu Windows (na przykład), a każdy entuzjastyczny użytkownik może je zmienić ręcznie.
Wnioski
Cytaty z pytania
Ponieważ klawiatury USB opierają się na ogólnym sterowniku i architekturze USB, która ma dostęp tylko do kilku kanałów IRQ, nie może dać klawiaturze dostępu do IRQ o tak wysokim priorytecie jak inny (powiedzmy PS2) kontroler.
Być może autor miał na myśli niższy IRQL zamiast mniejszej liczby kanałów IRQ . W każdym razie nie ma to większego znaczenia, ponieważ nie jest widoczne dla użytkownika na żadnym nowoczesnym komputerze. Możliwe różnice dotyczą poziomu od nano do mikro sekund i występują tylko na poziomie jądra. W obu przypadkach kod na poziomie użytkownika jest blokowany przez jądro systemu operacyjnego.
Czy to (jeśli to prawda) oznacza, że klawiatury USB byłyby mniej wrażliwe niż klawiatury podłączone do innego typu portu?
Nie jest to prawdą z powodu sposobu zaprojektowania systemu operacyjnego. Jeśli system operacyjny jest zajęty czymś i jest „wolny”, obie klawiatury będą zachowywać się identycznie.
Weźmy na przykład klawiaturę USB zmapowaną na IRQ o średnim priorytecie, na wadliwym systemie, który utknął w innej procedurze przerwań o średnim priorytecie
W takim przypadku system będzie BSOD, procedury obsługi IRQ muszą być zaprojektowane zgodnie z określonym standardem (na przykład muszą być szybkie, synchroniczne, nieblokujące itd.). Wszelkie odchylenia od tego i jądra będą BSOD.
Ze względu na względnie równy priorytet zdarzenia na klawiaturze będą ignorowane i nie będzie można wysłać Ctrl-Alt-del ani żadnego innego klawisza alarmowego.
Jeśli system zawiesi się, istnieje wiele rzeczy, które mogą pójść nie tak, ale najprawdopodobniej naciśnięcie klawisza IRQL zostanie wykonane na poziomie sterownika. Problem polega na tym, że nie zostanie dostarczony do aplikacji, która zasubskrybowała takie powiadomienie, ponieważ system operacyjny jest zajęty robieniem czegoś innego.