Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.204.52.16] |
|
Сообщ.
#1
,
|
|
|
Можете помочь? Можно в двух словах объяснить и дать ссылку на ресурс, где можно понять, как происходит на современных PC (под windows) обработка нажатия клавиши на клавиатуре (подключена через usb или ps/2) и вплоть до вывода символа в соответствующее окно на мониторе? Особых тонкостей не надо, но хотя бы обозначить все этапы и участников такой обработки (устройство, контроллер, драйвер, шина, процессор, прерывания и т.п.).
Это не просто любопытство, мне надо освоить новый материал и быстро |
Сообщ.
#3
,
|
|
|
Спасибо. Еще остались вопросы, например, как определяется драйвер для конкретного типа устройства, кто определяет, какому драйверу передать управление и т.п. детали
Я просмотрел книгу Таненбаума, весьма солидный труд, но там фокус сделан на несколько других вещах. Пока не закрываю тему, может быть еще источники подскажете |
Сообщ.
#4
,
|
|
|
Цитата lg54 @ Я просмотрел книгу Таненбаума которую именно и какой версии издания? Кинга Современные операционные системы, издание 4, глава 5 и вперед к академическим знаниям |
Сообщ.
#5
,
|
|
|
Я смотрел Архитектуру компьютера, 6-е издание. Всем спасибо! Пойду учиться
|
Сообщ.
#6
,
|
|
|
Ну и бред там понаписан местами. 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) |