Прерывания, движущая сила ЭВМ
Когда возникает прерывание, управление компьютера передается программе обработке прерывания, которая обычно хранится в системной ROM (служебная программа BIOS, есть не что иное, как обработчик прерывания). Обработчик прерывания вызывается посредством загрузки его адресов сегмента и смещения регистра, которые управляются ходом выполнения программы, а именно в регистры CS (кодовый сегмент) и IP… Читать ещё >
Прерывания, движущая сила ЭВМ (реферат, курсовая, диплом, контрольная)
В отличии от обычных вычислительных машин, компьютер может во время работы реагировать на изменения внешней среды. Как это осуществить? Есть два метода. Первый метод заключается в том, что в процессе работы ЭВМ периодически останавливается и осуществляет опрос всех устройств, которые в данный момент могут нуждаться в обработке данных со стороны процессора. Однако этот метод не эффективен. Он затрачивает много машинного времени. Программы работают медленно.
Второй способ заключается в том, что устройство, которому необходимо обратиться к процессору, само вырабатывает специальный сигнал. Этот сигнал поступает на специальную микросхему (контроллер прерываний), которая смотрит, от какого устройства пришел запрос и в соответствии с приоритетом данного запроса перед другими, запрос ставится в очередь на обработку.
Затем контроллер прерываний посылает сигнал на прерывание работы центрального процессора. Получив сигнал на прерывание, ЦП останавливает свои вычисления, Все данные по выполнению текущей задачи заносятся в стек, загружается программа обработки прерывания, которую и начинает выполнять процессор. Может случиться так, что в этот момент придет сигнал от прерывания с большим приоритетом. В этом случае процессор временно приостановит обработку и текущего прерывания. Все данные так же будут занесены в стек, и ЭВМ переключится на обработку нового прерывания. После завершения обработки прерывания, ЦП восстанавливает из стека все данные прерванной программы и продолжает вычисления. Именно этот метод и реализован в современных ЭВМ.
Организация IBM PC XT/AT и совместимых с ними РС, реализованных на базе МП Intel 80×86, основывается на открытой архитектуре, в основу которой положен принцип развитой иерархической системы прерываний базового микропроцессора. Это качество позволяет обеспечить гибкий механизм доступа к ресурсам РС системных и пользовательских программ. В системах, построенных на базе Intel 80×86, прерывания могут генерироваться собственно микропроцессором, аппаратурой, входящей в состав РС, а также программой.
На рисунке изображена структура системы прерываний PC AT.
Прерывания и исключительные ситуации изменяют нормальный ход выполнения программы для того, чтобы обработать события, нарушающие ее обычный ход, выдать сообщение об ошибках или условиях исключительных ситуаций.
Прерывания возникают либо из-за асинхронных по отношению к программе внешних событий, о которых поступают сообщения по специально выделенным каналам контроллеров прерываний, либо из-за синхронных событий, генерируемых программой при помощи команд типа INT n. Первые называются аппаратными прерываниями, а вторые — программными. Разница между прерываниями и исключительными ситуациями состоит в различии их назначения в системе прерываний: прерывания используются для обработки аппаратных и программных событий, так или иначе связанных с различными ресурсами РС, а исключительные ситуации предназначены для обработки ошибок, возникающих в процессе выполнения собственно команды МП и препятствующих выполнению как текущей, так и последующей команды.
При этом следует учитывать, что с точки зрения архитектуры собственно МП программное прерывание также является исключительной ситуацией и отрабатывается им аналогично, но с точки зрения организации системы прерываний программное прерывание является самостоятельным средством, при помощи которого пользователь получает возможность доступа к системным и пользовательским ресурсам.
Прерывания передают управление в новое место программы, определяемое из таблицы векторов прерываний. Старый адрес программы (CS:IP) и состояние машины (флажки) сохраняются в стеке для создания возможности возобновления программы.
Аппаратные прерывания Одна из важнейших концепций в вычислительной технике — это идея аппаратных прерываний. Аппаратные прерывания оптимизируют системную производительность, поскольку внешние устройства запрашивают ресурсы процессора только по мере необходимости их обслуживания. Если бы в системе не было аппаратных прерываний, процессору пришлось бы периодически опрашивать все устройства в системе, чтобы проверить, не нуждается ли в обслуживании какое-либо из этих устройств.
Что касается организации аппаратных прерываний в архитектуре IBM PC AT, то они разбиты на два подкласса с точки зрения возможности программного маскирования запроса на прерывание непосредственно в микропроцессоре: маскируемые и немаскируемые. При этом предусматривается шестнадцать линий подключения внешних маскируемых источников прерываний, обозначаемых IRQ0-IRQ15 и распределенных между двумя контроллерами прерываний, объединенных в подсистему. Причем одна из линий служит для каскадирования контроллеров и никаких других системных функций выполнять не может. Выход подсистемы контроллеров прерываний соединен с со входом INTR микропроцессора.
Запросы немаскируемых прерываний поступают на специальный вход NMI микропроцессора и имеют высший по отношению к маскируемым прерываниям приоритет обслуживания. Следует помнить, что условия запроса немаскируемого прерывания (ошибки паритета основной и дополнительных подсистем оперативной памяти) могут маскироваться при помощи системного порта 70h.
Уровни маскируемых прерываний IBM PC АТ распределяются по приоритету от IRQ0 (высший) до IRQ7 (низший).
Для разрешения приоритетных конфликтов и управления маскированием в IBM PC АТ используется программируемый контроллер прерываний (PIC) 8259А. Процессор 8088 может обрабатывать одновременно только одно прерывание, поэтому PIC 8259 оценивает каждый запрос и «решает», следует ли передавать прерывание на процессор. Если PIC 8259 получает запрос более высокого приоритета, выполняемая сервисная программа может быть прервана. В базовой конфигурации PC АТ системный таймер может прервать работу дискового контроллера, но не наоборот.
Когда имеется запрос прерывания и прерывания разрешены, 80 286/80386 входит в машинный цикл подтверждения прерывания. Машинный цикл подтверждения прерывания «проталкивает» регистр флажков в стек. Затем сбрасывается флажок IF, запрещающий прерывания. После этого в стек «проталкивается» содержимое регистра кодового сегмента (CS) и указателя команды (IP). (Таким образом, стек сохраняет состояние флажков и местоположение точки возврата к программе после прерывания, которые затем используются при возвращении из программы-обработчика). 8259A готов передать управление для выполнения обработки прерывания соответствующей сервисной программе. Это выполняется в течение последовательности из двух импульсов INTA, выдаваемых процессором 80 286/80386. Первый импульс INTA используется только для извещения 8259A об удовлетворенном запросе и позволяет подготовиться соответствующему контроллеру к передаче необходимой информации. Второй импульс INTA заставляет 8259A поместить на шину Х байт указателя типа прерывания. Этот байт не используется в качестве прямого адреса таблицы векторов прерываний, а относится к одному из 256 «типов» прерываний, поддерживаемых 80 286/80386.
Когда 80 286/80386 получает байт указателя типа прерывания от 8259A, его значение умножается на четыре, чтобы получить адрес входа в таблицу прерываний. Например, если байт указателя типа прерывания указывает тип 128 (80H), то соответствующий адрес, выдаваемый 80 286/80386, составляет.
4х 80H = 200H. После этого выполнение программы направляется к сервисной программе, адрес которой задан кодовым сегментом и указателем команды для типа 128 по адресу 200H в таблице векторов прерываний.
Программные прерывания Программные прерывания в отличие от аппаратных прерываний не привязаны к конкретным аппаратным ресурсам и иногда рассматриваются системными программистами как вызовы подпрограмм. Следует отметить, что концепция программного прерывания значительно «моложе» концепции аппаратного прерывания и возникла в микрокомпьютерах с появлением I8080 и его команды RESTART.
Программные прерывания включают в себя три уровня: BIOS-прерывания, DOS-прерывания и пользовательские прерывания. Одно из главных назначений BIOS-прерываний — обеспечение корректного (с точки зрения совместимости) доступа к аппаратуре со стороны операционной системы и пользовательской программы. Однако из-за недостаточной функциональной полноты и жестких требований к времени реакции программы многие программы манипулируют аппаратурой непосредственно. Такие программы могут быть неработоспособны на некоторых IBM-совместимых компьютерах.
Роль DOS-прерывания заключается в обеспечении доступа пользовательских программ к системным ресурсам. Большинство корректно разработанных программ использует интерфейс DOS-прерываний при работе с системной аппаратурой.
Пользовательские прерывания — это такие прерывания, которые нужны пользователю для создания собственных обработчиков прерываний и не используют никакие из существующих векторов прерываний DOS за исключением официально разрешенных: с INT 60 по INT 67. Иногда для этих целей используют прерывания, зарезервированные для BASIC.
По-видимому, наиболее удачным примером для представления взаимосвязи различных уровней системы прерываний может служить клавиатура PC AT. Клавиатуру обслуживают прерывания трех типов: аппаратное прерывание, BIOS-прерывание и DOS-прерывание.
Например: DOS-прерывание (INT 21, функция 01h), выполняющее процедуру считывания символа с клавиатуры и вывод его на какое-либо выходное устройство, будет использовать BIOS-прерывание INT 16 для интерфейса с буфером клавиатуры. Обработчик прерывания INT 16 работает с теми же ячейками памяти, что и аппаратное прерывание от буфера клавиатуры (09h).
Когда нажимается клавиша клавиатуры, вырабатывается прерывание 09h. Обработчик этого прерывания (INT 09) помещает принятый код сканирования символа и его преобразованный в код ASCII образ (исключение составляют управляющие символы) в текущую строку символов клавиатуры в разделяемой буферной области памяти (буфер клавиатуры) объемом в 16 слов; обработчик INT 16 сканирует буферную область и, обнаружив полученную строку, выделяет последний полученный символ вместе с его образом и передает его операционной системе.
Векторы прерываний Работа компьютеров семейства IBM PC подобно работе других компьютеров, собранных на базе микропроцессоров Intel 8086, управляется главным образом с помощью использования прерываний, которые могут генерироваться как аппаратно, так и программно. Не являются исключением и служебные программы BIOS: каждой из них ставиться в соответствие номер прерывания, который Вы должны задавать, если хотите использовать службу.
Когда возникает прерывание, управление компьютера передается программе обработке прерывания, которая обычно хранится в системной ROM (служебная программа BIOS, есть не что иное, как обработчик прерывания). Обработчик прерывания вызывается посредством загрузки его адресов сегмента и смещения регистра, которые управляются ходом выполнения программы, а именно в регистры CS (кодовый сегмент) и IP (указатель команды). Сегментные адреса, которые определяют местоположения обработчиков прерываний, называются векторами прерываний. Во время процесса запуска системы BIOS устанавливает значения векторов прерываний таким образом, что они указывают на обработчики прерываний, расположенные в ROM.
Таблица векторов прерываний находится в самом начале RAM-памяти по адресу 0000:0000Н. Каждая запись в таблице хранится в виде пары слов, в которой сначала следует та часть адреса, которая относится к смещению, а затем та часть, которая задает сегмент. Чтобы указать новый обработчик прерывания, векторы прерываний можно изменять. Для этого нежно найти вектор и изменить его значение. В общем случае прерывания компьютеров семейства РС можно разделить на шесть категорий: прерывания микропроцессора, аппаратные прерывания, программные прерывания, прерывания DOS, прерывания Бейсика и прерывания общего назначения.
Прерывания микропроцессора, часто называемые логическими прерываниями, конструктивно заложены в схемы микропроцессора. Четыре из них (00Н, 01Н, 03Н, 04Н) генерируются микропроцессором, еще одно (02Ннемаскируемое прерывание) активизируется сигналом, вырабатываемым определенными устройствами, такими как, к примеру математический сопроцессор 8087.
Аппаратные прерывания встроено в устройство персонального компьютера.
Программные прерывания, включенные в схему работы РС, являются частью программы, расположенных в ROM BIOS. Программы ROM BIOS, вызываемые с помощью данных прерываний, не могут быть изменены, однако векторы, которые указывают на них, можно изменить таким образом, что они будут указывать на другие программы. Резервируемыми номерами для программных прерываний являются номера 10Н-1FH и 40Н-5FH.
Прерывания DOS всегда доступны, когда задействована система DOS. Многие программы, а также языки программирования используют службы, предоставляемые системой DOS при общении к ее прерываниям, для управления базовыми операциями, главным образом для управления операциями ввода /вывода для диска. Номерами прерываний системы DOS являются номера 20H-3FH. Прерывания Бейсика назначаются самим Бейсиком и всегда доступны, когда задействован Бейсик. Резервируемыми для Бейсика номерами прерываний являются номера 0H-F0H.
Прерывания общего назначения доступны для временного использования в ваших программах. Резервируемыми номерами прерываний данного типа являются номера 60H-66H.
Большинство векторов прерываний, используемых ROM BIOS, DOS и Бейсиком, содержат адреса обработчиков прерываний. Однако некоторые номера прерываний указывают на таблицы, содержащие полезную информацию. Например, прерывание 1EH содержит адрес таблицы, в которой хранятся параметры инициализации дисковода для дискет; вектор прерывания 1FH указывает на таблицу, содержащую битовые комбинации, используемые ROM BIOS при выводе на экран знаков текста, а прерывания 41H и 46H указывают на таблицы с параметрами фиксированного диска. Эти векторы прерываний используются для удобства, а не для выполнения прерываний. Если, к примеру, вы попытаетесь выполнить прерывание 1EH, то тем самым вероятно вызовите аварийный отказ в работе системы, т.к. вектор прерывания 1EH указывает на данные, а не на выполнимый код.
Векторы прерываний хранятся в ячейках памяти с младшими адресами; самая первая ячейка памяти содержит вектор прерывания с номером 00H и т. д. Т.к. каждый вектор имеет длину, равную двум словам, то вы можете определить местоположение в памяти конкретного прерывания умножая для этого номер прерывания на 4.
Классификация прерываний.
Познакомимся с классификацией основных прерываний.
Прерывания ROM-BIOS.
- 00H-Деление на 0,06Н-Резерв
- 01Н-Пошаговое выполнение программы, 07Н-Резерв,
- 02Н-Немаскируемое, 08Н-Таймер,
- 03Н-Точка прерывания, 09Н-Клавиатура,
- 04Н-Переполнение, 0АН-0DН -(HDWR INTS)
- 05Н-Печать экрана, 0ЕН-Дискета,
Сервис.
- 10Н-Сервис видео, 17Н-Ввод/вывод принтера,
- 11Н-Список оборудования, 18Н-ROM-BASIC,
- 12Н-Размер используемой памяти, 19Н-Загрузка,
- 13Н-Дисковый ввод/вывод, 1АН-Ввод/вывод таймера,
- 14Н-Ввод/вывод через последовательный порт, 1ВН-Прерывание клавиатуры,
- 15Н-Расширенный сервис АТ, 1СН-Пользовательские прерывания по таймеру,
- 16Н-Ввод/вывод клавиатуры, 20Н-2FНПрерывания DOS,
Указатели.
- 1DН-Видео параметры,
- 1СН-Параметры дискет,
- 1FН-Символы графики.
Для управления аппаратными прерываниями используется микросхема Intel 8259. У нее имеются уровни приоритета (линии, по которым поступают прерывания на эту микросхему):
IRQ 0-Таймер, IRQ 8-Часы реального времени,.
IRQ 1-Клавиатура, IRQ 9 -Программно переводятся в IRQ 2,.
IRQ 2-Канал ввода/вывода, IRQ 10-Резерв,.
IRQ 3 -COM1,IRQ 11-Резерв,.
IRQ 4 -COM2,IRQ 12-Резерв,.
IRQ 5 -Фиксированный диск (LPT2 для АТ), IRQ 13 -Математический сопроцессор,.
IRQ 6 -Контроллер дискет, IRQ 14-Контроллер фиксированного диска,.
IRQ 7 -LPT1IRQ 15-Резерв.
Программно можно запретить маскируемые прерывания. Выполнение прерываний зависит от значения флага прерываний в регистре флагов ЦП. Когда этот бит равен 0, разрешены все прерывания, которые разрешает маска. Когда бит равен 1 — все прерывания запрещены (Внимание: После запрещения прерываний необходимо снять блокировку. Иначе клавиатура будет заморожена, а это приведет к остановки машины!!!).
Для маскирования отдельных аппаратных прерываний нужно просто послать цепочку битов в порт с адресом 21Н, который соответствует регистру маски прерываний. Регистр маски прерываний на второй микросхеме Intel 8259 для АТ имеет адрес порта А1Н.
Uses dos;
Var r: registers;
Begin.
Port[$ 21]: =$ 40; { 1 000 000 Bin }.
{В конце работы необходимо снять блокировку прерываний }.
Port[$ 21]: =0; { 0 Bin }.
End.
Функция 25Н прерывания 21Н устанавливает прерывание на указанный адрес. Адреса имеют размер два слова, старшее CS, младшее IP. Чтобы установить вектор, указывающий на вашу процедуру, нужно поместить сегмент процедуры в DS, а смещение в DX. Затем поместить номер прерывания в AL и вызвать функцию.
Функция 35Н прерывания 21Н возвращает текущее значение вектора прерывания, помещая значение сегмента в ES, а смещение в BX.