К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 59
Текст из файла (страница 59)
В режиме НЯ вместо регистров К8 — К14 используются регистры К8 (и1 — К14 (к1. Регистры, заменяющие регистры пользовательского режима, называются запасными (Ьап)тец гей(згегз). Они могут использоваться программами обработки прерываний без необходимости сохранения содержимого заменяемых ими регистров, применяемых в пользовательском режиме. Напривтер, когда в режиме 1КЯ процессору встречается команда со ссылкой на регистр К13, он обращается к регистру К13 1гт1, а не к регистру К13, к которому ему пришлось бы обратиться в пользовательском режиме.
Для каждого режима, кроме пользовательского, имеется специальный регистр (БРЯК зтгс, ЯРВК 1п1 и т. д.), предназначенный для сохранения содержимого регистра СРОК на время обработки прерывания. Он называется регистром сохранения состояния процессора (затгеб ргосеаеот зтатпз гей!зтег). Программы обработки прерывания начинаются в памяти по фиксированным здресам (табл. 4.1). После прерывания процессор переходит в нужный режим и начинает выполнять программу, расположенную по соответствующему адресу. Поскольку по атому адресу выделяется место только для одной команды программы (если не считать команду прерывания НО), там хранится команда перехода к программе обработки прерывания.
Программа обработки прерывания НО может располагаться и по адресу, заданному в векторе прерывания. 252 Глава 4. Ввод-вывод Регистры общего назначения и счетчик команд Р1Я 1КЯ зпреМзог АЬогг Вп4ейпед Свет Регистры состояния процессора СроК СроК СрзК СРОК СРОК ЯРБК Опа ЯРОК аЪг БРЯК вус КРЯК но ЯЯК йо Рио. 4.12. Регистры, доступные в разных ре;кимах процессора АНМ Когда процессор принимает запрос на прерывание, он выполняет ряд следующих действий. 1.
Сохраняет адрес возврата прерванной программы в регистре 14 соответствующего режима. Например, в случае прерывания НЯ адрес возврата сохраняется в регистре К14 йг1. Как будет рассказано ниже, сохраняемое значение зависит от типа исключения. 4.3. Примеры обработки прерываний различными процессорами 253 2. Сохраняет содержимое регистра состояния процессора СРБК в соответствующем регистре БРЯК. 3. Изменяет разряды режима в регистре СРЗК в соответствии с типом прерывания (см.
последний столбец табл. 4.1). В случае прерываний 1КЯ и Р1Я разряд маскирования устанавливается в 1, в результате чего дальнейшие прерывания по этой же линии запрещаются. 4. Переходит к программе обработки прерывания, которая начинается по адресу, указанному в соответствующем векторе прерывания. В процессоре АКМ используется конвейерный принцип обработки команд. Это означает, что очередная команда считывается из памяти в процессор еше до окончания выполнения предыдущей команды (более подробно об этом будет рассказано в главе 8). Предположим, процессор выбирает команду 1о хранящуюся по адресу А. Он увеличивает содержимое регистра РС до А+4 и начинает выполнение команды 1о Вше до завершения этой операции он выбирает из памяти команду 1э расположенную по адресу А+4, и тут же увеличивает содержимое РС до А+8.
Теперь предположим, что, когда команда 1~ уже почти выполнена, процессор обнаруживает запрос прерывания 1КО и начинает производить описанные выше действия. Он копирует содержимое регистра РС, теперь уже равное А+8, в регистр 214 1щ. Команда 1э которая уже извлечена из памяти, но еще не выполнена, пока уничтожается в процессоре (но не в памяти). Именно с нее будет продолжена работа после возврата управления из программы обработки прерывания.
Итак, при вызове программы обработки прерывания в регистре К14 ~щ сохраняется адрес Ач-8, тогда как адресом возврата из этой программы должен быть А+4. Это означает, что перед использованием содержимого регистра К14 1п1 в качестве адреса возврата программа обработки прерывания должна вычесть из него 4. То есть команда возврата из прерывания должна загрузить в регистр РС значение 1214 пц] — 4.
Кроме того, она должна скопировать содержимое регистра БРЯК пс в СРЗК. Последнее действие возвращает процессор в тот режим, в котором он работал до прерывания, и очищает маску прерывания, чтобы тут же снова разрешить таковое. Эти действия выполняются командой 5()ВЯ РС,К14 1гс1,Ф4 которая вычитает из содержимого регистра 214 !п1 значение 4 и сохраняет результат в регистре 215. Суффикс Я в имени команды означает, что процессор должен установить коды условий. Когда целевым регистром команды является РС, суффикс Б также означает, что процессор должен скопировать содержимое регистра БРЯК 1гц в СРОК, завершая действия, необходимые для возврата в прерванную программу.
Значение, которое нужно вычесть из содержимого регистра К14 для получения правильного адреса возврата, зависит от особенностей выполнения команды в конвейере процессора. Для разных типов исключений оно может быть разным. Например, в случае программного прерывания, вызванного командой 5%'1, сохраненное в регистре К14 пц значение является правильным адресом возврата. 254 Глава 4. Ввод-вывод Поэтому возврат из программы обработки прерывания Б%'1 может быть выпол- нен с помощью команды МОЪ"Б РС,К14 зпс Для каждого из исключений, перечисленных в табл.
4.1, в табл. 4.2 приведены правильные значения адресов возврата и команды, с помощью которых выполняется возврат в прерванную программу. Обратите внимание, что для прерывания АЬогс, которое может быть обусловлено сбоем в работе шины, правильным адресом возврата является адрес вызвавшей ошибку команды. Предполагается, что управляющее программное обеспечение может попытаться еще раз выполнить эту команду.
При работе в привилегированном режиме две специализированные команды МОЧ, называемые МЬК и МКЯ, пересылают данные между заданным регистром и текущим или сохраненным регистром РВК. Например, команда МКВ КО,СРОК копирует содержимое регистра СРЗК в КО. Аналогичным образом команда МВК ЯРЗК,КО загружает регистр ЯРЗК из регистра КО.
Эти команды выполняются в тех случа- ях, когда операционная система должна разрешать и запрещать прерывания, как в примере 4А, приведенном далее в этом разделе. Таблица 4.2. Корректные адреса возврата из исключений Сохраненный адрес Правильный адрес возврата Команда возврата Исключение МОЪ'Я РС,К14 шк1 МОЧИ РС,К14 звс БПВ8 РС,К14 аЬД№4 Несуществующая РС+4 команда Программное РС+4 прерывание Сбой при выборке РСч-4 команды Ошибка данных РСч.4 1КО РСч-4 Р1О„ РСч-4 РС+4 РСч-4 811ВЯ РС,К14 аЬ1,№8 511ВБ РС,К14 1гг1,№4 811В8 РС,К14 Вй,№4 РС РС РС В регистре РС находится адрес команды, вызвавшей исключение.
Для !КО и Г1Я это адрес первой ы. манды, не выполненной из-за прерывания. Стеки и вложенные вызовы Механизм прерываний процессора АКМ позволяет сохранить адрес возврата з регистре и не имеет встроенной поддержки стека для вложенных вызовов подпрограмм и прерываний.
Зато он предоставляет программисту возможность самостоятельно реализовать эти функции, причем только в том случае, если онв действительно нужны. Если прерывания генерируются разными источниками, не исключено, что они являются вложенными. Например, программа обработки 4.3. Примеры обработки прерываний различными процессорами 255 прерывания 1КО, сохранившая адрес возврата в регистре К14 1гс1, может быть прервана прерыванием НЯ, имеющим более высокий приоритет. Новый адрес возврата будет сохранен в регистре К14 69. Для того чтобы компьютер мог обрабатывать вложенные прерывания от одного и того же источника, содержимое регистров К14 и БРЯК должно сохраняться в стеке. Эту операцию можно выполнить программным путем, используя в качестве указателя стека регистр К13.
Предназначенные для этой цели специализированные регистры К14 и К13 доступны в любом режиме. Программа обработки прерываний может сохранить содержимое регистров К14 и БРЯК в собственном стеке, а затем очистить маску прерывания в СРБК. Кроме того, она может сохранить в стеке содержимое других регистров, чтобы создать дополнительное рабочее пространство для себя. Для быстрого прерывания Р10 доступны предназначенные специально для этой цели регистры КВ 1щ и К13 Вц, которыми процессор может пользоваться сразу, не сохраняя их содержимое в стеке.
В главе 3 рассказывалась, что команды 1.11М и БТМ, выполняющие пересылку нескольких слов, удобны для выполнения операций со стеком. Например, используя в качестве указателя стека регистр К13, подпрограмма или программа обработки прерывания может сохранить несколько регистров и адрес возврата с помощью такой команды: БТМРО К13!,(КО,К1,К2,К14) Аналогичным образом команду ШМРП можно применить для восстановления сохраненных значений. В случае прерывания БЪ'1 или исключения при выборке команды сохраненное значение регистра К14 является корректным адресом возврата. Поэтому ега можно непосредственно восстановить в регистр К15 и тем самым вызвать возврат в прерванную программу: 1.ОМНЭ К131,(КО,К1,К2,К15) Символ «"» в конце команды вызывает тот же эффект, что и суффикс Б в использовавшейся выше команде ЯТ)ВБ. Он заставляет процессор одновременно с загрузкой регистра К15 скопировать содержимое регистра БРЯК в СЯРК.
Обратите внимание, что для возврата из прерываний 1КО и НО команда ТХ)М использоваться не может, поскольку перед ее выполнением содержимое регистра К14 должно быть изменено в соответствии с табл. 4.2. Пример 4.4 На рис. 4.13 дан пример использования прерываний, посредством которого мы хотим продемонстрировать, как переписать для процессора АКМ программу, приведенную на рис. 4.9.
При этом мы делаем три следующих предположения: клавиатура соединена с линией прерывания 1КЯ„а соответствующий вектор прерывания содержит команду перехода к подпрограмме КЕЛЬ; при загрузке данного фрагмента кода в память по адресу РМТК загружается адрес буфера 1.1МЕ; адреса РМТК и ЕО1. очень близки, поэтому доступ к ним может осуществляться с помощью относительного метода адресации. Программа Мащ позволяет осуществлять прерывания в интерфейсе клавиатуры и процессоре, для чего она устанавливает флаг КЕМ в регистре клавиатуры СОХТК01.
и очищает маску 1 в регистре 266 Глава 4. Ввод-вывод Главная программа МОЧ БТК АРК 1.РКВ ОКК 5ТКВ КО,№0 КО,Е01. К1,РАТА1Х КО,[К1,№3[ КО,КО,№4 КО,[К1,№3[ Очистка флага Е01. Загрузка адреса в регистр РАТА1Х Чтение содержимого регистра СОХТК01. Установка разряда КЕХ в регистре СОХТК01.