Ваша клавиатура очень простое устройство ввода; простое потому что генерирует малый объем данных и очень медленно (по компьютерным меркам). Когда вы нажимаете или отпускаете клавишу передается сигнал порождающий аппаратное прерывание (hardware interrupt).
ожидать такие прерывания это работа операционной системы. Для каждого возможного прерывания есть обработчик прерывания (interrupt handler), это часть операционной системы, которая скрывает любые данные ассоциированные с ним (например, значение нажатой/отпущенной клавиши), до тех пока оно не будет обработано.
Что делает обработчик прерываний от клавиатуры, так это помещает значение нажатой клавиши в системную область в нижней части памяти. Там, оно будет доступно для обзора, программе, которая в данный момент, с разрешения операционной системы, читает ввод с клавиатуры.
Более сложные устройства ввода, такие как жесткие диски и сетевые карты работают подобным образом. Ранее я ссылался на то, что дисковые контроллеры используют шину для передачи сигнала о выполнении запроса. Что происходит фактически, когда диск вызывает прерываение. Тогда обработчик прерываний диска копирует поступающие данные в память для дальнейшего их использования программой сделавшей запрос.
С каждым видом прерываний ассоциирован уровень приоритета (priority level). Прерывания имеющие более низкий приоритет (такие как события клавиатуры) не могут прервать обработку прерываний с более высоким уровнем приоритета (тики таймера, события диска) и ожидают их завершения. Unix спроектирован так, чтобы ускорить и сгладить ответную реакцию машины на запросы пользователя, для этого событиям требующим быстрой обработки дан высокий приоритет.
Во время загрузки вашей операционной системы, вы могли видеть сообщения ссылающиеся на номера IRQ. Возможно вы в слышали, что одной из распространненых проблем неверно настроенного аппаратного обеспеченения, является ситуация в которой два разных устройства пытаются использовать одинаковый IRQ, но непонимали что именно это значит.
Вот ответ. IRQ это сокращение "Interrupt Request" (запрос прерывния). Операционная система во время загрузки должна узнать какие устройства будут использовать какие номера прерывний, чтобы ассоциировать соответствующие обработчики прерываний каждому из них. Если два разных устройства попытаются использовать одинаковое прерывание, то иногда оно будет обрабатываться не тем обработчиком. Обычно это, как минимум, сделает устройство недоступным, а иногда может ввести в замешательство ОС настолько что это приведет к сбоям или аварийному завершению.