Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по лекционным вопросам 1-29 МПТ 2008.doc
Скачиваний:
13
Добавлен:
14.04.2019
Размер:
1.46 Mб
Скачать

Вопрос 26. Организация прерываний в микропроцессорной системе

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

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

  1. внешние прерывания. Вызываются асинхронными событиями, которые происходят вне прерываемой программы. Например, прерывания от таймера или подсистемы ввода/вывода;

  2. внутренние прерывания. Вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями. Например:

    • арифметическое переполнение, попытка деления на 0, переполнение или исчезновение порядка при выполнении операций с плавающей запятой;

    • внутренние прерывания происходят при обращении к защищенным или несуществующим ячейкам памяти, а также к отсутствующему сегменту или странице;

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

    • внутренние прерывания могут вызываться также сбоями системы, например, ошибкой четности;

    • при выполнении специальных команд.

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

  1. информация о состоянии процессора, которая включает

    • состояние выполнения. МП может находиться либо в состоянии выполнения команд (в активном состоянии), либо в состоянии ожидания, когда выполнение прекращается;

    • режим – пользовательский или системный;

    • маски прерывания;

  2. информация о доступном контексте в памяти и соответствующих правах доступа, например, таблицы сегментов, указатели защиты памяти и т.п.;

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

Контекст процессора может быть сохранен в памяти микропроцессорной системы, а затем восстановлен непосредственно перед возвратом в прерванную программу. Этот процесс называется контекстным переключением и выполняется как аппаратными, так и программными средствами. Всякий раз, когда процессор воспринимает запрос на прерывание, он активизирует процедуру обслуживания, передавая ее стартовый адрес в программный счетчик. Чтобы не потерялось старое содержимое программного счетчика, которое является адресом возврата в прерванную программу, оно должно быть автоматически сохранено. Лучше всего для этой цели использовать системный стек, тогда возврат к прерванной программе будет заключаться в передаче управления по адресу, находящемуся на вершине стека. Обычно аппаратными средствами обработки прерывания автоматически сохраняется не только содержимое программного счетчика, но и весь вектор состояния процессора (как правило содержимое программного счетчика и регистра состояния процессора). В этом же стеке можно сохранять и остальную часть текущего контекста процессора – программно-доступные регистры. Как правило, это выполняется программно с помощью обычных команд типа PUSH (запись в стек) непосредственно в подпрограмме обработки прерывания. При этом восстановление контекста осуществляется с помощью команд типа POP (чтение из стека). Контекстное переключение, выполняемое командами PUSH и POP, может занимать значительное время. Для его сокращения вводятся специальные команды PUSHA и POPA, которые сохраняют в стеке и восстанавливают сразу весь набор регистров МП. Еще один механизм контекстного переключения связан с переключением регистровых наборов в МП. Кроме того, контекстное переключение может выполняться и полностью аппаратным путем.

Таким образом, хотя существует несколько различных способов обработки прерывания, следующая последовательность действий присуща большинству микропроцессорных систем:

  1. фиксируются характеристики произошедшего прерывания (тип прерывания);

  2. сохраняется состояние прерванной программы – контекст процессора;

  3. анализируется тип прерывания и передается управление соответствующей подпрограмме обработки этого прерывания;

  4. обрабатывается прерывание – выполняется соответствующая подпрограмма;

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

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

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

Существуют две системы прерываний:

  1. радиальная система прерываний;

  2. векторная система прерываний.