Architektura komputera: czy klawiatury USB są mniej responsywne z powodu wąskiego zakresu IRQ?

19

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?

PPC
źródło
2
Zastanawiam się, czy to samo dotyczy myszy USB. Mój z pewnością tak wygląda po zmianie interfejsu (ale nie samej myszy) kilka miesięcy temu.
martineau,
Jeśli tak jest w przypadku klawiatury, najprawdopodobniej jest tak samo w przypadku myszy; ale prawdopodobnie mniej ważne, ponieważ nie ma żadnych awaryjnych naciśnięć klawiszy dla myszy
PPC
Nie sądzę, że jest to coś rozsądnego, aby się o to martwić. Gdybyś to zrobił, a klawiatura utknęła, interfejsy sieciowe byłyby głodne i nie można zdalnie sterować systemem. Wygląda na to, że po prostu zamieniasz jeden problem na inny.
David Schwartz
1
@DavidSchwartz: Jest to głównie pytanie teoretyczne i wzięte z punktu widzenia architekta komputerowego. Mimo to istnieje jedna aplikacja z PoV użytkownika: „mój komputer utknął, nie reaguje na Ctrl-Alt-Backspace: czy powinienem poszukać klawiatury PS2, czy zapomnieć o niej i uruchomić ponownie”
PPC
2
@PPC: Ctl-alt-del prawdopodobnie i tak by nie działał. Proces ponownego uruchamiania jest kontrolowany przez oprogramowanie wysokiego poziomu, które zamyka programy, opróżnia pamięci podręczne i tak dalej. W przypadku burzy z przerwami oprogramowanie wysokiego poziomu nie będzie działać.
David Schwartz

Odpowiedzi:

17

Nie chodzi o zakres IRQ, chodzi o trzy główne czynniki:

  1. Ilość zatłoczonych autobusów
  2. Ilość danych
  3. Długość ścieżki danych

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:

wprowadź opis zdjęcia tutaj

Synetech
źródło
Nie zależy mi na szybkości niż priorytecie: rozumiem, że dłuższa ścieżka danych może spowodować, że moje naciśnięcie klawisza będzie czekać; ale myślę o „szansach, że naciśnięcie klawisza zostanie utracone w wadliwym systemie”, co moim zdaniem nie zależy od długości ścieżki.
PPC
Jak można przerwać IRQ w oprogramowaniu PRZED uderzeniem w procesor? Czy APIC mają własne procesory? Z ich procedurami w centralnej pamięci? Czy „pożyczają” czas procesora?
PPC
> „szanse, że naciśnięcie klawisza zostanie utracone w wadliwym systemie” Zależy to od usterki, ale tak, oczywiście klawiatura USB ma znacznie większą szansę na utratę klawiszy z powodu dodatkowej złożoności. > Re: APIC Tak, mają procesor, który wykonuje pewien poziom przetwarzania, tak jak kontroler klawiatury ma procesor, karty graficzne mają układy GPU itp. Większość sprzętu ma pewien układ, który obsługuje pewne przetwarzanie.
Synetech,
> Jak można przerwać IRQ w oprogramowaniu PRZED uderzeniem w procesor? Klawiatura USB ma nie tylko sterowniki, ale także kontroler USB. Dane klawiatura nie iść prosto do procesora, a nie to sprawia, że jego sposób poprzez klawiaturę do kontrolera USB, do jego kierowcy, do napędu klawiatury, a następnie do procesora lub innego oprogramowania, co potrzebne, więc niektóre rzeczy jak Ctrl+Alt+Deldon” t działają za pośrednictwem linii sprzętowej, ale są raczej przetwarzane za pomocą oprogramowania.
Synetech,
Tak więc, jeśli dobrze cię zrozumiem, podstawowy przepływ danych mojego naciśnięcia klawisza byłby następujący: kontroler USB, APIC, CPU In poprzez IRQ Low-pri, USB ISR / IST, IRQ generowane przez CPU (jak TRAP), klawiatura ISR / IST? W ten sposób odpowiedni priorytet ma kontroler USB ..? W moim pytaniu pomyślałem, że kontroler USB może przetłumaczyć pakiety USB na rzeczywiste przerwanie klawiatury.
PPC
14

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.

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

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

oleksii
źródło
Aplikacja, na którą celuję, to menedżer okien (łatwa sprawa) lub sam system operacyjny. Oczekuję, że mój procesor porzuci przetwarzanie USB-jak-IRQL, aby czysto otrzymać dyski synchronizacji przed ponownym uruchomieniem
PPC
>> Czy to oznacza, że ​​USB kbds jest mniej responsywny: czy możesz szczegółowo opisać swoją odpowiedź „nie”?
PPC
@PPC, jeśli zaprojektujesz sterownik urządzenia, USB kbds może być wolniejszy przez nano- lub mikro sekundy. Jeśli interesuje Cię jakikolwiek kod na poziomie użytkownika, kod pozostaje zablokowany, gdy obsługiwany jest dowolny IRQL poziomu> 1. Więc nie ma znaczenia, czy IRB kbd jest równy najwyższemu IRQL, czy średniemu IRQL. Kod użytkownika jest zablokowany.
oleksii