Детальный проект конвейерного RISC процессора (Глава 5 "Обработка прерываний"), страница 2


В откомпилированных программах тело процедуры генерируется компилятором. Таким образом, компилятор гарантирует, что тело процедуры, в определенном значении, хорошо себя ведет, например, что оно не перезаписывает адрес возврата. В нашей ситуации, откомпилированное тело процедуры замещается обработчиком исключений, который – между прочим - может переписать адрес возврата в кадре процедуры. Он также может генерировать прерывания несколькими способами. Действительно, попытка выполнить обработчик исключений для отсутствующей страницы, который не находится в памяти, немедленно генерирует другое прерывание по отсутствию страницы, и т.д.

Поэтому в разделе 5.4 мы представим набор условий для обработчиков исключений и покажем: если обработчик исключений удовлетворяет условиям, то прерывания ведут себя подобно вызову подпрограмм. Доказательство оказывается непростым главным образом из-за факта, что команды, которые изменяют маски прерываний, сами могут быть прерваны.

Используя уже разработанные машины, остальное просто. В разделе 5.5, мы сконструируем аппаратуру прерываний для подготовленной последовательной машины в соответствии с определениями раздела 5.2. В разделе 5.6, мы конвейеризируем машину и покажем, что конвейерная машина в некотором смысле моделирует подготовленную последовательную машину. Основной технической проблемой там будет более мощный механизм пересылки.


5.2    Архитектура расширенного набора команд

Прерывания отсутствие страницы и нарушения границ, очевидно, генерируются системой памяти. Неверные прерывания обнаруживаются управляющим автоматом на этапе декодирования. Прерывания переполнения могут быть сгенерированы двумя новыми командами R-типа addo, subo и двумя новыми командами I-типа addio, subio определенными в таблице 5.4. Они генерируют (маскируемый) сигнал события переполнения ev[5], если результат вычисления не представляется как 32-битные дополнительные числа. Прерывание ловушки генерируется новой командой J-типа trap (таблица 5.4). Внешние прерывания генерируются внешними устройствами; для этих прерываний мы применим следующее

Соглашение о прерываниях:

Активная линия события ev[j] прерывания jвнешнего I/O только выключена, один раз прерывание jобслуживается. Прерывание jполучает обслуживание как только ISR стартует с уровнем прерывания j’, где j' = j, или где j' < jи прерывание j' имеет тип abort. Формальное определение концепции уровня прерываний вскоре будет дано.


Таблица 5.3 Регистры специального назначения, используемые для обработки исключений

address

name

meaning

0

SR

status register

1

ESR

exception status register

2

ECA

exception cause register

3

EPC

the exception PC

4

EDPC

the exception delayed PC

5

Edata

exception data register


Архитектура DLX расширена 7 новыми регистрами, 6 из которых являются видимыми для программиста на ассемблере. Они формируют регистры SPR[0] - SPR[5] нового файла регистров специального назначения SPR. Имена и адреса регистров SPR перечислены в таблице 5.3; их функции будут объяснены позже.

Содержимое регистров может копироваться между файлом регистров общего назначения GPRи файлом регистров специального назначения SPRпосредством специальных команд перемещения movi2s (переместить целый в специальный) и movs2i (поместить специальный в целый). Оба перемещения - команды R-типа (таблица 5.4). Двоичное представление адреса специального регистра определено в поле SA.

Регистр причины (cause register) CA – новый невидимый регистр. Он отлавливает сигналы событий ev[j], которые стали активными в течение выполнения команды Ii в следующем значении:

• Если jявляется внутренним прерыванием, оно отлавливается в той же команде, т.е.,

CA[j]i = 1.

Если j- внешнее, оно отлавливается в текущей или в следующей команде; CA[j]i = 1 или CA[j]i+1 = 1. Однажды активировавшись, бит CA[j] остается активным пока прерывание  j обрабатывается.

В любой другой ситуации мы имеем CA[j]i = 0.


Обратите внимание, что это не простое уравнение. Оно означает, что для команды Ii  причины маскируются масками верными после команды Ii-1 . Таким образом, если Ii случается


Маски прерываний сохраняются в регистре состояния SR. Для маскируемого прерывания j, бит SR[j] сохраняет маску прерывания j. Маскирование означает, что прерывание jотключено (маскируемо) если SR[j] = 0, и немаскируемо иначе. Маскируемая причина (masked cause) MCAзависит от регистра причины и регистра состояния. Для команды Ii, маскируемая причина равна