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

Страницы работы

Содержание работы

Обработка прерываний

5.1    Попытка строгой обработки прерываний

ПРЕРЫВАНИЯ - события, которые изменяют ход выполнения программы средствами отличными от команд перехода.   Они запускаются активацией  сигналов событий (event signals), которые мы обозначим ev[j],    j = 0,1,.... Здесь мы рассмотрим прерывания показанные в таблице 5.1.

Проще говоря, активация сигнала события ev[j] должна привести к процедуре вызова подпрограммы H(j). Эта подпрограмма называется обработчик особых ситуаций (исключений) (exceptionhandler) прерывания jи и должна заботиться о проблеме сигнализируемой

Таблица 5.1 Прерывания, обрабатываемые нашей конструкцией  DLX

index j

название

обозначение

0

сброс           

reset

1

неверная команда

ill

2

обращение к памяти по неверной границе

mal

3

отсутствие страницы при выборке

pff

4

отсутствие страницы при загрузке/сохранении

pfls

5

ловушка

trap

6

арифметическое переполнение

ovf

6 + i

внешний I/O

exi


активацией ev[j]. Обработчик исключений для отсутствующих страниц, к примеру, должен переместить отсутствующую страницу из вторичной памяти в первичную. Прерывания могут быть классифицированы различными способами:

• Они могут быть внутренними, т.е., генерируемыми CPU или системой памяти, или внешними.

•  Они могут быть маскируемыми,т.е., они могут быть игнорированы под управлением программы, или немаскируемыми.

После прерывания команды I выполнение программы может быть продолжено тремя способами:

- повторить(repeat) команду I,

- продолжить (continue) с команды I+, которая следует за I при непрерывном выполнении программы,

- прервать (abort) программу.

Таблица 5.2 классифицирует прерывания рассматриваемые здесь.

Наконец, прерывания имеют приоритеты, определяемые индексом j. Активация ev[j] может вызвать программу обработки H(j') только если j < j'. Кроме того, если ev[j] и ev[j'] стали активными одновременно и  j < j', тогда обработчик H(j') не должен вызываться. Таким образом, меньшие индексы соответствуют большему приоритету.1

Если мы хотим сконструировать механизм прерываний и доказать, что он работает, мы должны сделать обычные три вещи:

1. определить, что предполагается делать механизму прерываний,

2. сконструировать механизм,

3. показать, что он выполняет спецификации.

Первый шаг, оказывается, не настолько прост. Повторимся, что прерывания являются своего рода вызовом процедур и что вызов процедуры является концепцией языка высокого уровня. С другой стороны, пока что наш самый высокий уровень абстракции – уровень ассемблера/машинного языка. Это верный уровень для определения того, что должны делать аппаратные средства. В частности, он позволяет определить значение команд подобных jal, которые поддерживают вызов процедур. Однако, значение вызова и возврата из процедуры не могут быть определены подобно значению команд ассемблера.

Есть различные способы определить семантику вызова процедуры и возврата из нее в языках высокого уровня [LMW86, Win93]. Наиболее простой путь – называемый операционной семантикой – определить значение процедуры



1Приоритет 1 - срочен, приоритет 31 - нет.


Таблица 5.2 Классификация прерываний

index j

обозначение

внешнее

маскируемое

продолжение

0

reset

yes

No

abort

1

ill

no

No

abort

2

mal

no

No

abort

3

pff

no

No

repeat

4

pfls

no

No

repeat

5

trap

no

No

continue

6

ovf

no

Yes

continue/abort

6 + i

exi

yes

yes

continue


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

Очевидным выбором 'абстрактной машины' является абстрактная DLX машина с семантикой задержанных ветвлений/задержанного PC, определенная как набор команд DLXσи их семантика. Машина, однако, должна быть дополнена. Должно быть место, где хранятся маски прерываний и должен быть механизм, способный изменять PC в ответ на сигналы событий. Мы также добавим механизмы для связывания адресов возврата и параметров, которые видны на уровне языка ассемблера.

Мы будем использовать единственную программу обработки прерываний ISR, которая будет под управлением программы переходить к различным обработчикам исключений H (j). Мы обозначим через SISRначальный адрес программы обработки прерываний.

Наконец мы способны спланировать оставшуюся часть главы. В разделе 5.2 мы определим на уровне абстракций языка ассемблера

1. расширение машинного языка DLX,

2. механизм, связывающий адреса возврата и параметры,

3. механизм, способный поместить пару адресов (SISR, SISR + 4) в (DPC, PC) в ответ на активацию сигналов событий.

В разделе 5.3 мы определим программный протокол для процедуры обработки прерываний, которая тесно связана с обычными процедурами вызова и возврата в операционной семантике. На этом завершится определение механизма прерываний.

Похожие материалы

Информация о работе