8086.ru3. Средства управления памятью → 3.3 Режимы работы процессора и виды прерываний

3.3 Режимы работы процессора и виды прерываний

Управление работой ЭВМ осуществляется с помощью операционной системы (ОС), которая включает набор средств для управления выполнением последовательности команд, файлами, трансляцией и всеми периферийными устройствами (ПУ) с помощью драйверов.

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

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

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

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

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

  • внутренние;
  • программные;
  • внешние.

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

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

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

  • нарушение - это такой особый случай, который процессор может обнаружить до возникновения фактической ошибки (например, нарушение правил привилегий, превышение размера сегмента, нарушение атрибутов доступа к сегменту, недействительного кода операции и т.д.). После обработки нарушения (выполнения ППОП) можно продолжить программу путем повторного выполнения (рестарта) виноватой команды;
  • ловушка - это такой особый случай, который процессор обнаруживает после окончания выполнения виноватой команды (например, прерывание при переполнении, большинство отладочных команд INT n). После обработки прерывания особого случая процессор возобновляет действия с той команды, которая находится после "захваченной" команды;
  • авария - это ситуация, когда ошибка настолько серьезна, что ее невозможно устранить и продолжить выполнение программы. При аварии вычислительный процесс прекращается. К таким видам ошибок относятся аппаратные ошибки, обнаруживаемые ОС, или недопустимые значения в системных таблицах.

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

Обработка при нарушении правил привилегии необходима для защиты ОС. Привилегированной называется команда, выполнение которой разрешается только в системном режиме. К ним относятся: команды изменения содержимого регистра состояния и системных регистров процессора, команда возврата RTI из системного режима, команды останова HALT и сброса RESET, команды ввода-вывода IN и OUT и другие.

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

Функциями средств, обслуживающих внешние прерывания, поступающих от ПУ (аппаратуры прерывания), являются:

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

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

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

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

Немаскируемые прерывания, как правило, поступают на отдельный вход немаскируемых прерываний процессора NMI. Процедура обработки запроса отличается от описанной только тем, что немаскируемое прерывание имеет фиксированный номер (вектор) с наивысшим приоритетом и не требуется процедура фиксации запроса и его распознавания, что ускоряет реакцию процессора на ситуацию.

В микропроцессорном комплекте (МПК) серии К1810 имеется специальная БИС контроллера прерываний ВН59А, с помощью которой можно путем программной настройки создавать подсистемы прерываний следующих видов: с маскированием входов; приоритетные ( с фиксированными и циклически изменяемыми приоритетами); многоуровневые (до 64 уровней); векторные (до 64 векторов) и динамически маскируемые.

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

Подпрограмму, находящуюся в системной области памяти, нельзя выполнить в пользовательском режиме непосредственно с помощью команд вызова CALL. Для этой цели в систему команд вводится специальная команда программного прерывания INT. В некоторых процессорах, работающих в двух режимах работы, в систему команд входят две команды программного прерывания: EMT - вызова системного прерывания (специального прерывания) и TRAP - вызова пользовательского прерывания (вектора захвата). При выполнении команды ЕМТ информация сохраняется в стеке системной области памяти и в слове состояния процессора устанавливается системный режим работы, а по команде TRAP информация сохраняется в стеке пользователя без изменения режима работы процессора.

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

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

Возврат из программного прерывания выполняется с помощью специальных команд или программных средств: для команды INT по команде IRET возврата из прерывания, а для команд ЕМТ и TRAP по командам RTI и RTT соответственно, которые определяют, из какого стека, системного или пользовательского, выполнять восстановление состояния процессора для возврата из подпрограммы обработки прерывания. Прежний режим работы процессора восстанавливается автоматически из слова состояния процессора SR, так как изменение режима работы в SR осуществляется после сохранения слова состояния в стеке.