Как прерывания работают с USB сплиттерами? - PullRequest
0 голосов
/ 31 марта 2020

Насколько я понимаю, каждый входной порт (который я предполагаю означает USB / SATA / P CIe et c.) Имеет свою собственную линию прерывания для ЦП, которая при вызове запускает какой-то вид обработчика, связанного с этой линией.

Если у меня есть клавиатура с USB-разъемом на ней, и я подключаю мышь, как процессор различает guish между ними, если они проходят через тот же входной порт?

Спасибо!

1 Ответ

1 голос
/ 12 апреля 2020

Это не совсем правильно. С данным устройством, скорее всего, будет связано одно или несколько прерываний. Это понятие устройства контроллер , напрямую подключенное к процессору, а не сокет или порт. В примере с USB ваша машина может иметь столько же контроллеров USB, сколько портов; но, скорее всего, имеет встроенный USB-концентратор, который мультиплексирует один контроллер и предоставляет пользователю несколько портов.

Цель прерывания состоит в том, чтобы сообщить процессору, что контроллер устройства требует некоторого внимания, доступный для большего выхода или имеет доступный для использования ввод. Если слишком много устройств разделяют прерывание, процессор должен искать то, на что нужно обратить внимание. Этот поиск увеличивает задержку обслуживания устройства, поэтому его следует минимизировать. Таким образом, количество прерываний на контроллер устройства является функцией оптимизации поиска соответствующего обработчика, в зависимости от сложности реализации устройства (или controller driver).

На этом уровне устройства При взаимодействии различие между клавиатурой и мышью не имеет значения - это устройство, генерирующее и принимающее данные от контроллера. В случае USB драйвер class расположен поверх драйвера controller , который интерпретирует данные в контексте подключенного устройства. Обычно, когда контроллер сбрасывается, или устройство подключается или отключается, диспетчер определяет на основе значений в общем протоколе тип устройства и, следовательно, соответствующий драйвер класса для его настройки.

Итак концепция драйвера устройства обычно имеет несколько уровней: взаимодействие аппаратного обеспечения находится на более низком или уровне контроллера ; протокол, связанный с семантикой устройства, на верхнем уровне или class level.

Эта схема c показывает аппаратные соединения между процессором и USB-устройствами, такими как клавиатуры, которые вы подключите к порту USB.

keyboard---+ USB         USB   +---intr signal-----+ CPU
mouse------+ hub +-----+ contr                        |
sdcard-----+             oller +---data/addr bus+-----+---+ RAM

Обратите внимание, что многие устройства (слева) подключаются через порты к одному концентратору USB, который затем подключается к контроллеру USB. Контроллер USB напрямую подключен к контроллеру прерываний ЦП и совместно использует ЦП с ОЗУ. Соответствующая схема программного обеспечения c:

Input ======= keyboard class driver ====* USB
              mouse class driver =======* device
filesystem == sdcard class driver ======* driver

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

Эти уровни обеспечивают это, взаимодействуя с драйверами класса , которые преобразуют любую базовую информацию об устройстве в стандартную форму, понятную для уровня представления.

Каждый драйвер класса говорит с драйвером устройства, который взаимодействует с физическим контроллером. В USB это имеет два основных компонента - прерывания, которые требуются от контроллера USB для ЦП, чтобы сделать что-то , и пакеты данных, которые хранятся в ОЗУ под управлением драйверов.

driver интерпретирует достаточно этих пакетов, чтобы знать, на какой драйвер класса их передавать.

Вопросы: 1) Я имею в виду контроллер устройства .

2) Диспетчер обычно часть ядра, которая работает совместно с оборудованием контроллера прерываний, чтобы быстро устранить причину прерывания. Архитектура ЦП определяет, как прерывание изменяет поток выполнения в ЦП. Если несколько контроллеров устройств совместно используют прерывание, обработчик прерываний должен определить, какой контроллер вызвал прерывание. К счастью, есть оборудование, которое поможет с этим.

3) См. Схему выше.

...