2848

Процесс взаимодействия системы с клавиатурой в ОС MS-DOS

Контрольная

Информатика, кибернетика и программирование

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

Русский

2012-10-20

39 KB

7 чел.

Процесс взаимодействия системы с клавиатурой в ОС MS-DOS

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

Рис. 1

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

Типы клавиш:

  •  основная клавиатура (буквы, цифры, управляющие клавиши Shift, Alt, Ctrl, CapsLock);
  •  функциональная клавиатура (F1, F2,…);
  •  цифровая клавиатура – при включённой клавише NumLock, клавиши управления курсором и экраном – при выключенной клавише NumLock;
  •  клавиши управления курсором и экраном, дублирующие функции цифровой клавиатуры.

При нажатии клавиши от матрицы контроллеру передаётся скэн-код клавиши. Если клавиша удерживается в нажатом состоянии, то через некоторое время срабатывает режим автоповтора, и скэн-код клавиши передаётся снова. При отпускании клавиши (даже если не было режима автоповтора) клавиатура XT передаёт её скэн-код, увеличенный на 80h, а клавиатура AT передаёт два байта: в первом содержится префикс F0h, во втором – скэн-код.

Контроллер клавиатуры посылает скэн-коды в порт 60h и генерирует аппаратное прерывание 09h, по которому ЦП останавливает выполнение текущей задачи и переходит на выполнение программы обработки прерывания от клавиатуры.

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

Программа обработки прерывания, получив управление, считывает скэн-код из порта 60h и анализирует его значение, а также слово флагов состояния. Если скэн-код принадлежит управляющей клавише, то устанавливается соответствующий бит в слове состояния флагов. При отпускании соответствующий бит сбрасывается для клавиш Shift, Alt, Ctrl. Для клавиш Insert, Caps Lock, Num Lock и Scroll Lock соответствующий бит сбрасывается при повторном нажатии клавиши.

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

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

Полученный в результате трансляции двухбайтный код записывается программой обработки прерывания в кольцевой буфер ввода, который служит для синхронизации процессов ввода данных с клавиатуры и приёма их программой пользователя. Объём буфера составляет 30 байтов, он может хранить 15 слов, содержащих коды. Коды извлекаются из буфера в том же порядке, в котором они в него поступали. За состоянием буфера следят два указателя. В хвостовом указателе хранится адрес первой свободной ячейки, в головном указателе хранится адрес самого старого кода, принятого с клавиатуры и ещё не прочитанного программой. Программа обработки прерывания помещает двухбайтный код по адресу хвостового указателя, после чего хвостовой указатель увеличивается на 2.

На этом процесс работы программы обработки прерывания заканчивается.

Пользовательская программа, желая получить код нажатой клавиши, вызывает прерывание int16h, которое активизирует драйвер клавиатуры BIOS. Драйвер считывает из кольцевого буфера двухбайтный код по адресу головного указателя и увеличивает адрес головного указателя на 2. Если это обычный ASCII-код, то будет достаточно считать младший байт, содержащий сам ASCII-код. Если же это расширенный ASCII-код, то необходимо считывать и старший байт.

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

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

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

Некоторые клавиши расширенной клавиатуры (101 клавиша) при нажатии генерируют не один, а несколько сигналов прерываний, каждый из которых сопровождается посылкой в порт 60h своего кода (последовательность кодов).

Функции языка C для работы с клавиатурой.

Для работы с клавиатурой в стандартной библиотеке conio.h объявлены следующие функции.

int getch(void);

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

int getche(void);

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

int putch(int ch);

Функция выводит символ, код которого принимает в качестве аргумента, в текущую позицию курсора. Если в качестве аргумента указать escape-символ ‘\n’, то функция выполнит перевод курсора на следующую строку, но не будет выполнять перемещение курсора в начало строки.

int kbhit(void);

Функция проверяет, пуст ли буфер клавиатуры, и возвращает 0, если пуст, и значение, отличное от 0 (как правило -1), если буфер не пуст. При этом функция не читает символы из буфера.

int ungetch(int ch);

Функция помещает символ в голову буфера клавиатуры и возвращает значение кода в случае успешного завершения, или EOF (-1) в случае неуспешного завершения (если функция вызывается повторно, но до этого не было чтения с консоли от предыдущего вызова функции). При чтении этого символа функцией getche() отображение на экране не происходит.


 

А также другие работы, которые могут Вас заинтересовать

27251. Визначте економічну природу витрат виробництва. За якими критеріями їх класифікують? Як співвідносяться економічний, бухгалтерський та нормальний прибуток 17.78 KB
  За якими критеріями їх класифікують Як співвідносяться економічний бухгалтерський та нормальний прибуток Економічні витрати це ті виплати які підприємство повинне зробити або ті доходи які підприємство повинно забезпечити постачальнику ресурсів для того щоб відволікти ці ресурси від використання в альтернативних виробництвах. Постійні і змінні витрати. Постійні витрати ПВ це витрати величина яких не залежить від зміни обсягу продукції. Які витрати підприємств є постійними Такі як орендна плата амортизація основного капіталу...
27252. Які витрати виробництва несе фірма (підприємство) в короткому періоді? Поясніть, в тому числі і графічно, взаємозв’язок між ними 35.44 KB
  Які витрати виробництва несе фірма підприємство в короткому періоді Поясніть в тому числі і графічно взаємозвязок між ними. Витрати виробництва за короткостроковий період Взаємозв'язок економічних і бухгалтерських витрат і прибутку Загальна виручка підприємства Економічні витрати Економічний прибуток Явні витрати Витрати на обладнання Сировина Електроенергія Заробітна плата Інші явні витрати Неявні витрати Процент на власний капітал Зарплата підприємця Нормальний прибуток Інші неявні витрати Бухгалтерські витрати Бухгалтерський прибуток У...
27253. Поясніть механізм дії закону спадної віддачі (спадного граничного продукту МР). В чому полягає взаємозв’язок загального (ТР), середнього (АР) та граничного продукту (МР). Чи є спадна продуктивність загальним явищем, притаманним діяльності фірми і в коротк 17.11 KB
  Чи є спадна продуктивність загальним явищем притаманним діяльності фірми і в короткому і в довгому періодах Закон спадної віддачі один із законів ринкової економіки який полягає в тому що з певного моменту послідовне приєднання одиниці змінного ресурсу наприклад праці до незмінного фіксованого ресурсу капіталу або землі дає додатковий або граничний продукт який зменшується в розрахунку на кожну наступну одиницю змінного ресурсу. Середній продукт МР показує середню віддачу продуктивність змінного фактора тобто загальний обсяг...
27254. Ґрунтуючись на характеристиці довгого періоду функціонування фірми, поясніть взаємодію середніх загальних витрат (АТС) у короткому і довгому періодах. Користуючись концепцією позитивного та негативного ефекту масштабу, поясніть форму кривої довгострокових 72.76 KB
  Середні сукупні витрати АТС кількість сукупних витрат виробництва що припадає на одиницю випуску продукції. Довгострокові середні витрати тобто витрати на одиницю продукції формують ціну виробника від рівня якої залежить результат діяльності фірми її успіх на ринку. Якщо ціна виробника виявиться нижчою за ринкову ціну фірма одержить економічний прибуток в іншому разі вона матиме збитки і буде витіснена з ринку тому мінімізація середніх витрат складає основне завдання виробничої діяльності фірми.
27255. Проаналізуйте процес виробництва як процес споживання економічних ресурсів. Дайте характеристику мети та системи обмежень фірми у використанні економічних ресурсів. Поясніть, як показник MRTS відображає дію закону спадної прибутковості 32.8 KB
  Проаналізуйте процес виробництва як процес споживання економічних ресурсів.ресурси прийнято ділити на чотири групи: природні потенційно придатні для застосування в виробництві природні сили та речовини серед яких розрізняють невичерпні та вичерпні а в останніх відновлювані та невідновлювані ; матеріальні всі створені людиною рукотворні засоби виробництва що самі є результатом виробництваверстати обладнання заводи транспортні засоби будинки.; трудові населення в працездатному віці яке в ресурсному аспекті...
27256. Виведіть графічно та алгебраїчно рівновагу підприємства – споживача економічних ресурсів. В чому полягає правило мінімізації витрат 24.5 KB
  В чому полягає правило мінімізації витрат Изокванта це лінія кожна точка якої відображає такі комбінації ресурсів праці та капіталу які дають змогу отримати однаковий обсяг виробництва продукції. Чим більша кількість використовуваних ресурсів тим більший обсяг виробництва і тим далі від початку координат міститься відповідна ізокванта. Карта ізоквант Отже різні комбінації факторів виробництва у межах ізокванти забезпечують виробництво певної кількості продукції а це означає що ці фактори деякою мірою є взаємозамінними. Для...
27257. Порівняйте криві байдужості в теорії поведінки споживача з ізоквантами в теорії виробництва, а також бюджетну лінію та ізокосту. Виведіть кути їх нахилу 45.56 KB
  Порівняйте криві байдужості в теорії поведінки споживача з ізоквантами в теорії виробництва а також бюджетну лінію та ізокосту. Крива байдужості це лінія рівної корисності всі точки якої показують множину наборів комбінацій двох благ що забезпечують один і той же рівень корисності. норма і нахил кривих байдужості визначаються уподобаннями споживача і залежать від ступеня замінності благ у споживанні. Узагальнимо властивості кривих байдужості: криві байдужості не можуть перетинатися; криві байдужості розташовані далі від початку...
27258. Гроші, їх функції і функціональні форми. Грошова маса та її структура. Товарне виробництво 22.58 KB
  Гроші є з одного боку виробничими відносинами які виникають у товарному виробництві за усіх видів обміну результатами трудової діяльності. Гроші це форма що історично виникла яка повинна мати власний матеріальний носій. Такий підхід до функцій грошей означає що гроші представляють інструмент економічних відносин у суспільстві і саме люди використовуючи можливості грошей можуть визначати ціни товарів застосовувати гроші в процесах реалізації й платежів а також використовувати їх як засіб нагромадження. Функція міри вартості полягає в...
27259. Ціна як економічна категорія, її функції, види. Ціноутворюючі фактори 52.77 KB
  Тому ціна як категорія кількісна це грошове вираження вартості товару. Це знайшло своє відображення у багаточисельності теорій присвячених вартості і цінам. Теорія трудової вартості. Суть цієї теорії в тому що субстанція і величина вартості як основа мінової вартості і цін визначається працею Вартість це втілена в товари праця.