Различия между версиями 3 и 4
Версия 3 от 2016-02-16 20:28:00
Размер: 3484
Редактор: ali
Комментарий:
Версия 4 от 2016-02-16 21:53:35
Размер: 7782
Редактор: ali
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 16: Строка 16:
   * Программная обработка     * Программная обработка
Строка 24: Строка 24:
 1. MIPS
   1.
   1. Coprocessor_0
 1. Обработка исключений в MIPS на примере эмулятора Mars.

   1. MARS имитирует основные элементы механизма MIPS32 исключений. Набор инструкций MIPS включает в себя ряд инструкций, которые вызывают исключение ловушки на основе относительных значений двух регистров или непосредственного значения и регистра:
      ten, teqi (ловушки если равно), tne, tnei (ловушки, если не равны), tge, tgeu, tgei, tgeiu (ловушкой, если больше или равно), tlt, tltu, tlti, tltiu (ловушка, если меньше).
     MARS содержит сопроцессор управления(сопроцессор 0).
     Инструкции mfc0 и mtc0 используются для чтения и записи данных в сопроцессор 0.
   1. Когда происходит исключение процессор совершает следующие действия:
      *Устанавливает бит 1 регистра $12 (статус).
      *Устанавливает биты 2-6 регистра $13(причина) согласно типу исключения (коды ниже).
      *Устанавливает регистр $14 (EPC) устанавливается по адресу инструкции, вызвавшей исключение.
      *Если исключение было вызвано обращением к неправильныму адресу памяти, регистр $8 (vaddr) устанавливается на этот неверный адрес.
      *Поток выполнения переключается с текущей инструкции MIPS на адрес '''0x800000180'''. Этот адрес в сегменте текста ядра (.kext) является стандартным для расположение обработчика исключений MIPS32.
      *Если нет инструкции по месту 0x800000180, Mars завершит работу программы MIPS с соответствующим сообщением об ошибке.
      *Обработчик исключений может вернуть управление программе, используя команду eret. Это поместит значение из "EPC" (регистр $14) в счетчик команд("PC"). Увеличение регистра $14 на 4 перед возвращением позволит пропустить инструкцию, вызвавшую исключение.
   1. Типы исключений (не обязательно реализованы):
    * ADDRESS_EXCEPTION_LOAD (4)
    *ADDRESS_EXCEPTION_STORE (5)
    *SYSCALL_EXCEPTION (8),
    *BREAKPOINT_EXCEPTION (9),
    *RESERVED_INSTRUCTION_EXCEPTION (10),
    *ARITHMETIC_OVERFLOW_EXCEPTION (12),
    *TRAP_EXCEPTION ( 13),
    *DIVIDE_BY_ZERO_EXCEPTION (15),
    *FLOATING_POINT_OVERFLOW (16),
    *FLOATING_POINT_UNDERFLOW (17).
   1. Регистры $k0 и $k1 по соглашениям могут быть использованы свободно.
   1. Простой пример:
      {{{#!highlight nasm
   .text
main:
   teqi $t0,0 # immediately trap because $t0 contains 0
   li $v0, 10 # After return from exception handler, specify exit service
   syscall # terminate normally

# Trap handler in the standard MIPS32 kernel text segment

   .ktext 0x80000180
   move $k0,$v0 # Save $v0 value
   move $k1,$a0 # Save $a0 value
   la $a0, msg # address of string to print
   li $v0, 4 # Print String service
   syscall
   move $v0,$k0 # Restore $v0
   move $a0,$k1 # Restore $a0
   mfc0 $k0,$14 # Coprocessor 0 register $14 has address of trapping instruction
   addi $k0,$k0,4 # Add 4 to point to next instruction
   mtc0 $k0,$14 # Store new address back into $14
   eret # Error return; set PC to value in $14
   .kdata
msg:
   .asciiz "Trap generated"
}}}

 1. Приложение
   1. Coprocessor_0 Mars

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

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

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

      Источник

      Термин MIPS

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

      Внутренний

      Исключение

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

      Внутренний

      Исключение

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

      Внутренний

      Исключение

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

      Внешний

      Прерывание

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

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

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

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

      Причина

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

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

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

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

      Да

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

      Сбой(fault)

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

      Да

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

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

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

      Да

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

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

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

      Нет

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

  5. Обработка исключений в MIPS на примере эмулятора Mars.
    1. MARS имитирует основные элементы механизма MIPS32 исключений. Набор инструкций MIPS включает в себя ряд инструкций, которые вызывают исключение ловушки на основе относительных значений двух регистров или непосредственного значения и регистра:
      • ten, teqi (ловушки если равно), tne, tnei (ловушки, если не равны), tge, tgeu, tgei, tgeiu (ловушкой, если больше или равно), tlt, tltu, tlti, tltiu (ловушка, если меньше).
      • MARS содержит сопроцессор управления(сопроцессор 0). Инструкции mfc0 и mtc0 используются для чтения и записи данных в сопроцессор 0.
    2. Когда происходит исключение процессор совершает следующие действия:
      • Устанавливает бит 1 регистра $12 (статус).
      • Устанавливает биты 2-6 регистра $13(причина) согласно типу исключения (коды ниже).
      • Устанавливает регистр $14 (EPC) устанавливается по адресу инструкции, вызвавшей исключение.
      • Если исключение было вызвано обращением к неправильныму адресу памяти, регистр $8 (vaddr) устанавливается на этот неверный адрес.
      • Поток выполнения переключается с текущей инструкции MIPS на адрес 0x800000180. Этот адрес в сегменте текста ядра (.kext) является стандартным для расположение обработчика исключений MIPS32.

      • Если нет инструкции по месту 0x800000180, Mars завершит работу программы MIPS с соответствующим сообщением об ошибке.
      • Обработчик исключений может вернуть управление программе, используя команду eret. Это поместит значение из "EPC" (регистр $14) в счетчик команд("PC"). Увеличение регистра $14 на 4 перед возвращением позволит пропустить инструкцию, вызвавшую исключение.
    3. Типы исключений (не обязательно реализованы):
      • ADDRESS_EXCEPTION_LOAD (4)
      • ADDRESS_EXCEPTION_STORE (5)
      • SYSCALL_EXCEPTION (8),
      • BREAKPOINT_EXCEPTION (9),
      • RESERVED_INSTRUCTION_EXCEPTION (10),
      • ARITHMETIC_OVERFLOW_EXCEPTION (12),
      • TRAP_EXCEPTION ( 13),
      • DIVIDE_BY_ZERO_EXCEPTION (15),
      • FLOATING_POINT_OVERFLOW (16),
      • FLOATING_POINT_UNDERFLOW (17).
    4. Регистры $k0 и $k1 по соглашениям могут быть использованы свободно.
    5. Простой пример:
      •    1    .text
           2 main:
           3    teqi $t0,0     # immediately trap because $t0 contains 0
           4    li   $v0, 10   # After return from exception handler, specify exit service
           5    syscall        # terminate normally
           6 
           7 # Trap handler in the standard MIPS32 kernel text segment
           8 
           9    .ktext 0x80000180
          10    move $k0,$v0   # Save $v0 value
          11    move $k1,$a0   # Save $a0 value
          12    la   $a0, msg  # address of string to print
          13    li   $v0, 4    # Print String service
          14    syscall
          15    move $v0,$k0   # Restore $v0
          16    move $a0,$k1   # Restore $a0
          17    mfc0 $k0,$14   # Coprocessor 0 register $14 has address of trapping instruction
          18    addi $k0,$k0,4 # Add 4 to point to next instruction
          19    mtc0 $k0,$14   # Store new address back into $14
          20    eret           # Error return; set PC to value in $14
          21    .kdata
          22 msg:
          23    .asciiz "Trap generated"
        
  6. Приложение
    1. Coprocessor_0 Mars

      Название

      Номер

      Назначение

      BadVAddr

      8

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

      Status

      12

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

      Cause

      13

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

      EPC

      14

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

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

ArchitectureAssembler/16_ExceptionsSyscalls (последним исправлял пользователь ali 2016-03-19 03:07:47)