ЛР5. Добавление причин неподдерживаемых инструкций

This commit is contained in:
Andrei Solodovnikov
2024-07-08 16:58:48 +03:00
parent f6ffc3a451
commit 1c85c1ebbe

View File

@@ -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,
то есть, должны быть запрещены все запросы на запись, обращения в память и любые "прыжки" программного счетчика.
Иными словами, должны быть запрещены все запросы на запись, обращения в память и любые "прыжки" программного счетчика.
Давайте теперь разберемся с тем, какие именно инструкции должен будет поддерживать наш процессор.