Курсовой проект по дисциплине «Системы программирования и операционные системы»





Скачать 419.36 Kb.
НазваниеКурсовой проект по дисциплине «Системы программирования и операционные системы»
страница4/5
Дата публикации11.03.2015
Размер419.36 Kb.
ТипКурсовой проект
100-bal.ru > Информатика > Курсовой проект
1   2   3   4   5

2.5. Обработчики прерываний


Когда в реальном режиме выполняется команда INT, управление передается по адресу, который считывается из специального массива, таблицы векторов пре­рываний, начинающегося в памяти по адресу 0000h:0000h. Каждый элемент тако­го массива представляет собой дальний адрес обработчика прерывания в форма­те сегмент:смещение или 4 нулевых байта, если обработчик не установлен. Команда INT помещает в стек регистр флагов и дальний адрес возврата, поэтому, чтобы завершить обработчик, надо выполнить команды popf и retf или одну ко­манду iret, которая в реальном режиме полностью им аналогична.

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

Хотя прямое изменение таблицы векторов прерываний и кажется достаточно удобным, все-таки это не лучший подход к установке обработчика прерывания, и пользоваться им следует только в исключительных случаях, например, внутри обработчиков прерываний. Для обычных программ DOS предоставляет две сис­темные функции: 25h и 35h - установить и считать адрес обработчика прерыва­ния, которые и рекомендуются к использованию в обычных условиях.

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

2.6. Прерывания от внешних устройств


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

  • IRQ1 (INT 9) - прерывание клавиатуры, вызывается при каждом нажатии и отпускании клавиши на клавиатуре. Стандартный обработчик этого преры­вания выполняет довольно много функций, начиная с перезагрузки по Ctrl-Alt-Del и заканчивая помещением кода клавиши в буфер клавиатуры BIOS.

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

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

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

Разумеется, обработка прерываний не должна занимать много времени: если прерывание происходит достаточно часто (например, прерывание последователь­ного порта может происходить 28 800 раз в секунду), его обработчик обязательно должен выполняться за более короткое время. Если, например, обработчик пре­рывания таймера будет выполняться 1/32,4 секунды, то есть половину времени между прерываниями, вся система станет работать в два раза медленнее. А если еще одна программа с таким же долгим обработчиком перехватит это прерыва­ние, система остановится совсем. Именно поэтому обработчики прерываний при­нято писать исключительно на ассемблере.

2.7. Резидентный обработчик прерываний от клавиатуры с подключением до системного обработчика

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

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

IRQ INT Адрес системного

Аппаратное Контроллер Микро- обработчика int09h

прерывание прерываний Вектор09 процессор из вектора 09

на IRQ1

IRQ7 Запуск систем

Нажатие или обработчика int09h


отпускание Байт флагов

любой клавиши Системный клавиатуры

Контроллер Порт 60h обработчик [40h:17h]

клавиатуры Скэн-код int09h | 7 | 6| 5| 4| 3| 2| 1| 0|

Клавиатура

Ins

Скэн-код Код Caps Lock

Кольцевой буфер ASCII Num Lock

40h:1Eh ввода Scroll Lock

40h:1Ah Alt

Адрес головного Скэн ASCII Ctrl

символа Скэн ASCII Shift левый

Скэн ASCII Shift правый

Программа Скэн ASCII

пользователя Адрес хвостового

 символа

Запрос на ввод 40h:3Ch

с клавиатуры Ввод самого

“старого” символа

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

виши. При этом каждой клавише присвоены два скэн-кода, отличающиеся друг от друга на 80h. Один скэн-код (меньший, код нажатия) засылается контроллером в порт 60h при нажатии клавиши, другой (больший, код отпускания) - при ее отпускании.

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

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

Программа int09h, помимо порта 60h, работает еще с двумя областями оперативной памяти: кольцевым буфером ввода, располагаемым по адресам от 40h:lEh до 40h:3Dh, куда в конце концов помещаются коды ASCII нажатых клавиш, и битом флагов клавиатуры, находящимся по адресу 40h:17h, где фиксируется состояние управляющих клавиш (, , и др.).

Программа int09h, получив управление в результате прерывания от клавиатуры, считывает из порта 60h скэн-код и анализирует его значение. Если скэн-код принадлежит одной из управляющих клавиш, и, к тому же, представляет собой код нажатия, в байте флагов клавиатуры устанавливается бит (флаг), соответствующий нажатой клавише. Например, при нажатии правой клавиши в байте флагов устанавливается бит 0, при нажатии левой клавиши - бит 1, при нажатии любой клавиши - бит 2 и т.д. Биты флагов сохраняют свое состояние, пока клавиши (по одиночке или в любых комбинациях) остаются нажатыми. Если управляющая клавиша отпускается, программа int09h получает скэн-код отпускания и сбрасывает соответствующий бит в байте флагов. Кроме состояния указанных клавиш, в байте флагов фиксируются еще режимы , , и (см. рис. 2.3).

Компьютеры PC/AT имеют второй байт флагов клавиатуры, находящийся по адресу 40h:18h, и отражающий состояние управляющих клавиш на расширенной (101-клавишной) клавиатуре.

При нажатии обычной, не управляющей клавиши, программа int09h считывает из порта 60h ее скэн-код нажатия и по таблице трансляции скэн-кодов в коды ASCII формирует двухбайтовый код, старший байт которого содержит скэн-код, а младший код ASCII. При этом если скэн-код характеризует клавишу, то код ASCII определяет закрепленный за ней символ.

Поскольку за каждой клавишей закреплено, как правило, не менее двух символов ("а" и "А", "1" и "!", "2" и "@" и т.д.), то каждому скэн-коду соответствуют, как минимум, два кода ASCII. В процессе трансляции программа int09h анализирует состояние флагов, так что если нажата, например, клавиша Q (скэн-код 10h, код ASCII буквы Q - 51h, а буквы q - 7lh), то формируется двухбайтовый код 1071h, но если клавиша Q нажата при нажатой клавише (смена регистра), то результат трансляции составит 1051h. Тот же код 1051h получится, если при нажатии клавиши Q был включен режим (заглавные буквы), однако при включенном режиме и нажатой клавише образуется код 1071h, поскольку в такой ситуации клавиша на время нажатия переводит клавиатуру в режим нижнего регистре (строчные буквы).

Полученный в результате трансляции двухбайтовый код засылается программой int09h в кольцевой буфер ввода, который служит для синхронизации процессов ввода данных с клавиатуры и приема их выполняемой компьютером программой. Объем буфера составляет 16 слов, при этом коды символов извлекаются из него в том же порядке, в каком они в него поступали. За состоянием буфера следят два указателя. В хвостовом указателе (слово по адресу 40:lCh) хранится адрес первой свободной ячейки, в головном указателе (40: 1Ah) - адрес самого старого кода, принятого с клавиатуры и еще не востребованного программой. Оба адреса представляют собой смещения относительно начала области данных BIOS, т.е. числа от 1Eh до 3Ch. В начале работы, когда буфер пуст, оба указателя - и хвостовой, и головной, указывают на первую ячейку буфера.

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

Выполняемая программа, желая получить код нажатой клавиши, должна обратиться для этого к каким-либо системным средствам - функциям ввода с клавиатуры DOS (прерывание 21h) или BIOS (прерывание 16h). Системные программы с помощью драйвера клавиатуры (точнее говоря, объединенного драйвера клавиатуры и экрана, так называемого драйвера консоли с именем CON) считывают из кольцевого буфера содержимое ячейки, адрес которой находится в головном указателе, и увеличивает этот адрес на 2. Таким образом, программный запрос на ввод с клавиатуры фактически выполняет прием кода не с клавиатуры, а из кольцевого буфера.

Хвостовой указатель, перемещаясь по буферу в процессе занесения в него кодов, доходит, наконец, до конца буфера (адрес 40h:3Ch). В этом случае при поступлении очередного кода адрес в указателе не увеличивается, а, наоборот, уменьшается на длину буфера. Тем самым указатель возвращается в начало буфера, затем продолжает перемещаться по буферу до его конца, опять возвращается в начало и так далее по кольцу. Аналогичные манипуляции выполняются и с головным указателем.

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

Если компьютер не выполняет никакой программы, то активной является программа командного процессора COMMAND.COM. Активность COMMAND.COM заключается в том, что он, поставив запрос к DOS на ввод с клавиатуры (с помощью функции 0Ah прерывания 21h) ожидает ввода с клавиатуры очередной команды пользователя. Как только в кольцевом буфере ввода появляется код символа, функция 0Ah переносит его во внутренний буфер DOS, очищая при этом кольцевой буфер ввода, а также выводит символ на экран. При получении кода клавиши (0Dh) функция 0Ah завершает свою работу, а командный процессор предполагает, что ввод команды закончен, анализирует содержимое буфера DOS и приступает к выполнению введенной команды. При этом командный процессор работает практически лишь с младшими половинами двухбайтовых кодов символов, именно, с кодами ASCII.

Если компьютер выполняет какую-либо программу, ведущую диалог с оператором, то, как ухе отмечалось, ввод данных с клавиатуры (а точнее из кольцевого буфера ввода) и вывод их на экран с целью эхо контроля организует эта программа, обращаясь непосредственно к драйверу BIOS (int 16h) или к соответствующей функции DOS (int 21h). Может случиться, однако, что выполняемой программе не требуется ввод с клавиатуры, а оператор нажал какие-то клавиши. В этом случае вводимые символы накапливаются (с помощью программы int09h) в кольцевом буфере ввода и, естественно, не отображаются на экране. Так можно ввести до 15 символов. Когда программа завершится, управление будет передано COMMAND. СОМ, который сразу же обнаружит наличие символов в кольцевом буфере, извлечет их оттуда и отобразит на экране. Такой ввод с клавиатуры называют вводом с упреждением.

До сих пор речь шла о символах и кодах ASCII, которым соответствуют определенные клавиши терминала и которые можно отобразить на экране. Это буквы (прописные и строчные), цифры, знаки препинания и специальные знаки, используемые в программах и командных строках, например, |, $, * и др. Однако имеется ряд клавиш, которым не назначены отображаемые на экране символы. Это, например, функциональные клавиши , ...; клавиши управления курсором , ,
,
, <Стрелка вправо>, <Стрелка вниз> и др. При нажатии этих клавиш в кольцевой буфер ввода засылается расширенный код ASCII, в котором младший байт равен нулю, а старший является скэн-кодом нажатой клавиши. Расширенный коды ASCII поступают в буфер ввода и в случае нажатия комбинаций управляющих и функциональных клавиш, например, /, / (на дополнительной цифровой клавиатуре), / и др. В этом случае, однако, в старший байт расширенного кода ASCII помещается уже не скэн-код клавиши, а некоторый код, специально назначенный этой комбинации клавиш. Естественно, этого кода нет среди "обычных" скэн-кодов. Например, клавиша , скэн-код которой равен 3Bh, может генерировать следующие расширенные коды ASCII:

ЗB00h / 5E00h / 6800h / 5400h

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


3. Описание программы
1   2   3   4   5

Похожие:

Курсовой проект по дисциплине «Системы программирования и операционные системы» iconКонспект лекций по дисциплине: «Операционные системы и среды»
«Системы баз данных», «Инструментальные средства разработки аппаратно-программных систем», «Микропроцессоры и микропроцессорные системы»,...
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconРабочая учебная программа по дисциплине «Операционные системы» разработана...
Операционные системы [Текст]: рабочая учебная программа. Тюмень: гаоу впо то «тгамэуп». 2013. 17 с
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconПаспорт программы учебной дисциплины «Операционные системы» Область применения
Рабочая программа учебной дисциплины «Операционные системы» является частью рабочей основной профессиональной образовательной программы...
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconПояснительная записка к курсовой работе по дисциплине «Разработка...
Курсовой проект содержит: страниц –20, источников – 5, рисунков – 6, таблиц – 2
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconПояснительная записка к курсовой работе по дисциплине «Разработка...
Курсовой проект содержит: страниц –22, источников – 5, рисунков – 6, таблиц – 2
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconСамостоятельная работа приобщает студентов к творчеству, поиску и...
Автор разработки: Торгашин Геннадий Владимирович, гобу спо во «Борисоглебский индустриальный техникум», преподаватель дисциплины...
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconКонспект по курсу лекций Операционные системы Граур Светлана группа...
Основные блоки: 1)введение (историческое развитие вычислительных систем (ВС), определяемое появлением и развитием программного обеспечения...
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconВопросы для экзаменов по предмету операционные системы
Основные компоненты компьютерной системы, общая картина функционирования компьютерной системы
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconРабочая программа По дисциплине «Операционные системы»

Курсовой проект по дисциплине «Системы программирования и операционные системы» iconПояснительная записка к курсовому проекту по дисциплине «Разработка...
Курсовой проект содержит: страниц – 22, источников – 8, рисунков – 9, таблиц – 1
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconПриложение примерные Темы для Курсовой работы по дисциплине
Курсовой работа по дисциплине «Технологии программирования» состоит из 2 частей: теоретическая часть; практическое задание
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconМетодические указания к практическим занятиям рпк «Политехник»
Методические указания предназначены для проведения практических занятий по дисциплине “Базы данных” в соответствии со стандартом...
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconОперационные системы конспект лекций
Внутренняя организация файловой системы: модель версии Fast File System (ffs) bsd 193
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconПояснительная записка к курсовому проекту по дисциплине «Разработка...
Курсовой проект содержит: страниц –19, источников – 5, рисунков – 6, таблиц – 2
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconМетодические указания по выполнению самостоятельной работы по дисциплине...
Самостоятельная работа является одним из видов учебной деятельности студентов, способствует развитию самостоятельности, ответственности...
Курсовой проект по дисциплине «Системы программирования и операционные системы» iconМетодические указания к курсовой работе по дисциплине «Системы, технология...
Системы, технология и организация услуг автосервиса: Метод указания к курсовой работе. – Ростов н/Д: Изд центр дгту, 2007. 31 с


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск