Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
spo.doc
Скачиваний:
14
Добавлен:
09.12.2018
Размер:
432.13 Кб
Скачать

Вопрос №14. Прерывания. Классификация. Виды прерывания, обработка программных прерываний.

Современные ЭВМ невозможно представить без прерываний. Без механизма прерываний невозможно представить многопользовательский, многозадачный режим работы вычислительной машины. Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств вычислительной системы, реагировать на особые состояния, которые могут возникнуть при её работе.

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

Типы (классы) прерываний

Прерывания можно разделить на два основных класса: внешние (называют асинхронными) и внутренние (синхронные).

Внешние (асинхронные) могут поступить:

  • от таймера;

  • от внешних устройств (прерывания ввода/вывода);

  • от блока контроля питания;

  • с пульта оператора вычислительной системы;

  • от другого процессора или другой вычислительной машины.

Синхронные (внутренние) прерывания можно разделить на две части – программные и остальные:

    • при нарушении адресации (выход за пределы программы за пределы массива);

    • при возникновении в поле кода операции, которого нет на данной вычислительной системе;

    • при делении на нуль;

    • при переполнении, исчезновении порядка;

    • при обнаружении ошибок четности;

    • другие … (например, прерывания супервизора);

    • масса программных прерываний.

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

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

Для управления системой прерываний существуют специальные команды, которые позволяют управлять работой системы прерываний. Маскирование некоторых прерываний может осуществить пользователь, но в этом случае за верную работу процессора он и несет ответственность. Маскирование сигналов прерываний осуществляется при помощи регистров маски, а программное управление позволяет реализовать различные дисциплины обслуживания:

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

  • с абсолютным приоритетом. В этом случае, если во время обработки прерывания поступает прерывание с более высоким приоритетом, то происходит прерывание самой программы обработки прерывания с меньшим приоритетом;

  • по принципу стека (дисциплина LCFS – last come first served) – последним пришел – первым обслужен). При этой дисциплине обслуживания запросы на прерывания с более низким приоритетом могут прерывать обработку прерывания с более высоким приоритетом.

Контроль процессора

Повышение приоритета прерывания

Системный таймер

Магнитные диски

Сетевое оборудование

Терминалы

Программные прерывания

Уровень приоритета прерываний

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

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

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

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

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

Механизм обработки прерываний независимо от архитектуры вычислительной системы имеет семь шагов:

  1. Устанавливается факт поступления сигнала прерывания и его идентификация супервизором прерываний;

  2. Запоминается состояние прерванного процесса. Это достигается пересылкой содержания регистров процессора в стек. Его вы определяли в ассемблерной программе. Стек создается для любой программы, написанной на любом языке программирования. В программах на языках высокого уровня функцию создания стека берет на себя система, в Ассемблере его создает сам программист. Адрес этого стека записывается в дескрипторе прерываний.

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

  4. Сохраняется информация о прерванной программе, которая не сохранялась на втором этапе. В некоторых вычислительных системах запоминается большой объем информации о прерванном процессе.

  5. Происходит обработка прерывания. Иногда эту функцию выполняет сама программа обработки прерывания, но часто ОС передает управление какой-либо подпрограмме (например, драйверу определенного устройства).

  6. Восстанавливается информация прерванного процесса.

  7. Происходит возврат в прерванную программу.

Шаги 1 – 3 реализуются аппаратно, а 4 – 7 – программно.

Что же происходит при прерывании? Сохраняется информация о прерванной программе, а это значит, что в стек этой программы отправлена информация, которая находилась на момент прерывания в регистрах процессора: IP – в этом регистре адрес следующей команды, которая должна быть выполнена после прерывания; SS, DS, CS – в этих регистрах адреса начала сегментов; AX, BX, CX, DX – в этих регистрах рабочая информация; SI, DI – информация о смещении (индексные регистры). После обработки прерывания все эти регистры восстанавливаются из стека и состояние процессора точно такое же, как и до прерывания (как будто бы его и не было) и программа продолжается.

Программа обработки прерывания

Программа

Прерывание

Супервизор прерываний

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

Сохранение данных идущего процесса (задачи)

Определение адреса программного модуля обработки прерывания. Передача ему управления.

Диспетчер задач

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

Передача ей управления

…………………………..

Выбор по заданной очеред-ности нашей прерванной задачи. Восстановление режима работы и передача ей управления

Схема.Обработка прерывания операционной системой

В 16-и и 32-х разрядных процессорах процесс нахождения адреса программы обработки прерываний построен по разным принципам. В 16-и разрядном процессоре (в реальном режиме работы) по номеру прерывания в векторе прерываний (четырехбайтным словам, находящихся в начале оперативной памяти) определяется адрес программы обработки прерывания. Если номер прерывания умножить на 4, то находим адрес двойного слова, где находится адрес программы обработки прерываний.

В защищенном режиме (32-х разрядный процессор и многозадачный режим работы) при прерывании имеем дело с таблицей дескрипторов прерываний (IDT – interrupt descriptor table). К этой таблице имеет доступ только операционная система и она определяет адрес программы обработчика прерывания.

Дескриптор прерываний может принадлежать к одному из трех типов:

  • коммутатор прерываний (interrupt gate);

  • коммутатор перехвата (trap gate);

  • коммутатор задачи (task gate).

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]