Oto stwierdzenie, o którym właśnie pomyślałem. Czy ktoś może mi powiedzieć, czy i dlaczego to prawda?
Oświadczenie: Ponieważ klawiatury USB opierają się na ogólnym sterowniku i architekturze USB, która ma dostęp tylko do niższych poziomów IRQ, nie może dać klawiaturze dostępu do IRQ o tak wysokim priorytecie jak inny (powiedzmy PS2) kontroler.
Czy to (jeśli to prawda) oznacza, że klawiatury USB miałyby niższy priorytet (pod względem dostępności więcej niż szybkość) niż klawiatury podłączone do innego typu portu (np. PS2)?
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. 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 klawiatura ma wyższy priorytet, system może wprowadzić procedurę Przerwanie naciśnięcia klawisza.
Czy kontroler USB ma wystarczający zakres IRQ (ciągły priorytet czy nie), aby nadać klawiaturze priorytet, którego potrzebuje (zasadniczo tuż poniżej awarii zasilania)?
A co z wirtualnymi klawiaturami zmapowanymi przez połączenie sieciowe w sesji zdalnego pulpitu?
EDYCJA: Moje pytanie nie dotyczy dużo szybkości (patrz komentarze): główne pytanie brzmi: czy klawiatura PS2 ma większe szanse na rozmowę z procesorem, który utknął gdzieś na priorytecie przerwania wyższym niż USB i niższym niż klawiatura?
Odpowiedzi:
Nie chodzi o zakres IRQ, chodzi o trzy główne czynniki:
W przeszłości klawiatury i myszy miały dedykowane IRQ (IRQ1 dla klawiatur, IRQ12 dla myszy PS / 2).
Oznaczało to, że po naciśnięciu klawisza miał prawie bezpośrednią linię do procesora (przez PIC; ale tylko jeden odskoczył). Dzięki temu zdarzenia na klawiaturze były przetwarzane bardzo szybko sprzętowo, zwłaszcza, że miał IRQ1. (Oczywiście chodzi tu o normalne użycie klawiatury i ignoruje linię zerowania, która przechodzi od kontrolera klawiatury bezpośrednio do procesora).
Z drugiej strony wszystkie urządzenia USB współużytkują tę samą magistralę i IRQ kontrolera USB (który zwykle jest jednym z tych sterujących IRQ, które jest współdzielone z innymi urządzeniami, takimi jak karty sieciowe, karty graficzne i tym podobne). W związku z tym za pomocą klawiatury USB zdarzenia przechodzą od kontrolera klawiatury, przez magistralę USB do kontrolera hosta USB, stamtąd, do dodatkowego PIC, następnie do głównego PIC, a następnie do sterowników w systemie operacyjnym lub BIOS , a następnie na procesor. Ponadto do danych przesyłanych przez USB dodano dane sprawdzające błędy.
Innymi słowy, po prostu więcej dzieje się z klawiaturą USB niż z klawiaturą AT lub PS / 2. Ścieżka danych jest dłuższa i jest więcej danych, a może nawet trzeba przejść przez oprogramowanie . Mimo że przepustowość USB jest wystarczająco duża, posiadanie innych urządzeń na tym samym porcie powoduje kolizje i opóźnienia (możesz dodać koncentrator, ale wszystkie porty na nim są nadal takie same na kontrolerze). Więc dzieje się o wiele więcej.
Ponadto posiadanie własnego (IRQ oznaczało, że starsza klawiatura może przerywać przetwarzanie procesora, gdy zajdzie taka potrzeba). W przypadku USB klawiatura nie ma takiego mechanizmu i może jedynie wysyłać niektóre dane i czekać / mieć nadzieję, że kontroler USB przerwie procesor w pewnym momencie.
Klawiatury wirtualne są jeszcze gorsze, ponieważ zdecydowanie przechodzą przez oprogramowanie, które oczywiście nie może konkurować z linią sprzętową.
Oto prosta wizualizacja różnicy między klawiaturą AT lub PS / 2 a klawiaturą USB:
źródło
Ctrl+Alt+Del
don” t działają za pośrednictwem linii sprzętowej, ale są raczej przetwarzane za pomocą oprogramowania.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
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
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.
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.
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.
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.
źródło