mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 09:10:10 +00:00
ЛР5. Добавление причин неподдерживаемых инструкций
This commit is contained in:
@@ -155,6 +155,13 @@ _Таблица 2. Значения сигнала `mem_size_o` при пере
|
||||
|
||||
## Обработка нелегальной инструкции
|
||||
|
||||
Существует множество причин, почему процессору может прийти на исполнение неподдерживаемая инструкция, в том числе:
|
||||
|
||||
- ошибка компиляции: либо баг в самом компиляторе, либо компиляция с неверными параметрами;
|
||||
- ошибка в аппаратуре (например сбой в работе памяти);
|
||||
- намеренная вставка неподдерживаемой инструкции (например для эксплуатации какой-нибудь уязвимости);
|
||||
- инструкция, которая на самом деле поддерживается процессором, но требует большего уровня привилегий и потому не может быть выполнена.
|
||||
|
||||
В случае появления инструкции, которая не поддерживается процессором, устройство управления должно обеспечить стабильность системы. В самом простом случае, такую инструкцию необходимо пропустить, сохранив так называемое **архитектурное состояние** процессора — т.е. сохранив значение всех элементов системы, характеризующих состояние системы в текущий момент. К таким элементам относятся: содержимое регистрового файла, основой памяти, содержимое регистров контроля и статуса и т.п. Значение программного счетчика также входит в архитектурное состояние процессора, однако в контексте пропуска инструкции с сохранением архитектурного состояния, его значение нужно изменить, иначе система оказалась бы в бесконечном цикле (неизменный счетчик бы указывал на ту же самую инструкцию, которая не должна менять архитектурного состояния).
|
||||
|
||||
Иными словами, в случае появления нелегальной инструкции, устройство управления (роль которого в нашей системе по большей части играет декодер) должно проследить за тем, чтобы в системе не изменилось ничего кроме программного счетчика. К сигналам, влияющим на изменение архитектурного состояния относятся:
|
||||
@@ -166,9 +173,11 @@ _Таблица 2. Значения сигнала `mem_size_o` при пере
|
||||
- branch_o,
|
||||
- jal_o,
|
||||
- jalr_o,
|
||||
- mret_o.
|
||||
- mret_o,
|
||||
|
||||
то есть, должны быть запрещены все запросы на запись, обращения в память и любые "прыжки" программного счетчика.
|
||||
|
||||
|
||||
Иными словами, должны быть запрещены все запросы на запись, обращения в память и любые "прыжки" программного счетчика.
|
||||
|
||||
Давайте теперь разберемся с тем, какие именно инструкции должен будет поддерживать наш процессор.
|
||||
|
||||
|
Reference in New Issue
Block a user