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

Последовательность команд SAVE H RESTORE называется образцом ISR(j) если в течении H уровень прерывания равен

il = j.

Она называется не прерывающимся выполнением ISR(j) если уровень прерывания подчиняется

il   =   jв течении save и restore

il   <=   jв течение H.

Таким образом, в течение выполнения ISR(j) обработчик H(j) может быть прерван. Мы не рассматриваем бесконечное выполнение.

Предположим, что H не заканчивается последовательностью restore уровня  прерывания j, тогда

save1 h SAVE2 H' restore

называется прерывающимся выполнением ISR(j) если

il  =    jв течении SAVE1

il  <=  jв течении H

il  <=  2   в течении SAVE2, H' и RESTORE.

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

1. прерван не кодовый сегмент save или restore,

2. последовательность кодовых сегментов save и restore формирует начальный сегмент соответствующей скобочной структуры, и если

3. парные скобки принадлежат примеру некоторого ISR(j) в следующем значении: Пусть Lи Rпарные последовательности save и restore. Пусть H состоит из команд между Lи R

(a) которые не принадлежат последовательностям save и restore, и

(b) которые не включаются парными скобками внутрь Lи R.

Тогда LHRобразец некоторого ISR(j).

Мы называем выполнения совершенно вложенными (perfectlynested) если они правильно вложены и последовательность saves и restores формирует соответствующую скобочную структуру. В следующих доказательствах мы установим, что


Теорема 5.2


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

Сперва мы установим свойства вполне вложенных выполнений процедур обработки прерываний в лемме 5.3.  В лемме 5.4 мы докажем



индукцией существование скобочной структуры. В шаге индукции мы применим лемму 5.3 к части скобочной структуры, чье существование уже гарантировано индукционной гипотезой.  В частности, нам нужны некоторые усилия для доказательства, что restores никогда не прерывается. Тогда теорема следует непосредственно из лемм 5.3 и 5.4.


Лемма 5.3


Пусть механизм прерывания подчиняется программным ограничениям 1 - 3. Рассмотрим совершенное вложенное выполнение ISR(j). Последовательность выполняемых команд имеет форму

тогда мы имеем:

1. Если выполнение ISR(j) не прервано, тогда стек прерываний IS хранит одно и то же количество кадров до и после ISR(j), и сегменты IS, зарезервированные для регистров HER, остаются неизменными, т.е.,

ISPa-1 = ISPd    и   IS.EHRa-1 = IS.EHRd .

2. Точность. Если ISR(j) не прервано, выполнение продолжается с




с масками





ДОКАЗАТЕЛЬСТВО


Доказательство индукцией по числу nпрерываний, которые прерывают выполнение ISR(j).

n = 0. Выполнение ISR(j) непрерывно. Так как прерывание j является непрерывным, save размещает новый кадр на стеке IS а restore снимает один кадр. Обработчик H(j) сам не изменяет указатель стека (ограничение 1), таким образом

ISPa-1 = ISPd .

Согласно ограничению 1, поля EHR на стеке прерываний ISпишутся только SAVE. Однако SAVE просто модифицирует один кадр IS, который удаляется restore. Таким образом

IS.EHRa-1 = IS.EHRd ,



и требование 1 выполняется. Что касается требования 2, мы покажем только точность масок SR; точность PC может быть показана тем же путем.

SRd   =   ESRd-1                                      по определению rfe

=   IS.TOP.ESRc-1по определению restore ,


где IS.TOPозначает верхний кадр стека IS. Так как сам обработчик не модифицирует ни указатель стека ISP, ни поля EHR на стеке IS (ограничение 1), из этого следует

IS.TOP.ESRc-1    =   IS.TOP.ESRb

=   ESRa-1                               по определению save ,

и по определению влияния JISRтогда следует, что

В шаге индукции мы решаем от n до n+ 1. Выполнение ISR(j) прерывается n+1 прерываниями, и коды SAVE и RESTORE соответствующих примеров ISR формируют надлежащую скобочную структуру. Так как save и restore непрерывны, существует mверхнеуровневых пар скобок в потоке команд обработчика H(j); каждая пара соответствует примеру ISR( jr ):

Каждый ISR( jr ) прерывается самое большее nраз, и из-за индукционной гипотезы они возвращают указатель ISPи поля EHR на стек неизмененными:


Тоже верно для полей EHR стека прерываний:



Так как restore удаляет кадр, добавленный SAVE, и так как save


Так как команды обработчика H(j) не изменяют эти данные, из этого следует для указателя ISP, что