Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Блок TEST



Блок TEST описывает условие, которое проверяет при входе в него транзакт, и определяет номер следующего блока для вошедшего транзакта в зависимости от того, выполняется требуемое условие или нет. Блок TEST функционирует в двух режимах: 1) отказа во входе; 2) разрешении во входе и альтернативном выходе.

Формат записи:

TEST X A, B, (C)

Операнды А и В являются сравниваемыми величинами. Они могут быть именем, строкой, выражением в скобках, СЧА. Условный оператор Х может быть выражен одним из следующих 6 условных операторов: L-меньше, LE-меньше или равно, E-равно, NE-не равно, G-больше, GE-больше или равно.

Если операнд С указан, транзакт всегда может войти в блок TEST и в зависимости от соотношения операндов будет передан либо в следующий блок, либо в блок, указанный операндом С. Если операнд С не указан, транзакт при невыполнении условия не сможет войти в блок TEST (режим отказа). Он помещается в список повторных попыток всех объектов, участвующих в проверке условия. Когда состояние любого из этих объектов изменяется, транзакт из списка повторных попыток активизируется и проверка проводится вновь. Если условие выполняется, транзакту разрешается войти в блок TEST.

При функционировании блока TEST в режиме отказа, возможно увеличение машинного времени на многократные проверки блокирующего условия. Сократить это время можно с помощью блоков LINK и UNLINK.

В булевой переменной может использоваться СЧА F, равный 1, если ОКУ занято, в противном случае – 0.

А также следующие СЧА ОКУ: 1) FC-количество транзактов, занимавших ОКУ с помощью блоков SEIZE и PREEMPT; 2) FR-коэффициент использования ОКУ; 3) FT-среднее время обслуживания ОКУ одного транзакта.

Пример использования булевой переменной и блока TEST для проверки состояния ОКУ.

Prov BVARIABLE F$Server

...........

TEST E BV$Prov, 0, PotZap

SEIZE Server

ADVANCE P$Obrab

RELEASE Server

В данном примере при входе транзакта в блок TEST вычисляется булева переменная Prov. В булевой переменной использован СЧА ОКУ F. Если ОКУ с именем Server занято, значение переменной Prov равно 1. Тогда, условие, заданное блоком TEST, не выполняется, так как 1 не равно 0, и транзакт не может занять ОКУ, а переходит к блоку с меткой PotZap, указанной операндом С. Если же ОКУ с именем Server свободно, то булева переменная Prov равна 0. Тогда проверяемое блоком TEST условие выполняется, транзакт переходит к следующему блоку, т. е. Занимает ОКУ с именем Server.





Дата публикования: 2015-02-03; Прочитано: 245 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...