Исключения и системные вызовы

  1. Исключения - события, которые, помимо условных и безусловных переходов, изменяют нормальный порядок исполнения инструкций.
    • NB Терминология не устоялась. Так intel использует только термин "прерывание". В традиции mips(risc) принято использовать термин "исключение" для обозначения любого неожиданного изменения в алгоритме управления. Термин "прерывание" будет использоваться только для обозначения внешних событий.

  2. Возможная классификация:
    • Тип события

      Источник

      Термин MIPS

      Переполнение

      Внутренний

      Исключение

      Нет инструкции

      Внутренний

      Исключение

      Системный вызов

      Внутренний

      Исключение

      Запрос внешнего устройства

      Внешний

      Прерывание

      Отказ оборудования

      Внутренний/Внешний

      Исключение/Прерывание

  3. Общая идея обработки исключения.
    • Аппаратура процессора обнаруживает исключения и осуществляет передачу управления.
      • переход на фиксированный адрес
      • вектор прерываний
    • Программная обработка
    • Возврат к нормальному порядку исполнения инструкций.
  4. Еще одна возможная классификация:
    • Класс

      Причина

      Синхронное/Асинхронное

      Поведение при возврате

      Аварийное завершение(abort)

      Фатальная ошибка

      Да

      Нет возврашения

      Сбой(fault)

      Потенциально восстановимая ошибка

      Да

      Возможен возврат к следующей инструкции

      Системное прерывание(trap)

      Предусмотренное исключение

      Да

      Возврат к следующей инструкции

      Аппаратное прерывание(interrupt)

      Сигнал устройства ввода/вывода

      Нет

      Возврат к следующей инструкции

  5. MIPS
    1. Coprocessor_0

      Название

      Номер

      Назначение

      BadVAddr

      8

      Адрес при обращении к которому произошло исключение

      Status

      12

      Состояние: маска прерываний, биты разрешений, ...

      Cause

      13

      Тип исключения и биты отложенных прерываний

      EPC

      14

      Адрес инструкции, которая вызвала исключение

    2. Инструкции для работы с регистрами Cop_0:
      • mfc0 Rdest, C0src
      • mtc0 Rsrc, C0dest
      • eret