Архитектура компьютера: USB-клавиатуры менее чувствительны из-за узкого диапазона IRQ?


19

Вот заявление, о котором я только что подумал. Может кто-нибудь сказать мне, правда ли и почему?

Заявление: поскольку USB-клавиатуры основаны на универсальном драйвере и архитектуре USB, которые имеют доступ только к более низким уровням IRQ, она не может предоставить клавиатуре доступ к IRQ с таким высоким приоритетом, как у другого (скажем, PS2) контроллера.

Означает ли это (если это правда), что клавиатуры USB будут иметь более низкий приоритет (с точки зрения доступности, а не скорости), чем клавиатуры, подключенные к другому типу порта (например, PS2)?

Возьмите, например, клавиатуру USB, сопоставленную с IRQ со средним приоритетом, в неисправной системе, которая застряла в другой программе прерывания со средним приоритетом. Из-за относительно одинакового приоритета события клавиатуры будут игнорироваться, и вы не сможете отправить Ctrl-Alt-del или любое другое экстренное нажатие клавиши. Если бы клавиатура имела более высокий приоритет, система могла бы ввести процедуру прерывания нажатия клавиши.

Или у контроллера USB достаточно диапазона IRQ (будь то непрерывный приоритет или нет), чтобы дать вашей клавиатуре необходимый приоритет (в основном чуть ниже сбоя питания)?

А как насчет виртуальных клавиатур, отображаемых через сетевое соединение в сеансе удаленного рабочего стола?

РЕДАКТИРОВАТЬ: Мой вопрос не столько о скорости (см. Комментарии): основной вопрос: есть ли у клавиатуры PS2 больше шансов говорить с процессором, который застрял где-то с приоритетом прерывания выше, чем USB и ниже, чем клавиатура?


2
Интересно, верно ли то же самое для мышей USB. Мой, конечно, так кажется после переключения интерфейса (но не самой мыши) несколько месяцев назад.
Мартино

Если это верно для клавиатуры, то, скорее всего, то же самое для мышей; но, вероятно, менее важно, поскольку для мыши нет экстренных нажатий клавиш
PPC

Я не думаю, что это что-то разумное, чтобы беспокоиться. Если вы это сделаете, и клавиатура заклинит, сетевые интерфейсы будут голодать, и вы не сможете управлять системой удаленно. Кажется, вы просто меняете одну проблему на другую.
Дэвид Шварц

1
@DavidSchwartz: Это в основном теоретический вопрос, взятый с точки зрения компьютерного архитектора. Тем не менее, есть одно приложение из PoV пользователя: «Мой компьютер завис, не отвечает на Ctrl-Alt-Backspace: я должен искать клавиатуру PS2 или забыть ее и выполнить полную перезагрузку»
PPC

2
@PPC: Ctl-alt-del скорее всего не сработает. Процесс перезагрузки контролируется программным обеспечением высокого уровня, которое закрывает программы, сбрасывает кэш и т. Д. В случае шторма прерывания программное обеспечение высокого уровня не будет работать.
Дэвид Шварц

Ответы:


17

Речь идет не о диапазоне IRQ, а о трех основных факторах:

  1. Количество автобусов
  2. Количество данных
  3. Длина пути данных

В прошлом клавиатуры и мыши имели выделенный IRQ (IRQ1 для клавиатур, IRQ12 для мышей PS / 2).

Это означало, что когда клавиша была нажата, она имела почти прямую линию с процессором (через PIC; но все же, только один прыжок). Это позволило аппаратно обрабатывать события клавиатуры очень быстро, особенно с учетом IRQ1. (Конечно, это все о нормальном использовании клавиатуры и игнорирует строку сброса, которая идет от контроллера клавиатуры непосредственно к ЦПУ.)

С другой стороны, все USB-устройства используют одну и ту же шину и IRQ контроллера USB (который обычно является одним из управляющих IRQ, который используется совместно с другими устройствами, такими как сетевые карты, видеокарты и т. Д.). Таким образом, с клавиатурой USB события передаются с контроллера клавиатуры, через шину USB в хост-контроллер USB, оттуда на вторичный PIC, затем на главный PIC, а затем либо на драйверы в ОС, либо в BIOS. , затем на процессор. Кроме того, есть данные проверки ошибок, добавленные к данным, переданным через USB.

Другими словами, с клавиатурой USB происходит больше всего, чем с клавиатурой AT или PS / 2. Путь данных длиннее, данных больше, и, возможно, даже придется пройти через программное обеспечение . Несмотря на то, что пропускная способность USB достаточно велика, наличие других устройств на одном и том же порте вызывает коллизии и задержки (вы можете добавить концентратор, но все порты на нем все равно будут одним и тем же портом на контроллере). Таким образом, происходит гораздо больше ожидания.

Кроме того, наличие собственного (IRQ означало, что старая клавиатура могла прерывать обработку ЦП всякий раз, когда это было необходимо. С USB клавиатура не имеет такого механизма и может только отправлять некоторые данные и ждать / надеяться, что контроллер USB прервет ЦП в какой-то момент.

Виртуальные клавиатуры еще хуже, потому что они определенно проходят через программное обеспечение, которое, конечно, не может конкурировать с аппаратной линией.

Вот простая визуализация различия между клавиатурой AT или PS / 2 и клавиатурой USB:

введите описание изображения здесь


Я не столько в скорости, сколько в приоритете: я понимаю, что более длинный путь к данным может заставить мое нажатие ждать; но я думаю о «вероятности того, что нажатие клавиши будет потеряно в неисправной системе», что, я думаю, не зависит от длины пути.
КПП

Как можно обработать IRQ в программном обеспечении ДО удара ЦП? Есть ли у APIC свои процессоры? С их рутины в центральной памяти? Они «занимают» процессорное время?
КПП

> «вероятность того, что нажатие клавиши будет потеряно в неисправной системе». Это зависит от ошибки, но, конечно, клавиатура USB имеет гораздо больше шансов потерять нажатия клавиш из-за дополнительной сложности. > Re: APICs Да, у них есть процессор, который выполняет некоторый уровень обработки, точно так же, как у контроллера клавиатуры есть процессор, у видеокарт есть графические процессоры и т. Д. Большинство аппаратных средств имеет своего рода чип, который обрабатывает некоторую обработку.
Synetech

> Как можно обработать IRQ в программном обеспечении ДО удара ЦП? Драйверы USB имеют не только свои драйверы, но и контроллер USB. Данные клавиатуры не попадают прямо в процессор, вместо этого они проходят через клавиатуру к контроллеру USB, к его драйверу, к приводу клавиатуры, затем к процессору или другому программному обеспечению, если это необходимо, поэтому некоторые вещи, такие как Ctrl+Alt+Deldon ' работают через аппаратную линию, а обрабатываются программно.
Synetech

Итак, если я хорошо вас понял, основной поток данных моего нажатия клавиш был бы: контроллер USB, APIC, вход процессора через IRQ низкого уровня, USB ISR / IST, самозапрошенный процессор IRQ (как TRAP), клавиатура ISR / IST? Таким образом, соответствующий приоритет у контроллера USB ..? В моем вопросе я подумал, что USB-контроллер может преобразовать USB-пакет (ы) в реальный IRQ клавиатуры.
КПП

14

Короткий ответ

Обе клавиатуры будут работать абсолютно одинаково для кода уровня пользователя. При написании драйверов устройств могут быть небольшие различия (от нано до микросекунд на современном ПК). Если система зависнет, обе клавиатуры не решат проблему. Перейти на полную перезагрузку.


Длинный ответ TL; DR;

Что такое прерывание?

Когда аппаратному обеспечению (или некоторой критической части внутреннего программного обеспечения ОС, например ядру) требуется служба процессора, оно запускает сообщение или прерывание , которое просит процессор отложить все, что он делает, и обработать этот запрос.

Как это устроено?

Когда аппаратное обеспечение генерирует прерывание (например, нажатие клавиши), этот запрос поступает в контроллер прерываний. Затем контроллер немедленно прерывает процессор на одной строке своего машинного кода (процессор все еще выполняет эту последнюю строку). Как только процессор готов обслуживать этот запрос, он запрашивает у контроллера прерываний запрос прерывания (IRQ) и подпрограмму обработки. Контроллер прерываний имеет внутреннюю структуру данных - Таблицу отправки прерываний, которая содержит указатель на подпрограмму, которая должна выполняться ЦП для определенного IRQ.

Все различные прерывания соответствуют четко определенному ограниченному уровню запроса прерывания (IRQL). Например, в системах x86 существует 32 IRQL, а в x64 и IA64 их на самом деле меньше - 16 IRQL. Очевидно, что аппаратных устройств и программных служб больше, чем IRQL, что означает, что все некоторые системные объекты будут использовать IRQL.

Таблица IRQL для x64

    IRQL | Описание
--------------------------------------------
    15 | Высокий профиль
    14 | Межпроцессорное прерывание / Питание
    13 | Часы
    12 | Синхронизация
    11 | Устройство N
    .. | ...
     3 | Устройство 1
     2 | Отправка / DPC
     1 | APC
     0 | Пассивная / Low

Более высокий IRQL (с большим числом) имеет более высокий приоритет. Все компоненты системы пытаются поддерживать текущий IRQL процессора на минимально возможном уровне - 0. Если происходит прерывание более высокого уровня, то текущий уровень IRQL процессора повышается, и прерывания с более низким уровнем не будут обрабатываться до тех пор, пока все прерывания с более высокими уровнями разрешены. IRQ может обрабатываться партиями, если планировщик IRQ может поставить в очередь несколько IRQ одного и того же уровня для выполнения процессором.

Какой смысл?

Все это было действительно хорошо разработано, чтобы отделить конечного пользователя от сложностей аппаратного обеспечения и создать универсальную архитектуру, которая может работать со многими типами аппаратного / программного обеспечения.

  1. Код уровня пользователя (т.е. не уровня ядра) выполняется только тогда, когда процессор находится на уровне пассивного / низкого (0) IRQL. Дело в том, что вы можете обрабатывать событие нажатия клавиши в вашем приложении только после того, как все IRQL были обработаны. Поэтому для клавиатуры не имеет значения, какой IRQL назначен аппаратному прерыванию.

  2. IRQL являются только абстракциями ОС и не установлены в камне . Соответствующие IRQ и IRQL хранятся в реестре Windows (например), и любой увлеченный пользователь может изменить их вручную.

Выводы

Цитаты из вопроса

Поскольку клавиатура USB использует универсальный драйвер USB и архитектуру, которая имеет доступ только к нескольким каналам IRQ, она не может предоставить клавиатуре доступ к IRQ с таким высоким приоритетом, как для другого контроллера (скажем, PS2).

Возможно, автор имел в виду более низкий IRQL вместо меньшего количества каналов IRQ . В любом случае, это не имеет значения, так как это не видно пользователю на любом современном ПК. Возможные отличия от нано- до микро- секунд уровня и они происходят только на уровне ядра. В обоих случаях код уровня пользователя блокируется ядром ОС.

Означает ли это (если это правда), что USB-клавиатуры будут менее чувствительными, чем клавиатуры, подключенные к другому типу порта?

Это не правда из-за способа разработки ОС. Если ОС чем-то занята и работает медленно, обе клавиатуры будут вести себя одинаково.

Возьмите, например, клавиатуру USB, сопоставленную с IRQ со средним приоритетом, в неисправной системе, которая застряла в другой программе прерывания со средним приоритетом.

В этом случае система будет BSOD, процедуры обработки IRQ должны быть разработаны до определенного стандарта (например, они должны быть быстрыми, синхронными, неблокирующими и т. Д.). Любое отклонение от этого и у ядра будет BSOD.

Из-за относительно одинакового приоритета события клавиатуры будут игнорироваться, и вы не сможете отправить Ctrl-Alt-del или любое другое экстренное нажатие клавиши.

Если система зависает, есть много вещей, которые могут пойти не так, но, скорее всего, нажатие клавиши IRQL будет обработано на уровне драйвера. Проблема в том, что оно не будет доставлено в приложение, которое подписалось на такое уведомление, так как ОС занята чем-то другим.


Приложение, которое я нацеливаю, - это оконный менеджер (простой случай) или сама ОС. Я ожидаю, что мой ЦП прекратит свою обработку USB-like-IRQL, чтобы чисто получить мои sync-disk-before-I-reboot-you
PPC

>> Означает ли это, что USB kbds менее отзывчивы: не могли бы вы подробно ответить «нет»?
КПП

@PPC Если вы разрабатываете драйвер устройства, то USB kbds может быть медленнее в течение нано-микросекунд. Если вас интересует какой-либо код пользовательского уровня, то этот код остается заблокированным при обработке любого IRQL уровня> 1. Так что не имеет значения, равен ли kbd IRQL максимальному IRQL или среднему IRQL. Код пользователя заблокирован.
Алексей
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.