Сообщение от
JiEn
JiEn said:
↑
Извинните, в таком случае, расскажите как в современных ОС определяется нажатие клавиш.
Стало быть итак:
В момент нажатия клавиши приходит сигнал от клавиатуры на ... я бы сказал на контроллер прерывания, но в современных устройсвах он составляет часть чипсета южного моста, хотя для простоты, всё же скажем на КОНТРОЛЛЕР ПРЕРЫВАНИЯ, итак при поступлении сигнала контроллер прерывания определяет его номер, по входному порту (каждое прерывание приходит на свой порт). Далее этот номер фиксируется в регистре запроса на прерывание и далее этот регистр сравнивается с регистором маски, чтобы определить разрешено или нет прерывание с таким номером?
Если прерывание разрешено то обработка переходит к аппартному комплексу называемому "арбитром приоритетов" так как прерывания ранжируются от более высокого к более низкому. Если нет запроса от более приоритетного прерывания арбитр приоритетов посылает сигнал на передачу к центральному микропроцессору. Для этого у центрального микропроцессора есть специальный вход INTR сигнализирующий о пришедшем прерывании. Если прерывания разрешены у него, то центральный процессор запрещает обработку прерываний и посылает по специальном выходу INTA подтверждение контроллеру прерывания что он получил его и занимаеться им.
Ну это пока так, часть, надо бы рассказать о каскадировании микросхем i8259a, о процессе завершения контролером прерывания, но это уже овер-ответ
Что делает процессор?
Прекращает выполнять ту программу что он сейчас выполняет. Скидывает весь контекст в стэк. Определяет по номеру прерывания вектор прерывания и вызывает процедуру обработки прерывания. После выполнения программы прерывания, восстанавливает контекст ранее выполняемой программы и продолжает её выполнять. Если во время обработки текущего прерывания придет запрос на новое прерывание, с таким же приоритетом, то оно будет поставлено в очередь на обработку, если придет запрос с более высоким приоритетом, то текущее прерывание тоже останавливается и контекст скидывается.
ну далее твой обработчик прерывания передаёт данные прерывания на более высокие абстрактные слои и оно наконец попадает к диспетчеру очереди сообщений (Это для винды) которые запаковывает данные и передает дальше по информационным магистралям ОС
Но вот как бы вкратце...
Да и чё ты на "Вы" ёбнулся штоле? Што за псевдо-интелегентность?