ГОСТ 22558-89 сторінка 96 з 116
Если выполнение отладочной секции вызвано ссылкой на идентификатор-1, то имеет место следующее:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует оператор, ссылающийся на идентификатор-1;
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит идентификатор-1;
DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит
значение, представленное идентификатором-1 в момент передачи управления отладочной секции (см. общие правила 5 и 6),
Часть 16. МОДУЛЬ СЕГМЕНТАЦИИ
ВВЕДЕНИЕ В МОДУЛЬ СЕГМЕНТАЦИИ
Назначение
Модуль сегментации предоставляет средства, которые позволяют пользователю взаимодействовать с компилятором для задания требуемых перекрытий в объектной программе.
Модуль сегментации рассматривается в настоящем стандарте Кобола как устаревший элемент и будет устранен из последующих редакций.
Характеристика уровней
Уровень 1 сегментации обеспечивает средства для определения фиксированных и независимых сегментов (п. 1.4.1 настоящей части). Все секции, имеющие одинаковый номер сегмента, должны быть смежными в исходной программе.
Все сегменты, специфицированные как фиксированные, должны быть смежными в исходной программе.
Уровень 2 сегментации допускает смешивание секций с различными номерами сегментов и разрешает фиксированной части исходной программы содержать сегменты, которые могут быть перекрыты (п. 1.4.1 настоящей части).
Область действия
Модуль сегментации в Коболе касается только сегментации процедур. Следовательно, при определении требований к сегментации объектной программы рассматриваются только раздел процедур и раздел оборудования исходной программы.
Организация
Сегменты программы
Раздел процедур исходной программы, хотя это и необязательно, обычно записывается как группа последовательных секций, каждая из которых составлена из ряда операций, предназначенных в целом для выполнения некоторой конкретной функции. Однако, когда применяется сегментация, раздел процедур должен быть разделен на секции. Кроме того, каждая секция должна быть отнесена либо к фиксированной части, либо к одному из независимых сегментов объектной программы. Сегментация не освобождает от необходимости уточнения имен процедур.
Фиксированная часть программы
Фиксированная часть определяется как часть объектной программы, которая логически рассматривается, как если бы она полностью и постоянно находилась в памяти. Эта часть программы составляется из двух типов сегментов: фиксированных постоянных сегментов | и фиксированных перекрываемых сегментові-
Фиксированный постоянный сегмент — это сегмент в фиксированной части, который не может перекрываться никакой другой частью программы. | фиксированный перекрываемый сегмент — это сегмент фиксированной части, который, хотя и обрабатывается логически .так, как если бы он постоянно находился в памяти, может быть перекрыт любым другим сегментом с целью оптимизации использования памяти. Число фиксированных постоянных сегментов в фиксированной части может быть изменено указанием фразы SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) (п. 2.3 настоящей части).
Если такой сегмент вызван программой, он всегда становится доступным в его последнем использованном состоянии.
Независимые сегменты
Независимый сегмент определяется как часть объектной программы, которая может перекрывать [фиксированные перекры- ваемые сегменты или любые другие [ независимые сегменты или перекрываться ими. Независимый сегмент находится в своем начальном состоянии, когда в ходе выполнения программы управление впервые передано (явно или неявно) этому сегменту. При последующих передачах управления этому сегменту он также будет находиться в своем начальном состоянии при следующих условиях:
когда рассматриваемому сегменту управление передается в результате неявной передачи управления из сегмента с номером сегмента, отличным от рассматриваемого;
когда рассматриваемому сегменту передается управление в результате неявной передачи управления между операторами SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ) в сегменте с номером сегмента, отличным от рассматриваемого, и процедурой ввода или вывода в рассматриваемом независимом сегменте;
когда рассматриваемому сегменту управление передается явно из сегмента с номером сегмента, отличным от рассматриваемого, за исключением передачи управления от оператора EXIT (ВЫЙТИ).
При последующих передачах управления независимому сегменту он находится в своем последнем использованном состоянии при следующих условиях:
когда рассматриваемому сегменту управление передается неявно из сегмента с номером сегмента, отличным от рассматриваемого, за исключением, отмеченным выше в (1) и (2);
когда управление рассматриваемому сегменту передается явно в результате выполнения оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) (см. ч. 4 п. 4.4.2).
Классификация сегментации
Сегментируемые секции^ классифицируются системой номеров сегментов (п. 3.2 настоящей части) и следующими правилами.
Логические требования. Секции, обращения к которым осуществляются постоянно или очень часто, обычно относятся к одному из постоянных сегментов; секции, используемые реже, обычно относят | либо к одному из перекрываемых фиксированных сег-■. I ментов, либо I к одному из независимых сегментов, определяемых логическими требованиями.
Частота использования. Обычно чаще используемым секциям присваиваются меньшие номера сегментов, реже — большие номера сегментов.
Отношения с другими секциями. Секциям, которые часто обращаются друг к другу, следует присваивать один и тот же номер сегмента.
Управление сегментацией
Логическая последовательность программы совпадает с физической, за исключением специальных передач управления. Если для управления переходами от сегмента к сегменту (в соответствии с правилами п. 3.2 настоящей части) требуется переупорядочение объектной программы, то реализация должна обеспечивать передачи управления так, чтобы осуществить логический поток, определенный в исходной программе. Реализация должна обеспечивать также все необходимые передачи управления для обрабатываемого сегмента при любом его использовании. Управление может быть передано внутри исходной программы любому параграфу в секции; таким образом, необязательно передавать управление в начало секции.
2. РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ СЕГМЕНТАЦИИ
Секция конфигурации
Информация, связанная с секцией конфигурации, помещена в ч. 6.
Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА)
Назначение
Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) обеспечивает средства для описания машины, на которой должна выполняться программа.
Общий формат
OBJECT-COMPUTER [имя-машины
WORDS
MEMORY SIZE целое-1 CHARACTERS
(MODULES
[PROGRAM COLLATING SEQUENCE IS имя-алфавита-1]
[SEGMENT-LIMIT IS номер-сегмента] . ]
РАБОЧАЯ-МАШИНА, [имя-машины
(СЛОВ ЛИТЕР
МОДУЛЕЙ
РАЗМЕР
ПАМЯТИ
целое-1
[ПРОГРАММНЫЙ АЛФАВИТ имя-алфавита-1]
[ГРАНИЦА СЕГМЕНТОВ номер-сегмента] . ]
Синтаксическое правило
Имя-машины — это системное имя.
Общие правила
Все фразы параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) применяются к программе, в которой они явно или неявно заданы, и к любой программе, содержащейся в этой программе.
Общие правила для имени-машины, фраз ME/AORY SIZE (РАЗМЕР ПАМЯТИ) и PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ) приводятся в ч. 6.
Фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) описывается в п. 2.3 настоящей части.
Фраза SEGMENT LIMIT (ГРАНИЦА СЕГМЕНТОВ)
Назначение
В идеальном случае все программные сегменты, имеющие номера-сегментов от 0 до 49, специфицируются как постоянные сегменты. Однако, когда доступная память недостаточна для того, чтобы разместить все постоянные сегменты плюс максимальный перекрываемый сегмент, становится необходимым сократить число постоянных сегментов. Фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) дает пользователю средство, которым он может уменьшить число постоянных сегментов в своей программе с сохранением логических свойств сегментов фиксированной части (номера-сегментов от 0 до 49).
Общий формат
SEGMENT-LIMIT IS номер-сегмента
ГРАНИЦА СЕГМЕНТОВ номер-сегмента
Синтаксическое правило
Номер-сегмента должен быть целым, принимающим значения от 0 до 49.
Общие правила
Если задана фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ), то в качестве постоянных сегментов объектной программы рассматриваются только сегменты, имеющие номера от О до (но не включая) номера, специфицированного фразой SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ).
Сегменты, имеющие номера от номера, специфицированного фразой SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ), до 49, рассматриваются как перекрываемые фиксированные сегменты.
Если фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) опущена, все сегменты с номерами-сегментов от 0 до 49 будут рассматриваться как постоянные сегменты объектной программы.
‘ 3. РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ СЕГМЕНТАЦИИ
Общее описание
При использовании модуля сегментации в исходном Кобол-про- /рамме раздел процедур содержит секции с номерами сегментов.
Ниже приводится общий формат раздела процедур, в котором задаются секции и номера сегментов.
PROCEDURE DIVISION.
[DECLARATIVES.
{имя-секции SECTION [номер-сегмента].
Оператор USE.
[имя-параграфа.
[предложение] . .. ]
END DECLARATIVES.
{имя-секции SECTION [номер-сегмента].
[имя-параграфа.
[предложение]
РАЗДЕЛ ПРОЦЕДУР.
[ДЕКЛАРАТЙВЫ.
{СЕКЦИЯ имя-секции [номер-сегмента] .
Оператор ИСПОЛЬЗОВАТЬ.
[имя-параграфа.
X [предложение] ... ]
КОНЕЦ ДЕКЛАРАТИВ.
{СЕКЦИЯ имя-секции [номер-сегмента] .
[имя-параграфа.
[предложение] ... ]
Номера сегментов
Назначение
Классификация секций выполняется с помощью системы номеров сегментов. Номер сегмента включается в заголовок секции.
Общий формат
имя-секции SECTION [номер-сегмента] .
СЕКЦИЯ имя-секции [номер-сегмента];.
Синтаксические правила
Номер-сегмента — целое, принимающее значения от 0 до 99.
Если номер-сегмента в заголовке секции опущен, то по умолчанию он предполагается равным 0.
Секции декларатив должны иметь номера-сегментов, меньшие 50.
Общие правила
Все секции, имеющие один и тот же номер-сегмента, составляют единый программный сегмент. В уровне 1 все секции, имеющие один и тот же номер-сегмента, должны быть смежными.
В уровне 2 смежность секций, имеющих в исходной программе одинаковые номера-сегментов, необязательна.
Сегменты с номерами-сегментов от 0 до 49 принадлежат фиксированной части программы. На уровне 1 все секции с номерами-сегментов от 0 до 49 должны быть в исходной программе смежны.
Сегменты с номерами-сегментов от 50 до 99 — независимые сегменты.
Ограничения на программный поток
При использовании сегментации на операторы ALTER (ИЗМЕНИТЬ), PERFORM (ВЫПОЛНИТЬ), MERGE (СЛИТЬ) и SORT (СОРТИРОВАТЬ) накладываются следующие ограничения.
Оператор ALTER (ИЗМЕНИТЬ)
Оператор GO ТО (ПЕРЕЙТИ) в секции с номером сегмента, большим или равным 50, не должен быть объектом оператора ALTER (ИЗМЕНИТЬ) в секции с другим номером сегмента.
Все другие использования оператора ALTER (ИЗМЕНИТЬ) допустимы и выполняются даже в том случае, когда оператор GO ТО (ПЕРЕЙТИ), на который ссылается оператор ALTER (ИЗМЕНИТЬ), находится в фиксированном перекрываемом сегменте.
Оператор PERFORM (ВЫПОЛНИТЬ)
Оператор PERFORM (ВЫПОЛНИТЬ), указанный в секции, не принадлежащей независимому сегменту, может иметь в своей области действия кроме декларативных секций только одну из следу' ющих процедур:
секции и (или) параграфы, полностью содержащиеся в одном или более сегментах, не являющихся независимыми;
секции и (или) параграфы, полностью содержащиеся в одном независимом сегменте.
Оператор PERFORM (ВЫПОЛНИТЬ), указанный в независимом сегменте, может иметь в своей области действия кроме декларативных секций только одну из следующих процедур:
секции и (или) параграфы, полностью содержащиеся в одном пли более сегментах, не являющихся независимыми;
секции и (или) параграфы, полностью содержащиеся в том же независимом сегменте, что и рассматриваемый оператор PERFORM (ВЫПОЛНИТЬ).
Оператор MERGE (СЛИТЬ)
Если оператор MERGE (СЛИТЬ) появляется в секции, не принадлежащей независимому сегменту, то процедура вывода, указанная в операторе MERGE (СЛИТЬ) должна содержаться:
полностью внутри сегментов, не являющихся независимыми, или
целиком содержаться в одном независимом сегменте.
Если оператор MERGE (СЛИТЬ) появляется в независимом сегменте, то процедура вывода, на которую ссылается оператор MERGE (СЛИТЬ), должна содержаться:
полностью внутри сегментов, не являющихся независимыми, или
полностью внутри того же независимого сегмента, в котором находится оператор MERGE (СЛИТЬ).
Оператор SORT (СОРТИРОВАТЬ)
Если оператор SORT (СОРТИРОВАТЬ) появляется в секции, не принадлежащей независимому сегменту, то процедура ввода и процедура вывода, на которую ссылается оператор SORT (СОРТИРОВАТЬ), должны появляться:
полностью внутри сегментов, не являющихся независимыми, или
) целиком содержаться в одном независимом сегменте.
Если оператор SORT (СОРТИРОВАТЬ) указан в независимом сегменте, то процедура ввода и процедура вывода, на которые ссылается оператор SORT (СОРТИРОВАТЬ), должны содержаться:
полностью внутри сегментов, не являющихся независимыми, или
полностью внутри того же независимого сегмента, в котором находится оператор SORT (СОРТИРОВАТЬ).
Часть 17. ПРИЛОЖЕНИЯ
ПРИЛОЖЕНИЕ I
Справочное
ОТЛИЧИЯ МЕЖДУ ПРЕДЫДУЩИМ И НАСТОЯЩИМ СТАНДАРТОМ
1. Перечень отличий
Приложение содержит перечень всех элементов ГОСТ 22558 и настоящего стандарта. Элементы упорядочены соответственно разделам Кобола.
Литера «—» в столбце обозначает отсутствие указанного элемента. Наличие элемента определяется трехбуквенным обозначением модуля согласно следующей таблице.
Сокращение
Значение
ЯДР ТАБ ПОД ОТД ИПД МПС СРТ опт БИБ ГОТ ком отл СЕГ
Ядро
Обработка таблиц
Последовательный ввод-вывод Относительный ввод-вывод Индексный ввод-вывод Межпрограммные связи Сортировка-слияние Обработка исходных текстов Библиотека
Генератор отчетов Коммуникации Отладка Сегментация
Уровень, на котором встречается элемент в модуле, указан цифрой, предшествующей трехбуквенному сокращению имени модуля. Например, 2 ЯДР указывает, что элемент принадлежит второму уровню ядра, а 1 ИПД — что элемент принадлежит первому уровню модуля индексного ввода-вывода. Литера +, следующая за сокращением имспи модуля, обозначает, что элемент является устаревшим элементом в данной редакции стандарта Кобола и будет удален в следующей редакции.
Побачили розбіжність з офіційним текстом?