Sigma-7 для запоминания содержимого регистров исполь зуется быстрая память с циклом записи 90 нсек, куда перед выполнением каждой команды записывается на чальное состояние регистров. Поэтому прерванная на любом такте команда может быть в последующем вос становлена засылкой в регистры данных из быстрой па-
Вход 8 прерывающую программу
Рис. 8-3. Примерная блок-схема прерывающей про граммы.
мяти и пущена с начального такта без потери содержи мого регистров. В рассматриваемой машине команды, длительность которых меньше 10 мсек, прерываются только после окончания операции. Команды длительно стью 10—30 мсек могут быть прерваны на любом такте и в дальнейшем восстановлены с начального такта. Ко манды, длительность которых превосходит 30 мсек, пре
рываются на любом такте и возобновляют свою работу с точки прерывания. В последнем случае в быструю па мять записывается в момент прерывания текущее состоя ние регистров.
Определение начального адреса прерывающей про
|
|
|
|
граммы. Один из способов определения |
начального адре |
са прерывающей |
программы, который |
можно назвать |
п р о г р а м м н ы м |
р а с п о з н а в а н и е м |
п р и ч и н |
п р е р ы в а н и я , |
состоит в том, что все |
прерывающие |
входы, т. е. линии связи, по которым приходят запросы прерывания, объединяются в схему ИЛИ, формирующую один и тот же сигнал при появлении любого из запро сов. Этот сигнал в допустимый для прерывания момент времени возбуждает прерывающую программу и одно временно записывает в ячейку памяти или триггерный регистр, доступный программе, текущее состояние пре рывающих входов. Прерывающая программа анализиру ет запросы и разветвляется для выполнения соответст вующих действий. Каждая из ветвей заканчивается гашением соответствующего запроса прерывания и вы ходом из прерывающей программы. Примерная блок-схе ма такой программы приведена на рис. 8-3.
Рассмотренный метод является одним из наиболее экономичных, однако вследствие большого числа слу жебных команд, необходимых для анализа запросов пре рывания, время реакции и время обслуживания оказы ваются достаточно большими. Глубина прерывания рав на единице и, следовательно, приоритетное обслуживание прерываний затруднено. По этим причинам возможно насыщение системы прерывания даже при сравнитель но небольшом количестве источников прерывания и не высокой частоте следования запросов.
Ускорение работы системы прерывания может быть достигнуто, если каждому источнику прерывания или группе источников поставить в соответствие свой инди
видуальный |
адрес начала' прерывающей |
программы |
и включить |
в состав машины специальную |
аппаратуру, |
которая при появлении запроса прерывания формирова ла бы соответствующий адрес перехода к прерывающей программе. Такой способ может быть назван а п п а р а т ным р а с п о з н а в а н и е м п р и ч и н п р е р ы в а н и я . Совокупность входов системы прерывания, которым со ответствует один и тот же адрес начала прерывающей программы, принято именовать у р о в н е м п р е р ы в а -
н и я; таким образом, система с аппаратным распозна ванием причин прерывания может быть названа также многоуровневой системой прерывания.
Простейший способ указания начальных адресов состоит в том, что каждому уровню присваивается номер и отводится в памяти фиксированная ячейка, адрес ко торой, например, равен номеру уровня. В указанной та ким образом ячейке памяти может находиться команда перехода к остальной части прерывающей программы, которая может храниться в произвольном участке памя ти. Набор фиксированных по отношению к своим уров ням ячеек памяти образует таблицу входов в прерываю щие программы, содержание которой программист мо жет устанавливать и изменять в соответствии с потребностями своей программы.
Дальнейшее развитие этого метода состоит в том, что начальный адрес прерывающей программы образуется как сумма номера уровня и некоторой величины (базо вого адреса прерывания). Последний хранится в спе циальном базовом регистре, доступном программе. При появлении запроса устройство прерывания находит но мер уровня N и использует величину Л+Л/, где А — со держимое базового регистра, как адрес ячейки, в кото рой находится первая команда прерывающей програм мы. Преимущества этого метода состоят, во-первых, в том, что для каждого уровня можно иметь несколько' прерывающих программ. Изменяя базовый адрес, чис ло программ можно удвоить, утроить и т. д. Это свойство является полезным, если в различных режимах работы вычислительной системы она должна различным обра зом реагировать на одни и те же события. Во-вторых, са ма таблица входов в прерывающие программы может быть размещена где угодно в памяти, что облегчает рас пределение памяти для данного набора программ.
Использование базового адреса требует выполнения операции сложения. Использовать для этой цели ариф метическое устройство машины сложно, так как в его регистрах может содержаться информация, которую на до сохранить. Введение же специального сумматора в систему прерывания удорожает аппаратуру. Поэтому суммирование базового адреса и номера уровня иногда заменяют операцией совмещения: старшие разряды на чального адреса берутся из базового регистра, млад шие — равны номеру уровня. При введенных выше обо
значениях начальный адрес прерывающей программы
равен А •2а -j-A, где а — число двоичных разрядов номе ра уровня N. В этом случае таблица входов в прерываю щие программы может быть начата не с любой ячейки памяти, а только с той, у которой а младших разрядов адреса имеет нулевое значение. Однако такое ограниче ние лишь незначительно уменьшает гибкость системы.
Аппаратное распознавание причин прерывания тре бует специального оборудования, объем которого при большом количестве источников прерывания может быть значительным. Удовлетворительный компромисс дости гается путем сочетания обоих методов распознавания: программного и аппаратного. Каждый уровень предназ начается для обслуживания не одного, а нескольких ис точников прерывания, и физически уровень реализуется в виде некоторого количества прерывающих входов, объединенных схемой ИЛИ. Примером подобного ком промисса может служить система прерывания управляю щей машины IBM 1800, имеющей до 24 уровней преры вания, к каждому из которых может быть присоединено до 16 прерывающих входов. Состояние прерывающих входов в момент прерывания записывается в память в определенную для данного уровня ячейку. Для облегче ния анализа причин прерывания в системе команд ма шины предусмотрена команда сдвига содержимого ячей ки влево до появления первой единицы с подсчетом чис ла сдвигов в индексном регистре. Используя индексный регистр для модификации адресной части команды без условного перехода, легко организовать разветвление прерывающей программы в соответствии с источниками прерывания.
8-3. ПРИ ОРИТЕТНОЕ О БСЛУ Ж И ВА Н И Е П РЕРЫ ВА Н И И
Для системы с программным распознаванием причин прерывания учет приоритета в обслуживании различных запросов обеспечивается соответствующим построением прерывающей программы: анализ запросов прерывания начинается с тех, которым приписан более высокий при оритет. Изменение приоритета запросов в процессе ра боты системы осуществляется обычными программными методами.
В многоуровневых системах с аппаратным распозна ванием причин прерывания приоритетное обслуживание
обеспечивается специальными устройствами, включае мыми в состав аппаратуры, осуществляющей вход в пре рывающие программы. Поэтому необходимо рассмотреть этот вопрос более подробно.
Понятие приоритета в прерывании программ имеет два значения. Так как никаких ограничений на время возникновения запросов не накладывается, в систему мо
жет |
одновременно |
поступать несколько |
запросов по |
у |
|
|
|
Общий |
сигнал |
|
|
5;Л< |
|
|
прерывания |
в процессор |
S *: |
■ |
|
|
|
|
|
|
|
§ 5 |
тора |
|
ін |
|
1 |
1 |
|
|
|
|
|
|
|
|
2-1 |
|
|
|
|
0 вс |
|
|
|
|
|
& |
СТ |
0 |
|
|
|
|
|
|
|
|
|
|
|
От генера- |
|
|
|
1 |
|
|
|
сканирова |
|
|
|
|
|
|
|
|
|
|
|
|
ния |
|
|
• |
|
|
|
|
Гашение |
|
|
|
|
|
|
счетчика |
R |
•• |
п |
\ |
-1 |
|
|
п |
|
|
|
|
|
|
J |
|
|
|
Рис. 8-4. Последовательный поиск запросов прерывания.
различным уровням, из них для немедленного рассмот рения может быть выбран только один. Этот вид приори тета, определяющий очередность восприятия запросов прерывания от различных уровней, может быть назван
приоритетом между запросами прерывания. С другой стороны, прерывающие программы могут иметь относи тельно идущей в данный момент программы различную степень важности, и не любая программа может быть прервана любым запросом. Текущая программа, в свою очередь, могла быть активизирована предшествующим запросом прерывания, и для того чтобы иметь право прервать ее, воспринятый аппаратурой прерывания за прос должен соответствовать программе более срочной, чем выполняемая в данный момент. Этот вид приорите та, определяющий порядок старшинства программ, на зывается приоритетом между прерывающими програм мами.
Приоритет между запросамии прерывания может быть схемно реализован различным образом. Один из возможных путей— «последовательный поиск»— заклю чается в том, что имеется п-разрядный счетчик, который с некоторой частотой изменяет свое содержимое на еди ницу младшего разряда и последовательно просматрива ет все 2га уровней прерывания.
Запрос № 1 |
|
|
|
|
|
|
! |
|
|
|
|
0 |
0 |
|
? Т |
^ |
1 |
0 |
0 |
£ |
|
|
|
|
|
Запрос№ 2,------ — ЦП |
|
1 |
0 |
о |
0 |
|
' — f f j V |
u |
|
|
|
|
|
|
|
|
|
^ |
|
1 |
0 |
и |
о |
|
— |
|
|
|
|
|
|
Запрос JP-2S, |
ЦП |
|
1 |
|
|
1 |
|
|
|
|
|
|
|
Рис. 8-5. Матричная схема распознавания прерываний.
На рис. 8-4 приведена функциональная схема аппа ратуры, осуществляющей последовательный поиск. В каждом такте просмотра проверяется с помощью со ответствующей схемы И один из уровней прерывания, номер которого совпадает с текущим содержанием счет чика. Если данный уровень не содержит запроса пре рывания, то после очередного импульса генератора со держимое счетчика увеличится на единицу и проверке подвергается следующий по порядку уровень. Если за прос прерывания имеется, то дальнейший просмотр пре кращается, в процессор посылается сигнал прерывания, а содержимое счетчика используется для формирования начального адреса прерывающей программы. После того как вход в прерывающую программу будет осуществлен, процессор гасит счетчик и процедура поиска запросов прерывания возобновляется, начиная с нулевого уровня.