Что происходит в компьютере, когда вы нажимаете на клавишу

За одну секунду в компьютере происходит столько разных процессов, о которых мы не знаем! Но совсем скоро узнаем, даже прямо сейчас

Эта статья отличается от тех, что вы читали ранее: речь пойдёт о современном компьютере — со всеми усовершенствованиями и доработками, которые были сделаны за последние 70–80 лет. Ну наконец-то!

А говорить будем о действии, которое многие повторяют тысячи раз на дню, — нажатие клавиши на клавиатуре. Итак...

01

Вы нажимаете на клавишу. Она плавно опускается, оказывая сопротивление пальцу. За это отвечает пружина (в механических клавиатурах) либо купол из упругого силикона (в мембранных).

02

Два электрических контакта под этой клавишей замыкаются. Возникает проводимость между дорожками внутри клавиатуры.

03

Основываясь на том, какие именно контакты были замкнуты, микроконтроллер внутри клавиатуры определяет, что за клавиша была нажата. Дорожки на клавиатуре можно рассматривать как матрицу из строк и столбцов, выводы которых соединены с ножками микросхемы контроллера. Подавая напряжение на одну из ножек и определяя, на какой ещё ножке при этом повысилось напряжение, контроллер выясняет, на пересечении какой строки и какого столбца находится нажатая клавиша.

Примерно как в игре «Морской бой»: «Б-4! — Ранил!»

04

Микроконтроллер клавиатуры обращается к своей постоянной памяти, в которой хранятся комбинации нулей и единиц, соответствующие всем клавишам, — так называемые скан-коды. Далее он посылает этот код контроллеру периферийного интерфейса, через который клавиатура подключена к компьютеру. В современных компьютерах это интерфейс USB, а раньше мог использоваться, например, PS/2.

05

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

Сигнал c кодом клавиши — 00001010 — «течёт» по проводу от микроконтроллера клавиатуры к контроллеру на материнской плате компьютера.

06

Контроллер интерфейса USB отправляет сигнал о поступлении новых данных, который проходит через чипсет — основной набор микросхем на материнской плате — к контроллеру прерываний. Ранее это могла быть отдельная микросхема, называемая PIC (Programmable Interrupt Controller), но в современных системах это небольшой модуль внутри центрального процессора.

07

Процессор получает сигнал от контроллера интерфейса.

Скорее всего, какое-то время он будет его игнорировать, поскольку сейчас он занят более важными задачами. Но для человека это слишком короткая задержка, чтобы её можно было заметить.

Далее процессор запускает специальную программу для обработки события «нажатие клавиши на клавиатуре». На время работы этой программы он прерывает выполнение других программ, поэтому такие сигналы и называют прерываниями.

08

В операционной системе (ОС) регистрируется событие «нажатие клавиши на клавиатуре». ОС уведомляет об этом программы, которые «подписаны» на такого рода события, в том числе ту, чьё окно сейчас активно, — например, мессенджер.

09

Программа-мессенджер обрабатывает поступившее событие. Она добавляет в свою область памяти информацию о дополнительном символе в окне для набора сообщений. Теперь ей нужно отобразить этот символ шрифтом определённого начертания и размера. Для этого она направляет запрос к графической подсистеме компьютера.

10

Происходит обращение к графическим библиотекам DirectX/OpenGL. С их помощью, опираясь на имеющееся в системе описание символов шрифта, графическая подсистема определяет, как должна выглядеть нажатая буква в окне нашей программы.

11

Теперь на основе данных от графической подсистемы нужно составить инструкции для графического процессора (GPU), который будет непосредственно выполнять «рисование» буквы. За составление таких инструкций отвечает видеодрайвер. Он обладает информацией об устройстве конкретной видеокарты, которая установлена в компьютере.

12

Инструкции от драйвера видеокарты передаются контроллеру интерфейса, к которому подключена видеокарта. В современных компьютерах это интерфейс PCI Express, ранее мог использоваться AGP или PCI. Контроллеры высокоскоростных интерфейсов сегодня обычно встроены в центральный процессор, а в прошлом они обычно были частью чипсета на материнской плате. В соответствии с правилами работы интерфейса контроллер преобразует инструкции в последовательность электрических сигналов, и те, дождавшись своей очереди, отправляются на видеокарту.

13

GPU декодирует полученные инструкции, выполняет расчёты и сохраняет в памяти видеокарты набор чисел, соответствующих нужным пикселям в определённом месте экрана.

14

Когда наступает момент очередного обновления экрана (это происходит с частотой 60–144 раза в секунду), видеокарта превращает набор чисел из своей памяти в сигнал, который отправляется на монитор по одному из доступных интерфейсов — например, DisplayPort или HDMI. В более старых системах это мог быть цифровой интерфейс DVI или аналоговый VGA.

15

У монитора тоже есть свой микроконтроллер. Он анализирует данные об изображении, полученные от видеокарты, соотносит их с физическим разрешением матрицы и понимает, какие именно пиксели нужно зажечь и погасить, чтобы сформировать требуемую картинку.

16

Если мы говорим о жидкокристаллическом мониторе (ЖК), то его матрица состоит из миллионов пикселей, каждый из которых, в свою очередь, состоит из трёх субпикселей, закрытых светофильтрами трёх базовых цветов — красного, зелёного и синего. Внутри ячейки каждого субпикселя находятся жидкие кристаллы. Под воздействием приложенного к ним электрического напряжения они поворачиваются на определённый угол — и за счёт поляризационного фильтра меняется их прозрачность.

17

Ровный белый свет от подсветки монитора (светодиодной или на лампах), проходя через частично прозрачные субпиксели и цветные фильтры, формирует изображение, состоящее из миллионов цветных точек. Пользователь видит, как в окне мессенджера появилась только что нажатая им буква.

Конец!

Как видите, за элементарным действием, результат которого мы наблюдаем на экране через считаные миллисекунды, стоит множество сложных процессов. На самом деле даже это длинное описание — очень упрощённое, а некоторые шаги мы намеренно пропустили. Одно только описание правил работы каждого из упомянутых в статье интерфейсов занимает несколько десятков, а то и сотен страниц в технической документации.

Как хорошо, что читать эту документацию приходится только программистам (да и то в редких случаях). Кстати, о программистах: о них наша следующая статья!