3484
Комментарий:
|
7782
|
Удаления помечены так. | Добавления помечены так. |
Строка 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 |
Исключения и системные вызовы
- Исключения - события, которые, помимо условных и безусловных переходов, изменяют нормальный порядок исполнения инструкций.
NB Терминология не устоялась. Так intel использует только термин "прерывание". В традиции mips(risc) принято использовать термин "исключение" для обозначения любого неожиданного изменения в алгоритме управления. Термин "прерывание" будет использоваться только для обозначения внешних событий.
- Возможная классификация:
Тип события
Источник
Термин MIPS
Переполнение
Внутренний
Исключение
Нет инструкции
Внутренний
Исключение
Системный вызов
Внутренний
Исключение
Запрос внешнего устройства
Внешний
Прерывание
Отказ оборудования
Внутренний/Внешний
Исключение/Прерывание
- Общая идея обработки исключения.
- Аппаратура процессора обнаруживает исключения и осуществляет передачу управления.
- переход на фиксированный адрес
- вектор прерываний
- Программная обработка
- Возврат к нормальному порядку исполнения инструкций.
- Аппаратура процессора обнаруживает исключения и осуществляет передачу управления.
- Еще одна возможная классификация:
Класс
Причина
Синхронное/Асинхронное
Поведение при возврате
Аварийное завершение(abort)
Фатальная ошибка
Да
Нет возврашения
Сбой(fault)
Потенциально восстановимая ошибка
Да
Возможен возврат к следующей инструкции
Системное прерывание(trap)
Предусмотренное исключение
Да
Возврат к следующей инструкции
Аппаратное прерывание(interrupt)
Сигнал устройства ввода/вывода
Нет
Возврат к следующей инструкции
- Обработка исключений в MIPS на примере эмулятора Mars.
- MARS имитирует основные элементы механизма MIPS32 исключений. Набор инструкций MIPS включает в себя ряд инструкций, которые вызывают исключение ловушки на основе относительных значений двух регистров или непосредственного значения и регистра:
- ten, teqi (ловушки если равно), tne, tnei (ловушки, если не равны), tge, tgeu, tgei, tgeiu (ловушкой, если больше или равно), tlt, tltu, tlti, tltiu (ловушка, если меньше).
- MARS содержит сопроцессор управления(сопроцессор 0). Инструкции mfc0 и mtc0 используются для чтения и записи данных в сопроцессор 0.
- Когда происходит исключение процессор совершает следующие действия:
- Устанавливает бит 1 регистра $12 (статус).
- Устанавливает биты 2-6 регистра $13(причина) согласно типу исключения (коды ниже).
- Устанавливает регистр $14 (EPC) устанавливается по адресу инструкции, вызвавшей исключение.
- Если исключение было вызвано обращением к неправильныму адресу памяти, регистр $8 (vaddr) устанавливается на этот неверный адрес.
Поток выполнения переключается с текущей инструкции MIPS на адрес 0x800000180. Этот адрес в сегменте текста ядра (.kext) является стандартным для расположение обработчика исключений MIPS32.
- Если нет инструкции по месту 0x800000180, Mars завершит работу программы MIPS с соответствующим сообщением об ошибке.
- Обработчик исключений может вернуть управление программе, используя команду eret. Это поместит значение из "EPC" (регистр $14) в счетчик команд("PC"). Увеличение регистра $14 на 4 перед возвращением позволит пропустить инструкцию, вызвавшую исключение.
- Типы исключений (не обязательно реализованы):
- 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).
- Регистры $k0 и $k1 по соглашениям могут быть использованы свободно.
- Простой пример:
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"
- MARS имитирует основные элементы механизма MIPS32 исключений. Набор инструкций MIPS включает в себя ряд инструкций, которые вызывают исключение ловушки на основе относительных значений двух регистров или непосредственного значения и регистра:
- Приложение
- Coprocessor_0 Mars
Название
Номер
Назначение
BadVAddr
8
Адрес при обращении к которому произошло исключение
Status
12
Состояние: маска прерываний, биты разрешений, ...
Cause
13
Тип исключения и биты отложенных прерываний
EPC
14
Адрес инструкции, которая вызвала исключение
- Инструкции для работы с регистрами Cop_0:
- mfc0 Rdest, C0src
- mtc0 Rsrc, C0dest
- eret
- Coprocessor_0 Mars