Прерывания. Клавиатурное прерывание.


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

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

Причины:

1. События, происходящие в периферийных устройствах (внешн)

2. Программное прерывание – вызов супервизора (внутр)

3. Неопределенные события в процессах. (внутр)

4. Действия оператора. (внешн)

5. Прерывания по таймеру. (внешн)

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

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

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

· асинхронные, или внешние (аппаратные) — события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши, кончилась бумага в принте­ре. Во всех этих случаях требуется прервать выполнение текущей программы и перейти на выполне­ние другой программы (подпрограммы), обслуживающей данное событие. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ);

· синхронные, или внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль, появление несуществующего кода команды, обращение про­граммы в область памяти, для нее не предназначенную, сбой при выполнении передачи данных или операции в АЛУ и многое другое;

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

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

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

Подсистема прерываний должна обеспечивать выполнение следующих функций:

· обнаружение изменения состояния внешней среды (запрос на прерыва­ние);

· идентификация источника прерывания;

· приоритет запросов - разрешение конфликтной ситуации в случае одновременного возникнове­ния нескольких запросов;

· приоритет программ - определение возможности прерывания текущей программы;

· фиксация состояния прерываемой (текущей) программы;

· обработка прерываний - переход к программе, соответствующей обслуживаемому прерыванию;

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

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

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

Таблица векторов прерываний. Клавиатурное прерывание

Для того чтобы связать адрес обработчика прерывания с номе­ром прерывания, используется таблица векторов прерываний, за­нимающая первый килобайт оперативной памяти - адреса от 0000:0000 до 0000:03FF. Таблица состоит из 256 элементов -FAR-адресов обработчиков прерываний. Эти элементы называют­ся векторами прерываний. В первом слове элемента таблицы за­писано смещение, а во втором - адрес сегмента обработчика пре­рывания. Прерыванию с номером 0 соответствует адрес 0000:0000, пре­рыванию с номером 1 - 0000:0004 и т. д.

(Домашнее задание – найти и записать в тетрадь таблицу векторов прерываний; ссылка http://emanual.ru/download/8237.html)

Клавиатура подключена к линии прерывания IRQ1. Этой линии соответствует прерывание INT 09h.

Клавиатурное прерывание обслуживается модулями BIOS. Как работает стандартный обработчик клавиатурного прерывания, входящий в состав BIOS?

Этот обработчик выполняет следующие действия:

  • читает из порта 60h скан-код нажатой клавиши;
  • записывает вычисленное по скан-коду значение ASCII-кода нажатой клавиши в специальный буфер клавиатуры, расположенный в области данных BIOS;
  • устанавливает в 1 бит 7 порта 61h, разрешая дальнейшую работу клавиатуры;
  • возвращает этот бит в исходное состояние;
  • записывает в порт 20h значение 20h для правильного завершения обработки аппаратного прерывания.

Обработчик прерывания INT 09h не просто записывает значение ASCII-кода в буфер клавиатуры. Дополнительно отслеживаются нажатия таких комбинаций клавиш, как Ctrl-Alt-Del, обрабатываются специальные клавиши PrtSc и SysReq. При вычислении кода ASCII нажатой клавиши учитывается состояние клавиш Shift и CapsLock. Буфер клавиатуры имеет длину 32 байта.



Дата добавления: 2021-01-11; просмотров: 379;


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

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.