Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Hardware (аппаратные средства) > Ликбез по hardware и нижнему слою software


Автор: lg54 04.05.17, 05:55
Можете помочь? Можно в двух словах объяснить и дать ссылку на ресурс, где можно понять, как происходит на современных PC (под windows) обработка нажатия клавиши на клавиатуре (подключена через usb или ps/2) и вплоть до вывода символа в соответствующее окно на мониторе? Особых тонкостей не надо, но хотя бы обозначить все этапы и участников такой обработки (устройство, контроллер, драйвер, шина, процессор, прерывания и т.п.).
Это не просто любопытство, мне надо освоить новый материал и быстро

Автор: A.I. 04.05.17, 06:53
https://habrahabr.ru/company/htmlacademy/blog/254825/

Автор: lg54 04.05.17, 08:08
Спасибо. Еще остались вопросы, например, как определяется драйвер для конкретного типа устройства, кто определяет, какому драйверу передать управление и т.п. детали
Я просмотрел книгу Таненбаума, весьма солидный труд, но там фокус сделан на несколько других вещах.
Пока не закрываю тему, может быть еще источники подскажете

Автор: A.I. 04.05.17, 09:42
Цитата lg54 @
Я просмотрел книгу Таненбаума

которую именно и какой версии издания? Кинга Современные операционные системы, издание 4, глава 5 и вперед к академическим знаниям

Автор: lg54 06.05.17, 05:27
Я смотрел Архитектуру компьютера, 6-е издание. Всем спасибо! Пойду учиться

Автор: shm 08.05.17, 23:19

Ну и бред там понаписан местами.
IRQ у всех типов хост контроллеров есть (UHCI, OHCI, EHCI, xHCI). Правда срабатывает он не от клавиатуры, а вообще при завершении цепочки транзакции по шине USB для любого устройства. Клавиатура следует спецификации HID и имеет как минимум одну Interrupt-In конечную точку. Interrupt-In КТ имеет низкий приоритет в иерархии USB-транзакции, такие транзакции выполняются как бы "в фоне". Хост отправляет запрос и сразу же получает от клавиатуры ответ - текущее состояние калвишь, ЕМНИП - это 8 байт, где каждый ненулевой байт означает скан код (отличный от PS/2) нажатой клавиши (одновременно может быть нажато несколько плавишь). Обработчик прерывания находится внутри драйвера хост-контроллера, он считывает состояния регистров и если транзакции выполнились успешно, то устанавливает соответствующие события, далее драйвер шины "просыпается" и определяет какому драйверу принадлежит пакет и передает ему управление. Механизм несколько сложнее, чем для PS/2, но таких фундаментальных отличий не имеет.

Добавлено
Цитата lg54 @
Еще остались вопросы, например, как определяется драйвер для конкретного типа устройства, кто определяет, какому драйверу передать управление и т.п. детали

Вопроса (проблемы) не понял. Каждому устройству на шине сопоставляется драйвер (у устройства есть уникальный ID изготовителя или код класса совместимости), далее работа с устройством это уже забота драйвера.

Добавлено
При запросе на прерывания IDT никак не меняется и не обновляется. Оттуда (а на самом деле вообще из кэша) просто по номеру вектора берется указатель на обработчик прерывания и все.

Добавлено
пруфлинки:
ftp://ftp.slackware.com/pub/netwinder/pub...ign%20guide.pdf
http://www.scaramanga.co.uk/stuff/qemu-usb/hcir1_0a.pdf
http://www.intel.com/content/dam/www/publi...ion-for-usb.pdf
https://www.intel.com/content/dam/www/publi...ce-usb-xhci.pdf
http://www.usb.org/developers/hidpage/HID1_11.pdf
https://software.intel.com/sites/default/fi...2abcd-3abcd.pdf (глава 6)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)