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

3545
PPC

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

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

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

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

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

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

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

18
Интересно, верно ли то же самое для мышей USB. Мой, конечно, так кажется после переключения интерфейса (но не самой мыши) несколько месяцев назад. martineau 12 лет назад 2
Если это верно для клавиатуры, то, скорее всего, то же самое для мышей; но, вероятно, менее важно, поскольку нет никаких чрезвычайных нажатий клавиш мыши PPC 12 лет назад 0
Я не думаю, что это что-то разумное, чтобы беспокоиться. Если вы сделаете это, и клавиатура заклинит, сетевые интерфейсы будут голодать, и вы не сможете управлять системой удаленно. Кажется, вы просто меняете одну проблему на другую. David Schwartz 12 лет назад 0
@DavidSchwartz: Это в основном теоретический вопрос, взятый с точки зрения компьютерного архитектора. Тем не менее, есть одно приложение из PoV пользователя: «Мой компьютер зависает, не отвечает на Ctrl-Alt-Backspace: я должен искать клавиатуру PS2 или забыть ее и выполнить полную перезагрузку» PPC 12 лет назад 1
@PPC в ответ на ваши изменения. Если система зависнет, обе клавиатуры не решат проблему. Перейти на полную перезагрузку. oleksii 12 лет назад 0
@PPC: Ctl-alt-del скорее всего не сработает. Процесс перезагрузки контролируется программным обеспечением высокого уровня, которое выключает программы, очищает кэш и т. Д. В случае шторма прерывания программное обеспечение высокого уровня не будет работать. David Schwartz 12 лет назад 2
Я думаю, что разница IRQ незначительна по сравнению с разницей в опросе. PS / 2 ограничен 100 Гц, в то время как USB по умолчанию 125, с возможностью опроса на 1000 Гц. Я с трудом представляю, как USB-вход застревает в USB-контроллере или шине PCIe более чем на 5 миллисекунд. Ampersand 12 лет назад 0
@Ampersand: я не очень беспокоюсь о скорости: я хочу иметь более высокую вероятность того, что мое нажатие поразит ядро, если что-то пойдет не так PPC 12 лет назад 0
@PPC: Даже если ядро ​​ничего не может с этим поделать? David Schwartz 12 лет назад 0

2 ответа на вопрос

16
Synetech

Речь идет не о диапазоне 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:

Я не столько в скорости, сколько в приоритете: я понимаю, что более длинный путь к данным может заставить мое нажатие ждать; но я думаю о «вероятности того, что нажатие клавиши будет потеряно в неисправной системе», что, я думаю, не зависит от длины пути. PPC 12 лет назад 0
Как можно обработать IRQ в программном обеспечении ДО удара ЦП? Есть ли у APIC свои процессоры? С их рутины в центральной памяти? Они «занимают» процессорное время? PPC 12 лет назад 0
*> «вероятность того, что нажатие клавиши будет потеряно в неисправной системе» * Это зависит от неисправности, но да, очевидно, что клавиатура USB имеет гораздо больше шансов потерять нажатия клавиш из-за дополнительной сложности. *> Re: APICs * Да, у них есть процессор, который выполняет некоторый уровень обработки, точно так же, как контроллер клавиатуры имеет процессор, видеокарты имеют графические процессоры и т. Д. Большинство аппаратных средств имеет какой-то чип, который обрабатывает некоторую обработку. Synetech 12 лет назад 0
*> Как можно обрабатывать IRQ в программном обеспечении ДО удара ЦП? * Мало того, что у USB-клавиатуры есть свои драйверы, но и у USB-контроллера тоже есть драйверы. Данные клавиатуры не попадают прямо в процессор, вместо этого они проходят через клавиатуру к контроллеру USB, к его драйверу, к приводу клавиатуры, затем к процессору или другому программному обеспечению, если необходимо, поэтому некоторые вещи, такие как `Ctrl + Alt + Del` не работают через аппаратную линию, а обрабатываются программно. Synetech 12 лет назад 0
Итак, если я хорошо вас понял, основной поток данных моего нажатия клавиш был бы: контроллер USB, APIC, вход процессора через низкоприоритетный IRQ, USB ISR / IST, самогенерируемый процессор IRQ (например, TRAP), клавиатура ISR / IST? Таким образом, соответствующий приоритет у контроллера USB ..? В моем вопросе я подумал, что контроллер USB может преобразовать пакет (ы) USB в реальный IRQ клавиатуры. PPC 12 лет назад 0
А? Нет, USB-клавиатуры - это просто другое USB-устройство. Они больше не являются особенными или имеют прямую связь с системой. Если вы думаете, что это пустая трата линии IRQ, вы правы. Даже в 64-битной системе без порта PS / 2 IRQ1 [по-прежнему назначается «клавиатуре PS / 2»] (http://i.stack.imgur.com/HCL4K.png). Но, к тому же, обратите внимание, что современные системы больше не ограничены только 16 IRQ. Synetech 12 лет назад 0
14
oleksii

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

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


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

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

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

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

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

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

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

 IRQL | Описание -------------------------------------------- 15 | Высокий профиль 14 | Межпроцессорное прерывание / Power 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 12 лет назад 0
>> Означает ли это, что USB kbds менее отзывчивы: не могли бы вы подробно ответить «нет»? PPC 12 лет назад 0
@PPC Если вы разрабатываете драйвер устройства, то USB kbds может быть медленнее в течение нано-микросекунд. Если вас интересует какой-либо код пользовательского уровня, то этот код остается заблокированным, когда обрабатывается любой IRQL уровня> 1. Поэтому не имеет значения, равен ли kbd IRQL максимальному IRQL или среднему IRQL. Код пользователя заблокирован. oleksii 12 лет назад 0

Похожие вопросы