Принципы и алгоритмы обработки прерываний




Содержание

 

Введение

. Принципы и алгоритмы обработки прерываний

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

. Разработка алгоритма резидентной программы

. Реализация резидентной программы на языке Ассемблер

. Тестирование и отладка резидентной программы

Заключение

Список используемой литературы

Приложение А

Приложение Б

Приложение В

Приложение Г

Приложение Д

 


 

Введение

 

В данном курсовом проекте необходимо разработать программу, изменяющую состояние управляющих клавиш: Caps Lock, Scroll Lock и Num Lock. При разработке программы использовалось несколько прерываний. Вход и выход из резидентной части осуществляется нажатием определенной комбинации клавиш. Резидентная программа защищена от повторной загрузки. Изменение состояния управляющих клавиш осуществляется в резидентной программе.

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

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

В третьем разделе разрабатывается алгоритм работы резидентной программы.

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

В пятом разделе приводится методы тестирования и отладки резидентной программы.

 


Принципы и алгоритмы обработки прерываний

 

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

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

К аппаратным прерываниям относятся:

) Выводы микропроцессора:

intr - вывод для входящего сигнала внешнего прерывания;

inta - вывод микропроцессора для выходного сигнала, подтверждение в получении сигнала прерывания микропроцессором;

nmi - вывод микропроцессора для входного сигнала, не маскируемого прерывания;

) микросхема программируемого контроллера;

) внешние устройства;

К программным средствам относятся:

) таблица векторов прерываний, в этой таблице содержатся указатели на процедуры обработки соответствующих прерываний

) флаги в регистре флагов

IF (Interrupt Flag) - флаг прерывания. Предназначен для маскирования (запрещения) аппаратных прерываний, то есть прерываний по входу INTR. Если IF=1, микропроцессор обрабатывает внешний прерывания, если IF=0, микропроцессор игнорирует сигналы на входе INTR.

TF (Trace Flag) - флаг трассировки. Единичное состояние флага переводит микропроцессор в режим покомандной обработки.

) машинные команды микропроцессора (int, into, iret, cli, sli)

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

. Прекращение выполнения текущей программы.

. Переход к выполнению и выполнение программы обработки прерываний.

. Возврат управления прерванной программе.

Первый этап должен обеспечить временное прекращение выполнения текущей программы таким образом, чтобы потом прерванная программа продолжила свою работу так, как будто никакого прерывания не было. Любая программа, загруженная для выполнения операционной системой, занимает свое, отдельное от других программ, место в оперативной памяти. Разделяемыми между программами ресурсами являются регистры микропроцессора, в том числе регистр флагов, поэтому их содержимое нужно сохранять. Обязательными для сохранения являются регистры cs, ip и flags\eflags, поэтому они, при возникновение прерывания, сохраняются микропроцессором автоматически. Пара cs:ip содержит адрес команды, с которой необходимо начать выполнение после возврата из программы обслуживания прерывания, a flags\eflags - состояние флагов после выполнения последней команды прерванной программы в момент передачи управления программе обработки прерывания. Сохранение содержимого остальных регистров должно обеспечиваться программистом в начале программы обработки прерывания до их использования. Наиболее удобным местом хранения регистров является стек. В конце первого этапа микропроцессор после включения в стек регистров Hags, cs и ip сбрасывает бит флага прерываний IF в регистре flags (но при этом в стек записывается предыдущее содержимое регистра flags с еще установленным IF). Тем самым предотвращаются возможность возникновения вложенных прерываний по входу INTR и порча регистров исходной программы вследствие неконтролируемых действий со стороны программы обработки вложенного прерывания. После того как необходимые действия по сохранению контекста завершены, обработчик аппаратного прерывания может разрешить вложенные прерывания командой sti.

Набор действий по реализации второго этапа заключается в определении источника прерывания и вызова соответствующей программы обработки. В реальном режиме микропроцессора допускается от 0 до 255 источников прерываний. Количество источников прерываний ограничено размером таблицы векторов прерываний. Эта таблица выступает связующим звеном между источником прерывания и процедурной обработки. Данная таблица располагается в памяти, начиная с адреса 0. Каждый элемент таблицы векторов прерываний занимает 4 байта и имеет следующую структуру: 1-е слово элемента таблицы - значение смещения начала процедуры обработки прерывания (п) от начала кодового сегмента; 2-е слово элемента таблицы - значение базового адреса сегмента, в котором находится процедура обработки прерывания.

Рассмотрим, для примера, работу обработчика аппаратного прерывания 09Н - прерывание клавиатуры.

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: