Файл: Лекция Прерывания, движущая сила современного компьютера.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 36
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лекция_6. Прерывания, движущая сила современного компьютера
Внимание: по этой тематике много вопросов вошло в экзаменационные тесты!!!
Прерывание - это процесс, который временно останавливает работающую программу, выполняет подпрограмму, которая называется процедурой обработки прерывания, а затем запускает остановленную программу с прерванного места.
Известно что, компьютер может во время работы реагировать на изменения внешней среды. Как это осуществить? Есть два метода. Первый метод заключается в том, что в процессе работы ПК периодически останавливается и осуществляет опрос всех устройств, которые в данный момент могут нуждаться в обработке данных со стороны процессора. Однако этот метод не эффективен. Этот метод требует от процессора много машинного времени. Программы при этом работают медленно. Второй способ заключается в том, что устройство, которому необходимо обратиться к процессору, само вырабатывает специальный сигнал. Этот сигнал поступает на специальную микросхему (контроллер прерываний), которая следит, от какого устройства пришел запрос и в соответствии с приоритетом данного запроса перед другими, запрос ставится в очередь на обработку.
Затем контроллер прерываний посылает сигнал на прерывание работы центрального процессора. Получив сигнал на прерывание, ЦП останавливает свои вычисления, Все данные по выполнению текущей задачи заносятся в стек, загружается программа обработки прерывания, которую и начинает выполнять процессор. Может случиться так, что в этот момент придет сигнал от прерывания с большим приоритетом. В этом случае процессор временно приостановит обработку и текущего прерывания. Все данные так же будут занесены в стек, и ПК переключится на обработку нового прерывания. После завершения обработки прерывания, ЦП восстанавливает из стека все данные прерванной программы и продолжает вычисления. Именно этот метод и реализован в современных компьютерах. Кроме того, прерывания являются основной движущей силой любой операционной системы. Периодические прерывания от встроенного в ПК таймера (имеют высший приоритет) вызывают смену процессов в мультипрограммной ОС, а прерывания от устройств ввода-вывода управляют потоками данных, которыми вычислительная система обменивается с внешним миром. Система прерываний переводит процессор на выполнение потока команд, отличного от того, который выполнялся до сих пор, с последующим возвратом к исходному коду. Из сказанного можно сделать вывод о том, что механизм прерываний очень похож на механизм выполнения процедур. Это на самом деле так, хотя между этими механизмами имеется важное отличие. Переключение программ по прерыванию отличается от переключения, которое происходит по команде безусловного или условного перехода, предусмотренной программистом в потоке команд приложения. Переход по команде происходит
в заранее определенных программистом точках программы в зависимости от исходных данных, обрабатываемых программой. Прерывание же может возникнуть в произвольной точке потока команд программы, которую программист не может прогнозировать. Прерывание возникает либо в зависимости от внешних по отношению к процессу выполнения программы событий, либо при появлении непредвиденных аварийных ситуаций (см. ниже исключительные ситуации) в процессе выполнения данной программы. Сходство же прерываний с процедурами состоит в том, что в обоих случаях выполняется некоторая подпрограмма, обрабатывающая специальную ситуацию, а затем продолжается выполнение основной ветви программы. В зависимости от источника прерывания делятся на три больших класса: внешние (аппаратные); внутренние и программные.
Прерываниям приписывается приоритет, с помощью которого они ранжируются по степени важности и срочности. О прерываниях, имеющих одинаковое значение приоритета, говорят, что они относятся к одному уровню приоритета прерываний. Прерывания обычно обрабатываются модулями операционной системы, так как действия, выполняемые по прерыванию, относятся к управлению разделяемыми ресурсами вычислительной системы – принтером, диском, таймером, процессором и т. п. Процедуры (подпрограммы), вызываемые по прерываниям, обычно называют обработчиками прерываний, или процедурами обслуживания прерываний (Interrupt Service Routine, ISR). Аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, исключения – специальными модулями ядра, а программные прерывания – процедурами ОС, обслуживающими системные вызовы. Кроме этих модулей, в операционной системе может находиться так называемый диспетчер прерываний, который координирует работу отдельных обработчиков прерываний. Далее рассмотрим, как всё это реализовано в компьютерах платформы IBM PC.
Организация IBM PC XT/AT и совместимых с ними ПК, реализованных на базе МП Intel 80x86, основывается на открытой архитектуре, в основу которой положен принцип развитой иерархической системы прерываний базового микропроцессора. Это качество позволяет обеспечить гибкий механизм доступа к ресурсам ПК системных и пользовательских программ. В системах, построенных на базе Intel 80x86, прерывания могут генерироваться собственно микропроцессором, аппаратурой, входящей в состав ПК, а также программой.
Прерывания и исключительные ситуации изменяют нормальный ход выполнения программы для того, чтобы обработать события, нарушающие ее обычный ход, выдать сообщение об ошибках или условиях исключительных ситуаций. Прерывания возникают либо из-за асинхронных по отношению к программе внешних событий – внешние прерывания, (например, нажатие клавиши), о которых поступают сообщения по специально выделенным каналам контроллеров прерываний, либо из-за синхронных событий, генерируемых программой при помощи команд типа INT n (где n – номер прерывания в диапазоне 0-255). Первые называются аппаратными прерываниями, а вторые - программными. Разница между прерываниями и исключительными ситуациями состоит в их различном назначении в системе прерываний. Прерывания используются для обработки аппаратных и программных событий, так или иначе связанных с различными ресурсами ПК, а исключительные ситуации предназначены для обработки ошибок, возникающих в процессе выполнения собственно команд программы (например, деление на 0) и препятствующих выполнению как текущей, так и последующей команды. При этом следует учитывать, что с точки зрения архитектуры собственно МП-ра программное прерывание также является исключительной ситуацией и отрабатывается им аналогично, но с точки зрения организации системы прерываний программное прерывание является самостоятельным средством, при помощи которого пользователь получает возможность доступа к системным и пользовательским ресурсам. Прерывания передают управление в новое место программы, определяемое из таблицы векторов прерываний. Адрес прерванной программы (хранится в регистрах CS:IP) и состояние процессора (регистр флагов) - сохраняются в стеке - для создания возможности возобновления прерванной программы.
Аппаратные прерывания
Одна из важнейших концепций в вычислительной технике - это идея аппаратных прерываний. Аппаратные прерывания оптимизируют системную производительность, поскольку внешние устройства запрашивают ресурсы процессора только по мере необходимости их обслуживания. Если бы в системе не было аппаратных прерываний, процессору пришлось бы периодически опрашивать все устройства в системе, чтобы проверить, не нуждается ли в обслуживании какое-либо из этих устройств. Что касается организации аппаратных прерываний в архитектуре IBM PC AT, то они разбиты на два подкласса с точки зрения возможности программного маскирования запроса на прерывание непосредственно в микропроцессоре: маскируемые и немаскируемые. При этом предусматривается шестнадцать линий подключения внешних маскируемых источников прерываний, обозначаемых IRQ0-IRQ15 и
распределенных между двумя контроллерами прерываний, объединенных в подсистему. Причем одна из линий служит для каскадирования контроллеров и никаких других системных функций выполнять не может. Выход подсистемы контроллеров прерываний соединен с со входом INTR микропроцессора. Запросы немаскируемых прерываний поступают на специальный вход NMI микропроцессора и имеют высший по отношению к маскируемым прерываниям приоритет обслуживания. Следует помнить, что условия запроса немаскируемого прерывания (ошибки паритета основной и дополнительных подсистем оперативной памяти) могут маскироваться при помощи системного порта 70h.
Уровни маскируемых прерываний IBM PC АТ распределяются по приоритету от IRQ0 (высший) до IRQ7 (низший). Для разрешения приоритетных конфликтов и управления маскированием в IBM PC АТ используется программируемый контроллер прерываний (PIC) 8259А. Когда имеется запрос прерывания и прерывания разрешены, 80286/80386 входит в машинный цикл подтверждения прерывания. Машинный цикл подтверждения прерывания "проталкивает" регистр флажков в стек. Затем сбрасывается флажок IF, запрещающий прерывания. После этого в стек "проталкивается" содержимое регистра кодового сегмента (CS) и указателя команды (IP). (Таким образом, стек сохраняет состояние флажков и местоположение точки возврата к программе после прерывания, которые затем используются при возвращении из программы-обработчика).
Программные прерывания. Программные прерывания в отличие от аппаратных прерываний не привязаны к конкретным аппаратным ресурсам и иногда рассматриваются системными программистами как вызовы подпрограмм. Следует отметить, что концепция программного прерывания значительно "моложе" концепции аппаратного прерывания и возникла в микрокомпьютерах с появлением 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 сканирует буферную область и, обнаружив полученную строку, выделяет последний полученный символ вместе с его образом и передает его операционной системе.
Векторы прерываний. Вектор прерывания это закреплённый за устройством номер (4-х байтный адрес), который идентифицирует соответствующий обработчик прерываний. Векторы прерываний объединяются в таблицу векторов прерываний (англ. Interrupt Descriptor Table (IDT)). Местоположение таблицы зависит от типа и режима работы процессора.
В реальном режиме работы процессора таблица векторов прерываний расположена в первом килобайте оперативной памяти ПК начиная с адреса 0000:0000 и содержит 256 векторов прерываний. В защищённом режиме адрес в физической памяти и размер таблицы прерываний определяется 48-битным регистром IDTR.
Таблица векторов прерываний находится в самом начале оперативной памяти ПК и начинается по адресу 0000:0000Н. Каждая запись в таблице