Аппаратное обеспечение IBM PC. Типы клавиатур, конструктивное исполнение и принцип действия

ЛАБОРАТОРНАЯ РАБОТА 4

УСТРОЙСТВА ВВОДА ИНФОРМАЦИИ в ПК –клавиатура и мышь

Цель работы

Цель работы состоит в изучении принципов работы клавиатуры ПК, а также в управлении параметрами клавиатуры и мыши средствами Windows .

Основные сведения

Клавиатура – это устройство, предназначенное для ввода информации от пользователя в компьютер.
Обычная стандартная клавиатура для персонального компьютера имеет больше чем 100 клавиш, среди которых алфавитно-цифровые, функциональные, бухгалтерские и другие клавиши.
С помощью алфавитно-цифровых клавиш пользователь может вводить цифры, буквы и знаки препинания. В России чаще всего используются русская и английская раскладка. Однако пользователь в настройках системы компьютера может выбрать любую клавиатурную раскладку – от китайской до арабской. Если же на клавишах клавиатуры не нарисовано всех необходимых символов выбранной вами раскладки, ситуацию можно исправить, приобретя специальные клавишные наклейки.
Верхний ряд клавиатуры составляют функциональные клавиши – от F1 до F12. С помощью функциональных клавиш или их комбинаций с другими клавишами можно управлять компьютером, например, открывать окно помощи, окно проводника, включать и выключать компьютер.
В правой части клавиатуры размещены так называемые бухгалтерские клавиши – с изображением цифр и математических знаков, использование которых ускоряет набор числовой информации и работу с ней. Также бухгалтерские клавиши выполняют функцию управления курсором.

Основные параметры современных клавиатур

Механизм клавиш. Определяет в первую очередь стоимость клавиатуры, а также тактильность (осязательное ощущение).

Для механических клавиатур возможен выбор с кликом или без. Клик означает четкое осязание нажатия клавиши (сопровождаемое звуком), что многим нравится.

Тактильные параметры.

К тактильным параметрам относятся жесткость клавиш и длина хода.

Жесткость клавиш определяется силой нажатия на клавишу.



Средней длиной хода клавиши считается 3.5 мм. Для тех, кто бегло набивает текст, предпочтительнее более короткий ход.

Оба параметра определяются вкусом пользователя и осмысленно выбираются только после накопления личного опыта. В первый раз достаточно пробежаться по клавиатуре в магазине.

Еще один тактильный параметр - клик. Клавиатуры бывают с кликом пли без. В буквальном переводе click - щелчок. Точный перевод - тактильный (т. с. осязательный) барьер, появляющийся на середине нажатия и со щелчком преодолеваемый (откуда название). Реализуется дугообразной тонкой пластиной под клавишей, которая «рывком» прогибается.

Клик позволяет точно чувствовать, что клавиша нажата, и не пропускать буквы при быстром наборе. Клик нравится многим пользователям.

Обычно клик встречается у механических клавиатур, так как мало изменяет их стоимость, но иногда встречается и у клавиатур других типов.

Форм-фактор определяющих клавиш (обе Shift,. Backspace и Enter). Когда эти клавиши имеют удобные форму и расположение, то работа облегчается.

Клавиша Enter может иметь следующие формы: прямую, L-образную и Г-образную (надо сделать зеркальное отражение букв L и Г относительно вертикали, чтобы получить истинную форму клавиши. Enter). L-образная форма является самой удобной, потому что по большой Enter можно попадать, не глядя на нее.

Раскладка кириллицы. Есть две раскладки кириллицы, одна из которых более удобна.

Раскладка (т. е. расположение букв на клавишах) кириллицы бывает двух типов: Windows (распознается по расположению буквы Е в левом верхнем углу) и машинописная (распознается по расположению буквы Е в правом нижнем углу).

Машинописная раскладка, согласно названию, повторяет клавиши пишущей машинки. Windows-раскладка появилась в ОС Windows. По сравнению с машинописной в нее были внесены небольшие, но очень эффективные усовершенствования. Например, очень редко используемая буква Е была перенесена в далекий угол, а на ее место поместили клавишу с часто используемыми точкой и запятой. В машинописной раскладке они вынесены на верхний ряд и вводятся через верхний регистр. Странно то, что более совершенную раскладку разработала зарубежная компания.

Некоторые производители наносят только русскую раскладку, некоторые наносят обе, предоставляя пользователю выбор.

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

Эргономичностъ клавиатуры . Так называемые эргономичные клавиатуры существенно меньше утомляют пользователя, хотя занимают больше места и стоят дороже.

Наличие подставки для рук. Подставки снижает утомление и улучшает внешний вид.

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

Интерфейс. Связан с развитием системных плат. Говоря об интерфейсе, имеют в виду проводные клавиатуры. Используются следующие интерфейс:

PS/2.. Представляет собой тонкий круглый разъем - 6-контактный miniDIN. Такой же используется для PS/2 мыши, и,чтобы их не перепутать, в спецификации РС"99 для этих штекеров предусмотрена различная цветовая раскраска: фиолетовый - для клавиатуры и зеленый - для мыши.

USB. Может использоваться со всеми более-менее новыми системными платами, так как в последних есть USB порты и поддержка в BIOS. Разъем - плоской, прямоугольной

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

Принцип действия клавиатуры

Принцип действия клавиатуры поясняется на рис. 1. Независимо от то­го, как механически реализован процесс нажатия клавиш, сигнал при нажа­тии клавиши регистрируется контроллером клавиатуры (например, 8049) и передается в виде так называемого скэн-кода на материнскую плату. Скэн-код - это однобайтовое число, младшие 7 бит которого представляют иден­тификационный номер, присвоенный каждой клавише. На материнской плате PC для подключения клавиатуры также используется специальный контроллер. Для PC типа AT обычно применяется микросхема универсального периферийного интерфейса (Universal Peripheral Interface, UPI) 8049.

Когда скэн-код поступает в микросхему (8049), то инициализи­руется аппаратное прерывание (IRQ 1), процессор прекращает свою работу и выполняет процедуру, анализирующую скэн-код. Данное прерывание об­служивается специальной программой, входящей в состав ROM BIOS. При поступлении скэн-кода от клавиш , или , изменение статуса записывается в RAM. Во всех остальных случаях скэн-код трансформируется в код символа (так называемые коды ASCII или рас­ширенные коды). При этом обрабатывающая процедура сначала определяет установку клавиш и переключателей, чтобы правильно получить вводимый код ("а" или "А"). Затем введенный код помещается в буфер клавиатуры, представляющий собой область памяти, способную запомнить до 15 вводи­мых символов, пока прикладная программа не может их обработать. Буфер организован по принципу FIFO (первый вошел - первый вышел).

Для работы с клавиатурой используются порты и прерывания. В ответ на прерывание служебная процедура системы BIOS в ПЗУ считывает скэн-код клавиши из порта клавиатуры (порт номер 96) и затем пересылает в порт клавиатуры команду очистить буфер процессора клавиатуры. Если системный блок не реагирует на прерывания клавиатуры, то коды сканирования накапливаются в буфере процессора клавиатуры, хотя при нормальной работе этого не должно происходить. Специальный код сканирования255, шестнадцатиричное значение FF, используется блокомклавиатуры, для сообщения, что его буфер заполнен.

Примечание

Каждая клавиша генерирует два типа скэн-кодов: код нажатия, когда клавиша нажимается, и код освобождения, когда клавиша отпускается. Для PC класса AT используется одна и та же цепочка битов для кодов нажатия и кодов освобождения, но коды освобождения состоят из двух байтов, первый из которых всегда ра­вен 0F0H. Для PC XT-генерации код освобождения на 128 больше кода нажатия (седьмой бит 7 равен 1). Например, 7-битовый скэн-код клавиши <В> равен 48 или 110000 в двоичной системе счисления. Когда клавишу нажимают, на кон­троллер клавиатуры поступает код 10110000, а когда отпускают - код 00110000.

Контроллер 8049 отвечает не только за генерирование скэн-кодов, но и не­обходим для выполнения функций самоконтроля и проверки нажатых кла­виш в процессе загрузки системы. Процесс самоконтроля отображается однократным миганием трех индикаторов LED клавиатуры во время выпол­нения программы POST. Таким образом, неисправность клавиатуры выявля­ется уже на стадии загрузки PC.

Контроллер на материнской плате может не только принимать, но и переда­вать данные, чтобы сообщить клавиатуре различные параметры, например, частоту повтора нажатой клавиши и др.

В табл. 1-2 представлены примеры скэн-кодов, которые соответствуют наиболее распространенной в настоящее время клавиатуре со 102 клавишами.

Шестнадцатеричные скэн-коды функциональных клавиш

Таблица 1

Шестнадцатеричные скэн-коды клавиш ввода данных

Таблица 2


Таким образом, процесс обработки клавиатурного ввода (рис.2) обеспечивают два микроконтроллера: один находится на материнской плате компьютера, второй встроен в саму клавиатуру.

Как видно на схеме, все горизонтальные линии матрицы клавиш подключены через резисторы к источнику питания. Встроенный чип клавиатуры имеет два порта – выходной и входной. Первый подключен к вертикальным (Y0–Y5) линиям матрицы, а второй – к горизонтальным (X0–X4).

Клавиатурный контроллер работает по следующему алгоритму. Устанавливая по очереди на каждой из вертикальных линий уровень напряжения, соответствующий логическому нулю, клавиатурный микро­компьютер непрерывно оценивает состояние горизонтальных линий – независимо от активности на центральном процессоре.

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

Если на одной из горизонтальных линий появится уровень логического нуля клавиатурный процессор зафиксирует нажатие на клавишу. Он отправит в компьютер (через внутренний 16-байтовый буфер) запрос на прерывание и номер клавиши в матрице (он называется скан-кодом – это случайное значение, выбранное компанией IBM еще тогда, когда она создавала первую клавиатуру для ПК). Обмен данными с компьютером повторится, когда ранее нажатая клавиша будет отпущена.

Скан-код однозначно связан с клавиатурной распайкой и не зависит напрямую от обозначений, нанесенных на поверхность клавиши. Но программе нужен не порядковый номер нажатой клавиши, а соответствующий символу на этой клавише ASCII-код. Важно понимать, что этот код не полностью зависит от скан-кода, ведь одной и той же клавише может быть присвоено несколько значений. Это зависит в том числе и от состояния других клавиш (например, кнопка 0 используется и для ввода символа), когда она нажата вместе с кнопкой) и системных настроек. Именно это позволяет варьировать раскладку клавиатуры (то есть порядок расположения клавиш на ней).

Все преобразования скан-кода в ASCII-код выполняются программными средствами. Как правило, данные функции берут на себя соответствующие модули BIOS. Для кодирования символов кириллицы эти модули расширяются клавиатурными драйверами (сейчас они включены в состав операционных систем).

Схема (рис.3) поясняет работу котроллера клавиатуры.

Г-генератор тактовых импульсов; СЧ- счетчик; С – селектор.

Рис.3. Простейшая структура клавиатуры

Дешифратор последовательно опрашивает состояние ключей, расположенных в столбцах X матрицы клавиатуры. Если какая-либо клавиша нажата, то сигнал через замкнутый контакт поступает на соответствующую горизонтальную шину Y и через селектор (регистр) поступает на вход ПЛМ (ПЗУ). Сигналы с дешифратора и селектора образуют адресный вход ПЛМ (ПЗУ), в ячейках которой записаны коды символов (их младшие разряды). Код символа записывается в выходной регистр. Старшие разряды кода определяются содержимым специального регистра, изменяющего своё значение только при нажатии клавиши изменения регистров (Shift, Alt и др.).

Мышь

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

Мышь работает вместе с экраном, управляя перемещением по нему курсора (указателя). Самые популярные -двухкнопочные мыши. Например, одна кнопка может использоваться для запуска функции, а вторая для ее отмены. В графических системах одна может включать световой карандаш, а вторая - выключать его. Имеются мыши с дополнительными устройствами для скроллинга (скроллинг - это прокрутка вверх, вниз, влево или вправо большого изображения, например текста (или WEB-страницы), не умещающегося целиком на экране). Встречаются мыши и с двумя колесиками, каждое из них «заведует» скроллингом по одной из осей. Некоторые мыши снабжаются дополнительной кнопкой сбоку корпуса под большим пальцем. Эту кнопку можно перепрограммировать для выполнения различных действий. Первые мыши имели механическую конструкцию. В ней использовался маленький шар, который выступал через нижнюю поверхность устройства и вращался по мере его перемещения по поверхности. Механические перемещения (линейные или угловые) преобразуются в двоичные коды. Так например, механическая мышь (рис.4) содержит шарик, который вращается при перемещении устройства по плоской поверхности.

В этой схеме:

1. Шарик управления

2. Окно для размещения шарика

3. Контактирующий ролик, обеспечивающий перемещение курсора вдоль осей х и у на экране монитора.

4. Источник направленного света.

5. Шаговый диск

6. Фотоэлемент

7. Электрические импульсы на выходе фотоэлемента.

8. Кнопки управления

9. Блок управления манипуляторов и блок связей манипулятора с компьютером.

Принцип работы.

При перемещении мыши по горизонтальной поверхности, вращается шарик управления и передает вращение одному из контактирующих валиков оси х или у. Вместе с валиков вращается шаговый диск. При вращении он закрывает доступ световому потоку на фотоэлемент (фотодиод, фототранзисторили фоторезистор). Такой режим создает на выходе фотоэлемента группу электрических импульсов, которые поступают на блок управления манипулятора. Таким образом, вращение шарика преобразуется в углы поворота шагового диска по осям X и Y и фиксируются двумя счетчиками. Поскольку расстояние, пройденное мышью, пропорционально этим углам, то коды счетчиков определяют положение мыши на поверхности. Эти же коды, переданные в процессор, управляют положением маркера на экране монитора.

Кроме счетчиков мышь содержит кнопки, информация от которых также включается в состав кода, передаваемого в процессор.

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

Альтернативой механической мыши является оптическая мышь.

В современной оптической мыши используется совершенно иной принцип (рис.5).

В этой схеме:

1. Поверхность столы.

2. Корпус манипулятора.

3,4. Кнопки управления.

5. Источник направленного монохромного света.

6. Окно в корпусе манипулятора, для подсветки поверхности стола.

Принцип работы.

В оптической мыши для сканирования поверхности используется миниатюрная видеокамера, работающая со скоростью 1500 снимков в секунду. Для подсветки поверхности применяется светодиод. Преобразованный в двоичный код кадры поверхности стола записываются в память манипулятора.

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

Отсутствие движущихся частей и высокая точность – достоинства этого метода.

Качество мыши определяется ее разрешением, которое измеряется количеством точек или отсчетов на дюйм (1 дюйм = 25,4 мм). Если мышь имеет разрешение 1000 отсчетов/дюйм и передвигается на один дюйм, то электронная схема формирует 1000 импульсов (обычное разрешение оптической мыши – порядка 400 отсчетов/дюйм). Драйвер мыши, получив эту информацию, усредняет ее в зависимости от графического разрешения монитора и соответственно позиционирует курсор на его экране.

Клавиатура – клавишное устройство управления персональным компьютером. Служит для ввода алфавитно-цифровых (знаковых) данных, а также команд управления. Комбинация монитора и клавиатуры обеспечивает простейший интерфейс пользователя . С помощью клавиатуры управляют компьютерной системой, а с помощью монитора получают от нее отклик.

Существует три основных типа механизма клавиш: мембранный , полумеханический и механический . Мембранные клавиатуры обычно дешевле механических в несколько раз.

Мембранные клавиатуры

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

Так как мембраны находятся на внутренних сторонах пленок, то конструкция хорошо защищена, например, от пролитого кофе.

В более защищенной реализации все выглядит как единый резиновый коврик с выступающими куполами, расположенными под клавишами.

Плюсами мембранного типа клавиш являются защищенность , низкий шум ицена .

Минус данного типа - недолговечность .

Полумеханические клавиатуры

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

Механические клавиатуры

В механических клавиатурах клавиша возвращается пружиной .

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

Минусы такого механизма: отсутствие герметичности , стоимость.

Плюсом является долговечность и надежность , особенно когда контакты позолочены.

Долговечность (число нажатий, при котором обеспечивается надежный контакт):

для мембранных клавиатур: 10-30 млн;

для механических (полумеханических): 50 млн и даже 100 млн для позолоченных контактов.

Для обычного пользователя 20 млн при обычной работе хватит на 10 лет и более. За это время сменится минимум 2 поколения клавиатур.

Принцип действия.

Основные функции клавиатуры не нуждаются в поддержке драйверов.

Необходимое программное обеспечение для начала работы с компьютером уже имеется в микросхеме ПЗУ (Постоянное Запоминающие Устройство) в составе базовой системы ввода-вывода (BIOS), и потому компьютер реагирует на нажатия клавиш сразу после включения.

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

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

Состав клавиатуры.

АЛФАВИТНО - ЦИФРОВЫХ КЛАВИШИ

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

ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ (F1 - F12)

Функции, закрепленные за данными клавишами, зависят от свойств конкретной работающей в данный момент программы, а в некоторых случаях и от свойств операционной системы. F1 вызывает справочную систему, в которой можно найти справку о действии прочих клавиш.

СЛУЖЕБНЫЕ КЛАВИШИ

SHIFT; ENTER; ALT; CTRL; TAB; ESC; BACKSPACE;

PRINT SCREEN – печать текущего состояния экрана на принтере (для MS-DOS) или сохранение его в специальной области оперативной памяти, называемой буфером обмена (для Windows).

SCROLL LOCK – переключение режима работы в некоторых (как правило, устаревших) программах.

PAUSE/BREAK – приостановка/прерывание текущего процесса.

УПРАВЛЕНИЕ КУРСОРОМ

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

UP / DOWN / LEFT / RIGHT

HOME и END переводят курсор в начало или конец текущей строки, соответственно. Их действие также модифицируется регистровыми клавишами.

INSERT переключает режим ввода данных (переключение между режимами вставки и замены). Если текстовый курсор находится внутри существующего текста, то в режиме вставки происходит ввод новых знаков без замены существующих символов (текст как бы раздвигается). В режиме замены новые знаки заменяют текст, имевшийся ранее в позиции ввода.

DELETE предназначена для удаления знаков, находящихся справа от текущего положения курсора. При этом положение позиции ввода остается неизменным.

ДОПОЛНИТЕЛЬНАЯ ПАНЕЛЬ

дублирует действие цифровых и некоторых знаковых клавиш основной панели.

Настройка клавиатуры.

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

Клавиатура - клавишное устройство управления персональным компьютером. Служит для ввода алфавитно-цифровых (знаковых) данных, а также команд управле­ния. Комбинация монитора и клавиатуры обеспечивает простейший интерфейс пользователя. С помощью клавиатуры управляют компьютерной системой, а с помощью монитора получают от нее отклик.

Принцип действия . Клавиатура относится к стандартным средствам персонального компьютера. Ее основные функции не нуждаются в поддержке специальными сис­темными программами (драйверами). Необходимое программное обеспечение для начала работы с компьютером уже имеется в микросхеме ПЗУ в составе базовой системы ввода-вывода (BIOS), и потому компьютер реагирует на нажатия клавиш сразу после включения. Принцип действия клавиатуры заключается в следующем.

10) При нажатии на клавишу (или комбинацию клавиш) специальная микросхема, встроенная в клавиатуру, выдает так называемый скан-код.

11) Скан-код поступает в микросхему, выполняющую функции порта клавиатуры. (Порты - специальные аппаратно-логические устройства, отвечающие за связь процессора с другими устройствами.) Данная микросхема находится на основной плате компьютера внутри системного блока.

12) Порт клавиатуры выдает процессору прерывание (Прерывание - временный останов выполнения одной программы в целях оперативного выполнения другой, в данный момент более важной (приори­тетной) программы) с фиксированным номером. Для клавиатуры номер прерывания - 9 (Interrupt 9, Int9).

13) Получив прерывание, процессор откладывает текущую работу и по номеру пре­рывания обращается в специальную область оперативной памяти, в которой находится так называемый вектор прерываний. Вектор прерываний - это список адресных данных с фиксированной длиной записи. Каждая запись содержит адрес программы, которая должна обслужить прерывание с номером, совпадаю­щим с номером записи.

14) Определив адрес начала программы, обрабатывающей возникшее прерывание, процессор переходит к ее исполнению. Простейшая программа обработки кла­виатурного прерывания «зашита» в микросхему ПЗУ, но программисты могут «подставить» вместо нее свою программу, если изменят данные в векторе прерываний.

15) Программа-обработчик прерывания направляет процессор к порту клавиатуры, где он находит скан-код, загружает его в свои регистры, потом под управле­нием обработчика определяет, какой код символа соответствует данному скан-коду.

17) Процессор прекращает обработку прерывания и возвращается к отложенной задаче.

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

Наряду с мышью или тачпадом, клавиатура основное устройство ввода информации от пользователя.

Современные клавиатуры, также называемые PC/AT клавиатурами, имеют 101 клавишу, хотя у некоторых моделей, в частности предназначенных для использования в ноутбуках, часть клавиш может отсутствовать.

Расположение клавиш на клавиатуре называется клавиатурной раскладкой. Для каждого языка раскладка клавиатуры немного отличается, но основные блоки клавиш всегда сохраняются неизменными.

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

Функциональные клавиши - это клавиши от F1 до F12. Расположены они горизонтальным рядом в верхней части клавиатуры. Они используются для быстрого вызова определённых функций текущего приложения. В зависимости от приложения, их назначение может полностью меняться.

Алфавитно-цифровые клавиши размещены ниже функциональных и занимают 4 горизонтальных ряда в левой и центральной частях клавиатуры. Эти клавиши служат для ввода текста, текстовых символов и чисел. Именно этот блок меняется в зависимости от языка, на котором печатают. Обычно этот блок содержит клавиши английского и национального языков (для нашей страны - английскую и русскую раскладки, иногда ещё и украинскую).

Клавиши цифровой панели дублируют цифровые клавиши и некоторые управляющие. Это сделано для более удобной работы с вычислениями. Блок этих клавиш размещён в крайней правой части клавиатуры. У ряда ноутбуков этот блок отсутствует для экономии места.

Клавиши управления курсором предназначены для перемещения курсора в заданную позицию. Это клавиши Home, End, клавиши со стрелочками и прочие. Располагаются они между алфавитно-цифровым блоком и цифровой панелью.

Служебные и управляющие клавиши - это клавиши, управляющие режимами ввода текста и различными функциями операционной системы. Находятся они в нижних углах цифрового блока (клавиши Alt, Shift, Windows), в левом столбце цифрового блока (Caps Lock, Tab), около функциональных клавиш и клавиш управления курсором.

Устройство и принцип работы клавиатуры

Если представить клавиатуру в виде решётки, то клавиши будут располагаться на месте пересечения вертикального и горизонтального прутьев.

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

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

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

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

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

В коде клавиши есть небольшой нюанс. Скан-код, передаваемый на процессор, не является тем самым буквенным обозначением, что нанесено на клавишу. Это просто номер клавиши, которая нажата. Само же значение клавиши определяется ASCII кодом клавиши. Одной и той же клавише могут соответствовать несколько значений в этом коде. Преобразование скан-кода в ASCII код осуществляется программно средствами BIOSа и драйвера клавиатуры.

Клавиатура ноутбука

В ноутбуке, как и в персональном компьютере, имеется клавиатура, но в связи с тем, что ноутбук цельное изделие, клавиатура в нём представляет большую ценность, чем в обычном ПК.

Из-за небольших размеров ноутбука, его клавиатура имеет свои характерные особенности.
Чтобы не выступать выше клавиатурного блока и не царапать экран, клавиши ноутбука намного тоньше обычных и имеют специальное slim-устройство, для обеспечения короткого хода клавиш.

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

Для обеспечения некоторых специфических действий, предназначенных для работы с компонентами ноутбука, вводятся дополнительные функции на клавиши и новые сочетания клавиш, характерные для определённой модели.
Эти особенности имеют свои плюсы и минусы.

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

Также минусом по сравнению с компьютерной клавиатурой является проблематичность замены и . Компьютерная клавиатура стоит недорого и легко меняется. Её разборка, чистка и починка осуществляется намного проще и стоит намного дешевле аналогичных работ с клавиатурой ноутбука.
Итак, рассмотрим главные проблемы и поломки клавиатуры ноутбука и пути их устранения.

Неисправности и ремонт клавиатуры ноутбука

Как и в случае с любым устройством, существует два основных типа неисправностей - поломки по вине пользователя ноутбука и аппаратные поломки.

Поломки по вине пользователя наиболее часты для этого устройства.

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

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

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

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

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

Лекция 6

Клавиатура: периферийное устройство ввода информации

Виды клавиатур:

Простые клавиатуры со стандартным набором клавиш (буквенные, цифровые, функциональные и т.д.)

В мультимедийных клавиатурах кроме стандартных клавиш добавлены мультимедийные. Такие клавиатуры упрощают работу с мультимедиа

Игровые клавиатуры рассчитаны для применения в играх.

Так же при выборе клавиатуры можно обратить внимание на ее технические параметры. Среди таких параметров механизм клавиш клавиатуры.

Есть три основных типа: мембранный, механический и полумеханический.

В мембранная клавиатура - электронная клавиатура без отдельных механических движущихся частей, выполненная в виде плоской, обычно гибкой, поверхности с нанесённым на неё рисунком клавиш. Клавиатуры этого типа отличаются очень низкой стоимостью, исключительной компактностью (толщина составляет доли миллиметра), способностью к изгибанию, высокой надёжностью и практически идеальной защищённостью от грязи и влаги. Главным недостатком является почти полное отсутствие тактильной обратной связи, что существенно затрудняет безошибочный и слепой набор. Для компенсации этого недостатка устройства с мембранной клавиатурой обычно имеют звуковое подтверждение нажатия клавиши. Кроме этого, нагрузка на мембраны не «дозируется» системой «толкатель-колпачок» (см. ниже), а определяется исключительно пальцами оператора, что ощутимо снижает ресурс мембран.

В 1980-х годах мембранные клавиатуры использовались в некоторых домашних компьютерах нижнего ценового диапазона. В настоящее время они продолжают использоваться в бытовой технике (например в микроволновых печах), специализированном и промышленном оборудовании. Современные компьютерные клавиатуры используют комбинированную технологию мембранной, резиновой и механической клавиатур, где нажатие на пластиковую клавишу продавливает резиновый колпачок, обеспечивая тактильную обратную связь, и нажимает на мембрану. Принцип работы.

Мембранная клавиатура обычно состоит из трёх слоёв. На двух из них нанесены проводящие дорожки. Третий, изолирующий слой является разделяющим. В местах, где располагаются клавиши, он имеет вырезы, позволяющие дорожкам верхнего и нижнего слоёв соприкасаться при нажатии. Толщина слоёв клавиатуры обычно не больше толщины бумаги или картона.

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

Полумеханические клавиатуры это нечто среднее между мембранными и механическими, где вместо нижней мембраны используют печатную плату. Такая конструкция считается более долговечной. Клавиша возвращается в исходное положение также резиновым куполом. Иногда маленькой пружинкой. В этом случае обеспечивается более плавный ход на протяжении всего нажатия. Но у пружинной технологии присутствует один специфический эффект: срабатывание клавишы происходит даже при неполном нажатии, в то время как мембранная концепция позволяет вам передумать в процессе нажатия. Это важно при скоростной печати. Цена на такие устройства выше чем на мембранные, но кроме того, что они имеют некоторую защиту от загрязнения, эти клавиатуры прослужат вам дольше.

Лазерные клавиатуры

Состоит из маленького ящичка-проектора, который позволяет вывести изображение клавиатуры на любую ровную поверхность. Передача данных идёт по воздуху(беспроводная). Можно настроить яркость, звук печатания клавиш, чувствительность. Правда это не гарантирует стопроценнтную распознаваемость ваших движений и к тому же от яркого света болят глаза. Есть и еще один минус: клавиатуру не видно при ярком освещении. ну и стоимость этого гаджета отнюдь не маленькая.

В беспроводных клавиатурах используются три основных вида соединения, а именно соединение Bluetooth, инфракрасное соединение и радиочастотное соединение.

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

Проводные клавиатуры

PS/2 и USB – две разновидности проводного соединения, соединяющие клавиатуры с компьютерами.

Порт PS/2 впервые появился в на компьютерах (до этого для подключения клавиатуры использовался . Скорость передачи данных - от 80 до 300 Кб/с и зависит от производительности подключенного устройства и программного .

Из шести контактов в разъёме используется четыре: частота, данные, питание, общий. При этом для клавиатуры используемые контакты шины данных и частоты могут отличаться от контактов для подключения мыши. Это позволяет использовать оба устройства сразу, но через разветвитель.

Некоторые могут правильно работать при «неправильном» подключении мыши и клавиатуры (то есть при подключении клавиатуры в разъём, предназначенный для мыши, и, наоборот, мыши в разъём для клавиатуры) - это обусловлено тем, что каждый разъём является универсальным. Большинство же материнских плат при неправильном подключении (или при отключении во время работы) потребуют от пользователя «правильного» подключения устройств и иногда .

В зависимости от типа корпуса клавиатуры делятся на:

Традиционные (стандартные) – обычные AT-клавиатуры;

Эргономичные. Конструкции клавиатур данного типа учитывают естественное положение рук во время набора (в таких конструкциях клавиатура преломлялась в центре, клавиши находились под прямым углом к естественному положению кистей рук при наборе). Эргономичная клавиатура дает возможность повысить производительность и избежать опасности некоторых хронических заболеваний.

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

Но есть и минусы: для того чтобы нажать клавишу, нужно приложить несколько большее усилие, чем на обычной клавиатуре. Нажатие должно приходиться строго в центр.

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

Принципы работы клавиатуры

Что же находится внутри клавиатуры? Оказывается, там есть компьютер! Только этот компьютер состоит из одной микросхемы и выполняет специализированные функции. Он отслеживает нажатия на клавиши и посылает номер нажатой клавиши в центральный компьютер.

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

Внутри корпуса клавиатуры помимо датчиков расположены электронные платы дешифрации сигнала.

Обмен данными между клавиатурой и системной платой осуществляется 11-битовыми блоками (8 разрядов плюс служебная информация) по 2-проводному кабелю (сигнал и земля).

Принцип работы клавиатуры заключается в сканировании переключателей клавиш. Замыканию и размыканию любого из переключателей соответствует уникальный цифровой код (scan code) размеров 1 байт.

Подключение клавиатуры к системной плате производится с помощью разъема DIN или mini-DIN.

На системной плате прием и обработку сигналов от клавиатуры выполняет специальная микросхема - контроллер клавиатуры.

Если рассмотреть сильно упрощенную принципиальную схему клавиатуры, можно заметить, что все клавиши находятся в узлах матрицы:

Все горизонтальные линии матрицы подключены через резисторы к источнику питания +5 В. Клавиатурный компьютер имеет два порта - выходной и входной. Входной порт подключен к горизонтальным линиям матрицы (X0-X4), а выходной - к вертикальным (Y0-Y5).

Устанавливая по очереди на каждой из вертикальных линий уровень напряжения, соответствующий логическому 0, клавиатурный компьютер опрашивает состояние горизонтальных линий. Если ни одна клавиша не нажата, уровень напряжения на всех горизонтальных линиях соответствует логической 1 (т.к. все эти линии подключены к источнику питания +5 В через резисторы).

Если оператор нажмет на какую-либо клавишу, то соответствующая вертикальная и горизонтальная линии окажутся замкнутыми. Когда на этой вертикальной линии процессор установит значение логического 0, то уровень напряжения на горизонтальной линии также будет соответствовать логическому 0.

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

Номер клавиши, посылаемый клавиатурным процессором, однозначно связан с распайкой клавиатурной матрицы и не зависит напрямую от обозначений, нанесенных на поверхность клавиш. Этот номер называется скан-кодом (Scan Code).

Слово scan ("сканирование"), подчеркивает тот факт, что клавиатурный компьютер сканирует клавиатуру для поиска нажатой клавиши.

Но программе нужен не порядковый номер нажатой клавиши, а соответствующий обозначению на этой клавише ASCII-код. Этот код не зависит однозначно от скан-кода, т.к. одной и той же клавише могут соответствовать несколько значений ASCII-кода. Это зависит от состояния других клавиш. Например, клавиша с обозначением "1" используется еще и для ввода символа "!" (если она нажата вместе с клавишей SHIFT).

Поэтому все преобразования скан-кода в ASCII-код выполняются программным обеспечением. Как правило, эти преобразования выполняют модули BIOS. Для использования символов кириллицы эти модули расширяются клавиатурными драйверами.

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

Следует отметить, что клавиатура содержит внутренний 16-байтовый буфер, через который она осуществляет обмен данными с компьютером.

Стек драйверов для системных устройств ввода

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

Соответствующий функциональный драйвер (драйвер порта) реализует зависимую от конкретного устройства поддержку выполнения операций ввода-вывода. В ОС Windows для x86-платформ реализован единый драйвер системной клавиатуры (i8042) и мыши.

Стек драйверов для Plug and Play PS/2-клавиатуры

Стек драйверов содержит (сверху вниз):

    Kbdclass - верхнеуровневый фильтр-драйвер класса клавиатуры;

    опциональный верхнеуровневый фильтр-драйвер класса клавиатуры;

    i8042prt - функциональный драйвер клавиатуры;

    корневой драйвер шины.

В ОС Windows 2000 и старше драйвером класса клавиатуры является драйвер Kbdclass , основными задачами которого являются:

    обеспечение общих и аппаратно-независимых операций класса устройств;

    поддержка Plug and Play,

    одновременное выполнение операций более чем одного устройства;

    реализация class service callback routine, которая вызывается функциональным драйвером для передачи данных из входного буфера устройства в буфер данных драйвера класса устройств.

В ОС Windows 2000 и старше функциональным драйвером для устройств ввода, использующих PS/2-порт (клавиатуры и мыши), является драйвер i8042prt , основные функции которого следующие:

    обеспечение аппаратно-зависимых одновременных операций PS/2-устройств ввода (клавиатуры и мыши разделяют общие порты ввода вывода, но используют разные прерывания, процедуры обработки прерываний (ISR) и процедуры завершения обработки прерываний);

    поддержка Plug and Play, поддержка управления питанием и Windows Management Instrumentation (WMI);

    поддержка операций для legacy-устройств;

    вызов class service callback routine для классов клавиатуры и мыши для передачи данных из входного буфера данных i8042prt в буфер данных драйвера класса;

    вызов набора функций обратного вызова, которые могут реализовать драйвера-фильтры высокого уровня для гибкого управления устройством.

В целом стек устройств (правильнее говорить о стеке объектов устройств) PS/2-клавиатуры состоит из:

    физического объекта устройства клавиатуры (PDO), созданного драйвером шины (в данном случае, шины PCI) – \Device\00000066;

    функционального объекта устройства клавиатуры (FDO), созданного и присоединенного к PDO драйвером i8042prt - неименованный объект (unnamed);

    опциональных фильтр-объектов устройства клавиатуры, создающихся фильтр-драйверами клавиатуры, разрабатываемыми сторонними разработчиками;

    верхнеуровневого фильтр-объекта устройства класса клавиатуры, созданного драйвером класса Kbdclass – \Device\KeyboardClass0.

Обработка клавиатурного ввода приложениями

Подсистема Microsoft Win32 получает доступ к клавиатуре, используя поток необработанного ввода (Raw Input Thread, RIT), который является частью системного процесса csrss.exe. Операционная система при старте создает RIT и системную очередь аппаратного ввода (system hardware input queue, SHIQ).

RIT открывает объект «устройство» драйвера класса клавиатуры для эксклюзивного использования и с помощью функции ZwReadFile направляет ему запрос ввода-вывода (IRP) типа IRP_MJ_READ. Получив запрос, драйвер Kbdclass отмечает его как ожидающий завершения (pending), ставит в очередь и возвращает код возврата STATUS_PENDING. Потоку необработанного ввода приходится ждать завершения IRP, для чего используется вызов асинхронной процедуры (Asynchronous Procedure Call, APC).

Когда пользователь нажимает или отпускает одну из клавиш, системный контроллер клавиатуры вырабатывает аппаратное прерывание. Его обработчик вызывает специальную процедуру обработки прерывания IRQ 1 (interrupt service routine, ISR), зарегистрированную в системе драйвером i8042prt. Данная процедура считывает из внутренней очереди контроллера клавиатуры появившиеся данные. Обработка аппаратного прерывания должна быть максимально быстрой, поэтому ISR ставит в очередь вызов отложенной процедуры (Deferred Procedure Call, DPC) I8042KeyboardIsrDpc и завершает свою работу. Как только это станет возможно (IRQL понизится до DISPATCH_LEVEL), DPC будет вызвана системой. В этот момент будет вызвана процедура обратного вызова KeyboardClassServiceCallback, зарегистрированная драйвером Kbdclass у драйвера i8042prt. KeyboardClassServiceCallback извлечет из своей очереди ожидающий завершения запрос IRP, заполнит максимальное количество структур KEYBOARD_INPUT_DATA, несущих всю необходимую информацию о нажатиях/отпусканиях клавиш, и завершит IRP. Поток необработанного ввода пробуждается, обрабатывает полученную информацию и вновь посылает IRP типа IRP_MJ_READ драйверу класса, который опять ставится в очередь до следующего нажатия/отпускания клавиши. Таким образом, у стека клавиатуры всегда есть по крайней мере один ожидающий завершения IRP, и находится он в очереди драйвера Kbdclass.

С помощью утилиты IrpTracker, разработанной упоминавшейся ранее компанией Open Systems Resources, можно отследить последовательность вызовов, происходящих при обработке клавиатурного ввода.

Как же RIT обрабатывает поступившую информацию? Все пришедшие клавиатурные события помещаются в системную очередь аппаратного ввода, после чего они последовательно преобразуются в сообщения Windows (типа WM_KEY*, WM_?BUTTON* или WM_MOUSEMOVE) и ставятся в конец очереди виртуального ввода (virtualized input queue, VIQ) активного потока. В сообщениях Windows скан-коды клавиш заменяются на коды виртуальных клавиш, соответствующие не расположению клавиши на клавиатуре, а действию, которое выполняет эта клавиша. Механизм преобразования кодов зависит от активной раскладки клавиатуры, одновременных нажатий других клавиш (например, SHIFT) и других факторов.

Когда пользователь входит в систему, процесс Windows Explorer порождает поток, который создает панель задач и рабочий стол (WinSta0_RIT). Этот поток привязывается к RIT. Если пользователь запускает MS Word, то его поток, создавший окно, немедленно подключится к RIT. После этого поток, принадлежащий Explorer, отключается от RIT, так как единовременно с RIT может быть связан только один поток. При нажатии клавиши в SHIQ появится соответствующий элемент, что приведет к тому, что RIT пробудится, преобразует событие аппаратного ввода в сообщение от клавиатуры и поместит его в VIQ потока приложения MS Word.

Массивы состояния клавиш клавиатуры

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

Информация о том, какие клавиши нажаты, сохраняется в массиве синхронного состояния клавиш. Этот массив включается в переменные локального состояния ввода каждого потока. В то же время массив асинхронного состояния клавиш, в котором содержится аналогичная информация, - только один, и он разделяется всеми потоками. Массивы отражают состояние всех клавиш на данный момент, и функция GetAsyncKeyState позволяет определить, нажата ли сейчас заданная клавиша. GetAsyncKeyState всегда возвращает 0 (не нажата), если ее вызывает другой поток, а не тот, который создал окно, находящееся сейчас в фокусе ввода.

Функция GetKeyState отличается от GetAsyncKeyState тем, что возвращает состояние клавиатуры на тот момент, когда из очереди потока извлечено последнее сообщение от клавиатуры. Эту функцию можно вызвать в любой момент; для нее неважно, какое именно окно в фокусе.

Клавиатурные ловушки

В операционной системе Microsoft Windows ловушкой, или хуком (hook) называется механизм перехвата событий с использованием особой функции (таких как передача сообщений Windows, ввод с мыши или клавиатуры) до того, как они дойдут до приложения. Эта функция может затем реагировать на события и, в некоторых случаях, изменять или отменять их.

Функции, получающие уведомления о событиях, называются фильтрующими функциями и различаются по типам перехватываемых ими событий. Для того чтобы Windows смогла вызывать функцию-фильтр, эта функция должна быть прикреплена к хуку (например, к клавиатурному хуку). Прикрепление одной или нескольких фильтрующих функций к какому-нибудь хуку называется установкой хука. Для установки и удаления фильтрующих функций приложения используют функции Win32 API SetWindowsHookEx и UnhookWindowsHookEx. Некоторые хуки можно устанавливать как для всей системы, так и для одного конкретного потока.

Если к одному хуку прикреплено несколько фильтрующих функций, Windows реализует очередь функций, причем функция, прикрепленная последней, оказывается в начале очереди, а самая первая функция - в ее конце. Очередь функций-фильтров (см. рисунок 8) поддерживается самой Windows, что позволяет упростить написание фильтрующих функций и улучшить производительность операционной системы.

Система поддерживает отдельные цепочки для каждого типа хуков. Цепочка хуков - это список указателей на фильтрующие функции (специальные функции обратного вызова, определяемые приложением). Когда происходит некоторое событие, связанное с конкретным типом хука, система последовательно передает сообщение каждой фильтрующей функции в цепочке хуков. Действие, которое может выполнить фильтрующая функция, зависит от типа ловушки: некоторые функции могут только отслеживать возникновение событий, другие могут модифицировать параметры сообщений или даже остановить обработку сообщений, заблокировав вызов следующей фильтрующей функции в цепочке хуков или функции обработки сообщений окна-назначения.

Когда к хуку прикреплена одна или более функций-фильтров и происходит событие, приводящее к срабатыванию хука, ОС Windows вызывает первую функцию из очереди функций-фильтров, и на этом ее ответственность заканчивается. Далее функция ответственна за то, чтобы вызвать следующую функцию в цепочке, для чего используется функция Win32 API CallNextHookEx.

ОС поддерживает несколько типов хуков, каждый из которых предоставляет доступ к одному из аспектов механизма обработки сообщений Windows.

Общая схема обработки

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

    Операционная система при старте создает в системной процессе csrss.exe поток необработанного ввода и системную очередь аппаратного ввода.

    Поток необработанного ввода в цикле посылает запросы чтения драйверу класса клавиатуры, которые остаются в состоянии ожидания до появления событий от клавиатуры.

    Когда пользователь нажимает или отпускает клавишу на клавиатуре, микроконтроллер клавиатуры фиксирует нажатие/отпускание клавиши и посылает в центральный компьютер скан-код нажатой клавиши и запрос на прерывание.

    Системный контроллер клавиатуры получает скан-код, производит преобразование скан-кода, делает его доступным на порту ввода-вывода 60h и генерирует аппаратное прерывание центрального процессора.

    Контроллер прерываний вызывает процедуру обработки прерывания IRQ 1, - ISR, зарегистрированную в системе функциональным драйвером клавиатуры i8042prt.

    Процедура ISR считывает из внутренней очереди контроллера клавиатуры появившиеся данные, переводит скан-коды в коды виртуальных клавиш (независимые значения, определенные системой) и ставит в очередь вызов отложенной процедуры I8042KeyboardIsrDpc.

    Как только это становится возможным, система вызывает DPC, которая в свою очередь вызывает процедуру обратного вызова KeyboardClassServiceCallback, зарегистрированную драйвером класса клавиатуры Kbdclass.

    Процедура KeyboardClassServiceCallback извлекает из своей очереди ожидающий завершения запрос от потока необработанного ввода и возвращает в нем информацию о нажатой клавише.

    Поток необработанного ввода сохраняет полученную информацию в системной очереди аппаратного ввода и формирует на ее основе базовые клавиатурные сообщения Windows WM_KEYDOWN, WM_KEYUP, которые ставятся в конец очереди виртуального ввода VIQ активного потока.

    Цикл обработки сообщений потока удаляет сообщение из очереди и передает его соответствующей оконной процедуре для обработки. При этом может быть вызвана системная функция TranslateMessage, которая на основе базовых клавиатурных сообщений создает дополнительные «символьные» сообщения WM_CHAR, WM_SYSCHAR, WM_DEADCHAR и WM_SYSDEADCHAR.

mob_info