ISSN 0236-235X (P)
ISSN 2311-2735 (E)
1

16 Марта 2024

Обработка исключительных ситуаций системой МСПД


Павлов А.Е. () -
Ключевое слово:
Ключевое слово:


     

Многоуровневая система программного диагностирования (МСПД) вычислительного комплекса типа СМ 1700 содержит управляющую программу — диагностический супервизор (ДС), который может работать в двух режимах. В пользовательском режиме обработка исключительных ситуаций (ИС) выполняется программами ядра МОС ВП с использованием векторов блока управления МОС ВП SCB. В автономном режиме работы ДС обработка ИС выполняется внутренними программами с использованием векторов блока управления ДС SCB.

Векторы ИС в блоке ДС SCB даны в табл.1.

Эти программы выполняют лишь предварительную обработку, зависящую от типа ИС В большинстве случаев она формирует в стеке сигнальный вектор, при этом содержимое регистров PC и PSL записывается аппаратурой в стек заранее. После предобработки управление передается программе EXE_EXCEPTION общей обработки, которая выполняет диспетчеризацию процедур, заканчивающих обработку ИС.

Любая процедура обработки ИС имеет несколько вариантов. Она может определить тип ИС по полученному сигнальному вектору и

Таблица 1

Нами рассматривается логическая структура той части ДС, которая выполняет обработку под управлением автономно загруженного ДС: предобработка аппаратно генерируемых ИС и принципы диспетчеризации процедур обработки, применяемые для этого структуры данных и методы передачи управления процедуре разработчика.

Заключенное в скобки имя, следующее за именем программы, является названием модуля ДС, содержащего эту программу.

При возникновении ИС по некоторому вектору блока ДС SCB аппаратура передает управление соответствующей этому вектору программе предобработки, расположенной в области модуля ДС EXCEPT и начинающейся с адреса ЕХЕ_МСНК (кроме EXE_CMODKRNL из модуля СНМК). Вектор является длинным словом в ДС SCB, которое опрашивается центральным процессором при возникновении ИС по этому вектору.

вернуть управление вызвавшей программе с размещением кода состояния SSSCONTINUE в регистре RO. Если текущая ИС не обслуживается данной процедурой, последняя должна поместить код состояния SS$_RESIGNAL в регистр RO, что интерпретируется ДС как необходимость вызова следующей процедуры обработки. И, наконец, процедура может развернуть стек с помощью макрокоманды SUNWIND для передачи управления на любой предыдущий уровень иерархии в стеке (развертка заключается в удалении из стека кадров вызова путем обратного отслеживания вложенных вызовов процедур).

С целью передачи аргументов процедуре обработки разработан стандартный программный механизм, имеющий дело со специальными структурами данных. Процедура обработки получает два аргумента: адрес сигнального вектора и адрес вектора механизма. Сигнальный вектор содержит информацию об ИС: имя сигнального вектора (см. табл.1), содержимое регистров PC и PSL для данной ИС и от 0 до 2 параметров — в зависимости от типа ИС. Имена сигнальных векторов определены макрокомандой SSSDEF библиотеки LIB.MLB или макрокомандой SDS_DSDEF библиотеки DS.MLB. Вектор механизма, составленный из глубины вложения кадра вызова и содержимого регистров FP, RO, R1, используется при поиске в стеке адреса процедуры обработки (глубина вложения кадра вызова используется также при операциях развертки стека).

-

Поиск в стеке адресов первичной и вторичной процедур выполняется SEARCH. Если SEARCH нашла в стеке ненулевую величину, то эта величина интерпретируется как адрес первичной процедуры, записывается в регистр R1, а управление возвращается к программе диспетчеризации для передачи управления по этому адресу- При этом первичная процедура используется только в том случае, когда разработчик диагностической программы декларирует адрес своей процедуры обработки (для ав-тономЬого режима) с помощью макрокоманды DSSSETPRIEXV. Эта макрокоманда генерирует вызов программы DSXSSETPRIEXV, в которой указанный разработчиком адрес просто записывается в ячейку CTLSAQJEXCVEC.

В диагностической программе, разработанной для работы под ДС пользовательского режима, эта же команда генерирует вызов серви-

Программы ДС для обработки всех типов ИС (кроме СНМК) расположены в модуле EXCEPT и охарактеризованы в табл.2.

Программа диспетчеризации процедур EXE EXCEPTION сначала строит в стеке вектор механизма, а затем по адресам сигнального вектора и вектора механизма — третью структуру данных для передачи параметров процедуре обработки. Третья структура данных представляет собой список передаваемых процедуре аргументов.

После               этого               программами

EXE_EXCEPTION и SEARCH выполняются поиск и диспетчеризация процедур обработки:

-     первичная процедура (декларируется разра ботчиком диагностической программы с помо щью макрокоманды DSSSETPRIEXV);

-     вторичная процедура (COND_DEBUG, мо дуль DEBUG); ■

-     процедура разработчика диагностической программы, декларированная им в кадре вы зова инструкцией MOVAB ADDRESS, (FP);

-     процедура             последнего             шанса (COND_HANDLR, модуль EXCEPT).

Если SEARCH не обнаруживает первичную процедуру, она извлекает из ячейки CTL$AQ_EXCVEC хранящийся там адрес вто ричной процедуры COND_DEBUG, и последо вательность действий повторяется для переда чи управления уже вторичной процедуре (вторичная процедура вызывается только для ИС точки останова и ИС трассировки). Возникшие во время работы самой процедуры SEARCH И С обрабатываются специальной процедурой CHANDL (EXCEPT), в которой развертка стека выполняется с          помощью                             сервиса

SYSSUNWIKD.

Если SEARCH не находит ни первичную, ни вторичную процедуру, программа диспетчеризации передает управление непосредственно по адресу CONDHANDLR процедуре последнего шанса, которая является основной процедурой ДС и обслуживает все ИС, перечисленные в табл. 1, кроме ИС точки останова и ИС трассировки. Если рассматриваемая ИС неизвестна блоку ДС SCB, управление возвращается к программе диспетчеризации, в которой с помощью программы DS_ERRSUP (ERROR) выводится на терминал соответствующее сообщение, а с помощью программы DSXSABORT (START)

прерывается выполнение диагностической программы с последующей передачей управления интерпретатору команд ДС.

Процедура последнего шанса с помощью программы DSXSPRINTSIG форматирует и выводит на терминал содержимое сигнального вектора, а с помощью программы FINDUSERPC — текущее содержимое регистра PC диагностической программы. Затем управление передается интерпретатору команд ДС, чтобы пользователь мог выполнить анализ работы диагностической программы посредством команд ДС. В случае возвращения управления от пользователя в процедуру последнего шанса управление передается прерванной диагностической программе. Адрес процедуры последнего шанса размещается в кадре вызова с помощью программ модуля KERNEL при выполнении операций инициализации ДС в режиме пользователя и в автономном. По этой причине в пользовательском режиме работы процедура последнего шанса ДС при выполнении имеет преимущество перед процедурой последнего шанса МОС ВП, но только для того процесса, в контексте которого выполняется ДС.

В любом из двух режимов работы ДС разработчик диагностической программы может декларировать свою процедуру обработки, которая при поиске будет иметь преимущество перед процедурой ДС последнего шанса. Для этого следует с помощью инструкции MOVAB ADDRESS, (FP) разместить ее адрес в кадре вызова.

В автономном режиме работы ДС для пере дачи управления своей процедуре обработки ИС можно воспользоваться макрокомандой SSETVEC, которая генерирует вызов программы DSXSSETVEC (SCB). Эта программа разместится SSETEXP ядра МОС ВП, и при работе диагностической программы под управлением ДС в режиме пользователя поиск адреса будет выполняться программами ядра МОС ВП. полученный адрес в блоке ДС SCB, и при возникновении ИС по данному вектору уп равление непосредственно перейдет к процедуре разработчика, минуя программу диспетчеризации процедур. В таком случае для выполнения операций форматирования и выведения на терминал содержимого сигнального вектора можно  использовать макрокоманду SDS_PRINTSIG, которая генерирует вызов программы DSXSPRINTSIG.

Вторичная процедура COND_DEBUG (DEBUG) и для ИС точки останова, и для ИС трассировки выводит на терминал пользователя содержимое регистра PC и передает управление интерпретатору команд ДС ,;ля принятия от пользователя необходимых команд отладки.

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



http://swsys.ru/index.php?id=1310&lang=.&page=article


Perhaps, you might be interested in the following articles of similar topics: