ГОСТ 22558-89 сторінка 14 з 116
Для управления связью между системой управления сообщениями и коммуникационными устройствами в исходной программе используются два оператора:
ENABLE (РАЗРЕШИТЬ), который устанавливает логическую связь между системой управления сообщениями и одним или несколькими заданными коммуникационными устройствами;
DISABLE (ЗАПРЕТИТЬ), который разрывает логическую связь между системой управления сообщениями и одним или несколькими заданными коммуникационными устройствами.
На рис. 1 показана взаимосвязь программы на Коболе с коммуникационными устройствами (п. 7.5.2 настоящей части).
программа Система управления «оммуникаиионньї?
на сообщениями устройства
Вызов объектной программы Кобола
Существуют два метода вызова объектной программы Кобола, использующей средства коммуникаций: запланированный запуск и вызов системой управления сообщениями.
Разница между этими методами заключается только в том, как производится заполнение некоторых областей в указанной статье CD (ОК).
Запланированный запуск объектной программы Кобола Объектная программа Кобола, использующая средства коммуникаций, может быть вызвана для выполнения через обычные операционные средства, например, язык управления заданиями. В этом случае программа может использовать три метода для определения того, какие сообщения, если они имеются, доступны во входных очередях:
оператор ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ);
оператор ACCEPT (ПРИНЯТЬ) с вариантом NO DATA (НЕТ ДАННЫХ);
оператор ACCEPT (ПРИНЯТЬ) без варианта NO DATA (НЕТ ДАННЫХ). В этом случае подразумевается, что программа переходит в состояние ожидания, если нет доступных данных.
Вызов объектной программы Кобола системой управления сообщениями
Иногда желательно вызвать для выполнения объектную программу, использующую средства коммуникаций, только тогда, когда для нее имеется требуемая информация. Такой вызов осуществляется системой управления сообщениями, когда она определяет, что требуется объектная программа для обработки имеющегося сообщения. Каждая объектная программа, вызываемая системой управления сообщениями, создает единицу исполнения. До начала выполнения объектной программы система управления сообщениями помещает имена символических очередей и подочередей в области данных, определенные статьей описания коммуникаций с фразой FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА), или система управления сообщениями помещает символическое имя терминала в область данных, определенную статьей описания коммуникации с фразой FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА).
В результате выполнения последующего оператора RECEIVE (ПОЛУЧИТЬ), связанного с данной статьей описания коммуникации, имеющееся сообщение будет передаваться объектной программе.
Определение метода вызова
Исходную программу можно написать так, что объектная программа может быть вызвана для выполнения любым из двух методов. Для определения метода вызова объектной программы необходимо следующее:
исходная программа должна содержать одну статью описания коммуникации, содержащую фразу FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА) или FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА);
если программа содержит статью описания коммуникации с фразой FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА)„ в разделе процедур могут содержаться операторы для проверки начального значения имени символической очереди в этой статье описания коммуникации. Если оно заполнено пробелами, использованы операторы управления заданием для вызова объектной программы. Если не заполнено пробелами, объектную программу вызвала система управления сообщениями и инициировала данное с символическим именем очереди, содержащей сообщение для обработки;
когда программа содержит статью описания коммуникации с фразой FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА), в разделе процедур могут содержаться операторы для проверки начального значения символического имени терминала в данной статье CD (ОК). Если оно заполнено пробелами, использованы операторы управления заданием для вызова объектной программы. Если оно не заполнено пробелами, система управления сообщениями вызвала объектную программу и инициировала данное с символическим именем коммуникационного терминала, который является источником сообщения, подлежащего обработке.
Понятие сообщений и сегментов сообщения
Сообщение состоит из некоторого произвольного количества информации (обычно последовательности литер), начало и конец которой определены или подразумеваются. Сообщения являются основной, но необязательно самой элементарной единицей данных, которую можно обработать средствами коммуникаций Кобола.
Сообщения могут логически делиться на меньшие единицы данных, называемые сегментами сообщений. Внутри сообщения сегменты разграничиваются посредством индикаторов конца сегмента ESI (ИКС). Сообщение, состоящее из одного или более сегментов, отделяется от следующего сообщения посредством индикатора конца сообщения EMI (ИКЩ). Аналогично, группа из нескольких сообщений может быть логически отделена от следующих сообщений посредством индикатора конца группы EGI (ИКГ). Когда программа на Коболе получает сообщение или его сегмент, область описания коммуникации обновляется системой управления сообщениями так, что она указывает, какой индикатор, если он имеется, связан с текстом, переданным при выполнении оператора RECEIVE (ПОЛУЧИТЬ). При выводе индикатор, связанный с текстом, передаваемым системе управления сообщениями через оператор SEND (ПОСЛАТЬ), определяется в операторе SEND (ПОСЛАТЬ). Таким образом, существование логических индикаторов распознается и задается как системой управления сообщениями, так и объектной программой Кобола. Однако индикаторы не включаются в тексты сообщений, обрабатываемые программами Кобола.
Между индикаторами EGI, EMI, ESI (ИКГ, ИКЩ и ИКС) существует отношение предшествования. EGI (ИКГ) является наиболее объемлющим индикатором, a ESI (ИКС) — наименее объемлющим. Наличие некоторого индикатора, связанного с текстом сообщения, предполагает существование всех менее объемлющих индикаторов, связанных с этим текстом. Например, наличие индикатора EGI (ИКГ) предполагает наличие EMI (ИКЩ) и ESI (ИКС).
Понятие очередей
Следующие рассуждения применимы только в том случае, когда коммуникационное оборудование устанавливается посредством описания коммуникации без фразы FOR 1-0 (ДЛЯ ВВОДА- ВЫВОДА).
Очереди состоят из одного или нескольких сообщений, получаемых от одного или более коммуникационных устройств, и как таковые образуют буферы данных между объектной программой и системой управления сообщениями. Входные очереди логически отделены от выходных.
Система управления сообщениями логически помещает в очереди или извлекает из них только полные сообщения. Части сообщений логически не помещаются в очередь, пока системе не будет доступно полное сообщение, то есть система управления сообщениями не передает сегмент сообщения объектной программе, пока все сегменты сообщения не будут во входной очереди, даже если используется оператор RECEIVE (ПОЛУЧИТЬ) с вариантом SEGMENT (СЕГМЕНТ). Для выходных сообщений система не посылает ни одного сегмента сообщения, пока все сегменты не будут в выходной очереди. Запрос о глубине очереди или числе сообщений данной очереди отражает только число полных сообщений, существующих в ней.
Процесс помещения сообщений в очередь называется постановкой в очередь, а процесс получения из очереди — извлечением из очереди.
Независимые постановка в очередь и извлечение из очереди
Некоторые сообщения могут быть получены системой управления сообщениями с коммуникационного устройства до выполнения объектной программы Кобола. В этом случае система помещает сообщение в подходящую входную очередь (при условии, что входная очередь разрешена) до тех пор, пока объектная программа не потребует извлечения его из очереди с помощью оператора RECEIVE (ПОЛУЧИТЬ). В свою очередь, объектная программа Кобола имеет возможность постановки в выходные очереди сообщений, которые не передаются на коммуникационное устройство вплоть до завершения выполнения программы. Это может произойти в следующих случаях:
когда запрещен обмен данными между заданной выходной очередью и ее адресатом;
когда объектная программа создает выходные очереди быстрее, чем адресат может их принять.
Разрешение и запрещение очередей
Обычно система управления сообщениями разрешает или запрещает очереди, основываясь на времени дня, активности сообщений или других факторах, не связанных с программой Кобола. Однако программа Кобола может выполнить эти функции сама с помощью операторов ENABLE (РАЗРЕШИТЬ) и DISABLE (ЗАПРЕТИТЬ).
Методы постановки в очередь и извлечения из очереди
В системах, которые разрешают пользователю задавать определенные функции системы управления сообщениями, может возникнуть необходимость еще до выполнения программ, использующих средства коммуникации, задать для системы управления сообщениями алгоритм постановки в очередь и извлечения из очереди. Типичный алгоритм постановки в очередь будет, например, указывать, что все сообщения из одного источника надо помещать в данную входную очередь, или все сообщения, посылаемые данному адресату, должны быть помещены в данную выходную очередь.
Выборка сообщений из очереди часто производится так, что первым из очереди выбирается то сообщение, которое в нее было первым поставлено. Однако пользователь может задать другой алгоритм выборки, например, воспользоваться приоритетной очередностью.
Иерархия очередей
Для более гибкого управления сообщениями, помещаемыми в очередь и извлекаемыми из очереди, можно определить в системе управления сообщениями иерархию входных очередей, то есть очереди, состоящие из очередей. Пользователю Кобола доступны 4 уровня очередей. В порядке уменьшения значимости уровни очередей названы так: очередь, подочередь-1, подочередь-2 и подочередь-3. Иерархия очередей показана на рис. 2.
По рис. 2 рассмотрим действия системы управления сообщениями. Предположим, что система управления сообщениями помещает сообщения в очередь и извлекает сообщения из очереди по следующему алгоритму:
сообщение помещается в очередь в соответствии со значением некоторого данного в каждом сообщении
;
ОчереЗь
Лодочередь-1
■
ПоЗочередь~2
-
I Подочередь-З ( 3
и] КІ /П
РЗ Р! ТЬ
Р Сообщение
4 СЗ П
Р5 Г5 СЬ
А, Б П — очереди и подочереди; С1, Р1, .... Т1, ... —
сообщения,обозначенные в соответствии с их источником и порядковым номером
Рис. 2
если на некотором уровне подочередь не задана, то при выполнении оператора RECEIVE (ПОЛУЧИТЬ) система управления сообщениями выберет подочередь этого уровня в алфавитном порядке. Например, если пользователем не задана подочередь-1, система управления сообщениями выберет сообщение из подочереди-1, обозначенной буквой Б.
Нижеследующие примеры иллюстрируют действия алгоритма для очереди, имеющей структуру, показанную на рис. 2.
Пример 1
В статье описания коммуникации задана очередь А. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение Т1.
Пример 2
В статье описания коммуникации заданы очередь А и подочередь-1 В. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение С7.
Пример 3
В статье описания коммуникации заданы: очередь А, подочередь-1 Б, подочередь-2 Д. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение Р1.
Пример 4
В статье описания коммуникации заданы: очередь А, подочередь-1 В, подочередь-2 Ж и подочередь-3 О. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение Р6.
Если требуется получить следующее сообщение очереди, независимо от того, в какой подочереди оно находится, в статье описа- шя коммуникации необходимо указать только имя очереди. При -передаче сообщения система управления сообщениями сообщит объектной программе Кобола имя соответствующей подочереди через данное в статье описания коммуникации. Если требуется получить следующее сообщение в данной подочереди, в статье описания коммуникации необходимо указать имя очереди и имена подочередей.
Для вывода пользователь Кобола указывает только адресат сообщения, а система управления сообщениями помещает сообщение в подходящую выходную очередь.
Не существует однозначного соответствия между коммуникационным устройством и источником (адресатом). Источник или адресат может состоять из одного или более физических устройств, ''стройство или устройства, являющиеся источником (адресатом), должны быть определены для системы управления сообщениями.
Понятие коммуникации транзакций
В противоположность вышеизложенному механизму очередей, некоторые применения требуют прямого диалога между коммуникационным устройством и объектной программой. В этом случае нет необходимости создания очередей сообщений, поскольку сообщения обрабатываются безотлагательно. В Коболе возможно определить такого рода обработку использованием в статье CD (ОК) фразы FOR 1-0 (ДЛЯ ВВОДА-ВЫВОДА). Описание коммуникации, содержащее фразу FOR 1-0 (ДЛЯ ВВОДА-ВЫВОДА), может поддерживать связь только с одним терминалом; тем не менее единица исполнения может содержать более одного описания коммуникации с фразой FOR 1-0 (ДЛЯ ВВОДА-ВЫВОДА) и эти описания коммуникаций могут поддерживать связь с одним и тем же терминалом или с различными терминалами. Если указана фраза FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА), программа должна быть вызвана системой управления сообщениями.
Часть 3. ГЛОССАРИЙ
ВВЕДЕНИЕ
Приведенные ниже определения терминов соответствуют смыслу, который приписывается им в Коболе, и могут иметь иное значение в других языках.
Определения служат справочным или вводным материалом, который следует просмотреть прежде, чем читать следующее далее детальное описание языка. Определения в большинстве случаев краткие и не содержат подробных синтаксических правил. Полные спецификации элементов, определяемых ниже, находятся в частях данного документа.
ОПРЕДЕЛЕНИЯ
Адресат — символическое обозначение получателя передач ив очереди.
Арифметическая операция — действие, вызываемое выполнением арифметического оператора или вычислением арифметического выражения, имеющее результатом математически правильное значение.
Арифметический оператор — оператор, вызывающий выполнение арифметической операции. Арифметическими операторами являются ADD (СЛОЖИТЬ), COMPUTE (ВЫЧИСЛИТЬ), DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ) и SUBTRACT (ОТНЯТЬ).
Побачили розбіжність з офіційним текстом?