From 1c85c1ebbe9ea5f5e4f1db4b8f40585a21ac3251 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Mon, 8 Jul 2024 16:58:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B8=D1=87=D0=B8?= =?UTF-8?q?=D0=BD=20=D0=BD=D0=B5=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=20=D0=B8=D0=BD=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/05. Main decoder/README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index c40a8d8..94e583f 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -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, + +то есть, должны быть запрещены все запросы на запись, обращения в память и любые "прыжки" программного счетчика. + -Иными словами, должны быть запрещены все запросы на запись, обращения в память и любые "прыжки" программного счетчика. Давайте теперь разберемся с тем, какие именно инструкции должен будет поддерживать наш процессор.