diff --git a/.pic/Labs/lab_10_irq/fig_02.drawio.png b/.pic/Labs/lab_10_irq/fig_02.drawio.png index 397c848..793fc19 100644 Binary files a/.pic/Labs/lab_10_irq/fig_02.drawio.png and b/.pic/Labs/lab_10_irq/fig_02.drawio.png differ diff --git a/.pic/Labs/lab_11_irq_integration/fig_01.drawio.png b/.pic/Labs/lab_11_irq_integration/fig_01.drawio.png index fa4ab2a..79495b9 100644 Binary files a/.pic/Labs/lab_11_irq_integration/fig_01.drawio.png and b/.pic/Labs/lab_11_irq_integration/fig_01.drawio.png differ diff --git a/Labs/10. Interrupt subsystem/README.md b/Labs/10. Interrupt subsystem/README.md index d6ec385..400b2c9 100644 --- a/Labs/10. Interrupt subsystem/README.md +++ b/Labs/10. Interrupt subsystem/README.md @@ -101,7 +101,7 @@ _Таблица 2. Список регистров, подлежащих реа Регистр `mtvec` является базовым адресом обработчика прерывания. Это значит, что предусмотрена возможность реализации как обзорной (прямой), так и векторной системы прерывания. В первом случае при возникновении прерывания в **program counter** загружается значение `mtvec`. Во втором случае, в **program counter** загружается сумма регистра базового адреса `mtvec` и регистра причины прерывания `mcause`, который обновляется каждый раз, когда происходит прерывание, значение в нем несет информацию о том, что именно произошло в системе. -Так как обработчик прерывания будет использовать те же регистры, что и прерванная программа, то перед использованием регистрового файла, данные из него необходимо сохранить, разместив их на стеке. Стек для прерывания находится не там же, где программный стек, а адрес начала этого стека хранится в регистре `mscratch` и по сути является указателем на верхушку стека. Регистр `mepc` сохраняет адрес инструкции, следующей за той, вовремя которой произошло прерывание или исключение. Однако чтобы не нарушался ход программы, необходимо, чтобы инструкция, во время которой произошло прерывание исполнилась до конца. Это приведет к появлению задержки между моментом прерывания и началом его обработки в случае, если исполнялась инструкция работы с внешней памятью. +Так как обработчик прерывания будет использовать те же регистры, что и прерванная программа, то перед использованием регистрового файла, данные из него необходимо сохранить, разместив их на стеке. Стек для прерывания находится не там же, где программный стек, а адрес начала этого стека хранится в регистре `mscratch` и по сути является указателем на верхушку стека. Регистр `mepc` сохраняет адрес инструкции во время которой произошел перехват. Это очень важно понимать, при реализации обработчика исключения — если в нем не перезаписать этот регистр, по возврату из обработчика процессор снова окажется на инструкции, которая вызвала исключение. Когда процессор включается, программа первым делом должна инициализировать все требуемые CS-регистры, в частности: