Файл: Система математического обеспечения ЕС ЭВМ..pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.10.2024

Просмотров: 93

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

или для установки в блоке управления данными адреса начала первого или конца последнего блока набора данных на томе пря­ мого доступа с тем, чтобы без повторного открытия блока управ­ ления данными продолжить обработку набора данных.

Выдав один раз макрокоманду CLOSE, можно закрыть не­ сколько блоков управления данными одновременно, при этом преимущества и недостатки те же, что и при аналогичном исполь­ зовании макрокоманды OPEN.

Используя один блок управления данными, можно обслужить несколько последовательных или библиотечных наборов данных, рассматривая их как единый массив информации (только в режи­ ме чтения). В этом случае говорят об обслуживании сцепления нескольких наборов данных. Сцепление наборов данных задается на языке управления заданиями следующим образом: оператор DD первого набора данных из сцепления поименован, а операторы DD всех остальных наборов сцепления не поименованы.

Например:

/ / М А К D D

//DD

//DD

Если сцепленные наборы данных имеют одинаковые характери­ стики, то управляющая программа при обнаружении конца одного из них переходит к обработке следующего, не выполняя промежу­ точных процедур закрытия и открытия блока управления данны­ ми. Когда наборы данных в сцеплении имеют разные характери­ стики (находятся на разных носителях информации, имеют разные форматы записей, длины блоков и пр.), управляющая программа будет рассматривать совокупность этих наборов как единый ин­ формационный массив только в том случае, если в поле DCBOFLGS блока управления данными установлен в единицу четвертый разряд. При обработке такого сцепления наборов дан­ ных после макрокоманды GET или READ, обнаружившей конец одного из наборов данных, необходимо выдать еще раз макро­ команду GET или READ перед обработкой следующей записи. Так как наборы данных имеют разные характеристики, управляю­ щая программа при обнаружении конца одного из наборов данных сама выполняет закрытие блока управления данными для этого набора и затем открытие его для следующего набора данных.

Если программист при написании программы обращается к полям блока управления данными, рекомендуется использовать символические наименования этих полей. Для этого следует ис­ пользовать макрокоманду DCBD.

Рассмотрим пример, поясняющий использование макрокоманд управления данными. Выполняются считывание записей из набо­ ра данных МАЮ, переформирование их и вывод результатов в набор данных МАК2. При обнаружении постоянной ошибки ввода во входном наборе данных анализируется эта ошибка и произво­ дится запись результатов анализа в набор данных МАКЗ. Конец входного набора данных обнаруживается управляющей програм­

153


мой, после чего управление передается по метке END (см. EODAD в макрокоманде DCB) и выполняется закрытие всех блоков уп­ равления данными. В примере содержится фиктивная секция SEK.T для иллюстрации использования фиктивных секций.

 

O P E N

C 1K L

G E T

 

P U T

 

U S I N G

 

' M V C

 

M V C

 

В

 

E N D

C L O S E

A H A L

S Y N A D A F

 

S T

 

 

L R

 

 

P U T

 

 

S Y N A D R L S

 

L

 

 

R E T U R N

I N D C B

D C B

 

O U T D C B

D C B

 

E R R D C B

D C B

 

A R E A

D S

 

 

D S

 

S A V E

D S

 

S E K T

D S E C T

A

D S

 

A1

D S

 

A 2

D S

 

 

• •

 

6.3.

Б У Ф Е Р

( I N D C B , , O U T D C B , ( O U T P U T ) , E R R D C B ( O U T P U T ) ) I N D C B , A R E A

O U T D C B

S E K T , 1

A l , A R E A + 7 0

A 2, A R E A

C I K L

( I N D C B , , O U T D C B , . E R R D C B )

A C S M E T H = Q S A M 14, S A V E

0,1

E R R D C B , (0)

14, S A V E

D S O R G = P S , M A C R F = ( G M ) , D D N A M E = M A K 1 , E O D A D = E N D , S Y N A D = A H A L ,

R E C F M = F , B L K S I Z E = 8 0

D S O R G = P S , M A C R F = ( P L ) , D D N A M E = M A K 2 D S O R G = P S , D D N A M E = M A K 3 , M A C R F = ( P M ) C L 8 0

OF

F

0C L 8 0 CLIO

C L 70

И Б У Ф Е Р Н Ы Й П У Л

При выполнении операций ввода-вывода осуществляется обмен данными между внешней и оперативной памятью ЭВМ. Область оперативной памяти, которая используется при этом обмене дан­ ными, называется буфером. Имеются два способа управления бу­

ферами:

управление буферами с привлечением

для этого

средств

 

 

 

управляющей

программы

и

уп­

Ьлон управление буферный пулон

равление без привлечения средств

буфера

буферов

буфера

управляющей

программы. Пер­

 

Число

Длина

 

 

 

 

 

 

 

 

 

 

вый способ управления буферами

 

Адрес следующего

предполагает

описание их в бло­

 

буфера

ке управления

данными.

Буфер­

 

 

 

 

Адрес следующего

ный пул представляет собой сово­

 

буфера

купность

связанных

в цепочку

 

нули

 

блока управления

буферным

пу­

 

 

лом и буферов

(рис. 26).

 

 

 

 

 

 

 

 

 

 

Блок

управления

буферным

Р и с . 26. С т р у к т у р а

б у ф е р н о г о п у л а

пулом содержит

информацию

о

154


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

6.4. П О С Т Р О Е Н И Е Б У Ф Е Р Н О Г О П У Л А

Построение буферного пула возможно одним из четырех спо­ собов. Программист может сам построить в своей программе бу­ ферный пул и заполнить соответствующие поля в блоке управле­ ния данными. Это самый трудный путь, так как он может ослож­ нить отладку программы. Управляющая программа ОС ЕС предусматривает набор средств для оказания помощи программи­ сту при построении буферного пула.

Программист может использовать три способа построения бу­ ферного пула с помощью управляющей программы:

1. Если до трансляции программы известно число буферов и их размер, то можно зарезервировать области памяти соответст­ вующего размера в области программы с тем, чтобы использовать ее в качестве буферного пула. Построение буферного пула можно осуществить с помощью макрокоманды BUILD. Буферный пул, построенный таким способом, может использоваться несколькими наборами данных. Однако программа может потерять свойство реентерабельности, если для резервирования области использовал­ ся нереентерабельный запрос на память.

2. Если информация о числе и длине буферов для работы с не­ которым набором данных есть результат работы программы, то для построения буферного пула можно использовать макрокоман­ ду GETPOOL, которая сама осуществляет запрос на необходимый объем памяти и формирует буферный пул. Таким образом постро­ енный буферный пул может использоваться только для одного набора данных. После закрытия блока управления данными этого набора для освобождения памяти из-под буферного пула необхо­ димо выдать макрокоманду FREEPOOL.

3. Управляющая программа автоматически строит буферный пул во время выполнения процедуры открытия блока управления данными.

Этот способ самый простой для программиста, потому что от него требуется только обеспечить в блоке управления данными число и размер буферов.

Рассмотрим примеры построения буферного пула. Первый при­ мер иллюстрирует построение буферного пула с помощью макро­ команды BUILD.

Макрокоманда BUILD строит буферный пул в области PUL. Пул содержит 10 буферов длиной 80 байтов каждый. Запрошенный буферный пул используется двумя наборами данных: входным

(имя DCB—INDCB) и выходным (имя DCB—OUTDCB), причем первому требуются три буфера, а второму — семь буферов. В обе­

155


их макрокомандах DCB задан один и тот же адрес блока управ­ ления буферным пулом.

E N D

I N D C B

O U T D C B

P U L

B U I L D

O P E N

C L O S E

R E T U R N D C B

D C B

C N O P

D S

P U L , 10, 80

( I N D C B , , O U T D C B , ( O U T P U T ) )

( I N D C B , , O U T D C B )

D S O R G = P S , M A C R F = ( G L ) . B U F N O = 3 , B U F C B = P U L , E O D A D = E N D

D S O R G = P S , M A C R F = ( P M ) , B U F N O = 7 , B U F C B = P U L 0,8

C L 8 2 0

Второй пример иллюстрирует построение буферного пула с помощью макрокоманды GETPOOL. Две макрокоманды GETPOOL строят два буферных пула. Первая — для входного набора данных (имя DCB—INDCB), буферный пул содержит пять буфе­ ров длиной 80 байтов. Вторая — для выходного набора данных (имя DCB—OUTDCB), буферный пул содержит три буфера дли­ ной 120 байтов. После закрытия блоков управления данными па­ мять из-под буферных пулов освобождается . с помощью макро­ команд FREEPOOL.

 

G E T P O O L I N D C B , 5, 80

 

G E T P O O L O U T D C B , 3 , 1 2 0

 

O P E N

( I N D C B , , O U T D C B , ( O U T P U T ) )

E N D

C L O S E

( I N D C B , , O U T D C B )

F R E E P O O L I N D C B

F R E E P O O L O U T D C B

R E T U R N I N D C B D C B

O U T D C B D C B

D S O R G = P S , M A C R F =* ( G L ) , B F A L N = F , R E C F M E O D A D = E N D , B L K S I Z E = 8 0

D S O R G = P S , M A C R F = ( P M ) , L R E C L = 40, B L K S I Z E = 120, R E C F M = F B

6.5. У П Р А В Л Е Н И Е Б У Ф Е Р А М И

Существуют пять способов управления буферами, которые мо­ гут использоваться программистом в его программе. Способ управ­ ления буферами существенно зависит от используемого метода доступа.

Методы доступа с очередями предусматривают два способа уп­ равления буферами — простую и обменную буферизацию. Оба способа применимы только в последовательном методе доступа с очередями. При работе с индексно-последовательным методом доступа с очередями применима только простая буферизация.

166

Так как обмен данными между внешней и оперативной памя­ тью ЭВМ ведется блоками, буфер используется для размещения блока данных. Блок данных может состоять из нескольких логиче­ ских записей. Часть буфера, соответствующая одной логической записи, называется сегментом буфера. Простая и обменная буфе­ ризация различаются взаимной связью между сегментами буфера.

Буфер при простой буферизации представляет собой совокуп­ ность смежных сегментов, т. е. некоторую непрерывную область оперативной памяти. В связи с этим управляющая программа формирует одну команду канала на каждый буфер в буферном пуле. Это означает, что каждая логическая запись должна физи­ чески пересылаться из входного буфера в буфер для вывода. Обработка ее может выполняться в любом из буферов или в рабо­ чей области.

При обменной буферизации буфер может представлять собой совокупность несмежных сегментов. В связи с этим управляющая программа вынуждена формировать отдельную команду канала для каждого сегмента буфера. Если теперь выделить рабочую область размером в сегмент буфера и изменить роль сегмента входного буфера, рабочей области и сегмента выходного буфера путем подмены адресов, то можно исключить физические пере­ сылки записи внутри оперативной памяти, существенно экономя время обработки.

Базисные методы доступа предусматривают три способа управ­ ления буферами. Программист может самостоятельно отвести бу­ фер в своей программе и указать его адрес в макрокомандах READ или WRITE, тем самым освобождая управляющую про­ грамму от управления буферами. Кроме этого, он может исполь­ зовать либо непосредственное, либо динамическое управление бу­ ферами. Непосредственное управление буферами осуществляется с помощью макрокоманд GETBUF и FREEBUF. С помощью пер­ вой из них получается буфер из буферного пула, а с помощью вто­ рой — буфер возвращается в- буферный пул.

Динамическое управление буферами может применяться толь­ ко при использовании базисного индексно-последовательного или базисного прямого метода доступа. Этот способ управления буфе­ рами состоит в том, что управляющая программа сама выделяет буферы из буферного пула для макрокоманды READ. При запро­ се динамической буферизации всегда предполагается автоматиче­ ское построение буферного пула. Если с помощью последующей макрокоманды WRITE производится обновление записей того же набора данных, то после выполнения WRITE буфер автоматически возвращается в буферный пул. При работе с индексно-последова­ тельными наборами данных каждая последующая макрокоманда READ вызывает возврат буфера в буферный пул. В остальных случаях для возврата буфера в буферный пул можно использовать макрокоманду FREEDBUF. Если в программе выдается только мак­ рокоманда WRITE, динамическая буферизация не может быть ис­ пользована. I

157


6.6.

Р А Б О Т А С П О С Л Е Д О В А Т Е Л Ь Н Ы М И

Н А Б О Р А М И Д А Н Н Ы Х

Для работы

с последовательными наборами данных можно

использовать последовательный метод доступа с очередями и ба­ зисный последовательный метод доступа.

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

Использование последовательного метода доступа с очередями наиболее просто для программиста, так как этот метод предусмат­ ривает небольшое число макрокоманд, автоматическое управление буферами, автоматическое объединение логических записей в бло­ ки и выделение их из блоков, автоматическую синхронизацию операций ввода-вывода с выполнением программы.

Программист должен выбрать только режим обработки за­ писей.

Существуют четыре режима обработки записей: режим указа­ ния, режим пересылки, режим подстановки и режим данных.

В режиме указания запись не перемещается, после макрокоман­ ды GET в регистре 1 выдается адрес этой логической записи во входном буфере, после макрокоманды PUT в регистре 1 выдается адрес в буфере для вывода, куда можно поместить логическую запись. При обработке сегментированных записей в режиме ука-< зания единицей обработки одной макрокоманды GET или PUT является сегмент логической записи. Если же программист обес­ печит построение своей области для всей логической записи, задав в макрокоманде DCB или операторе DD параметр BFTEK=A или выдав в программе макрокоманду BUILDRCD, то единицей рабо-. ты макрокоманды GET или PUT станет вся логическая запись.

Врежиме пересылки логическая запись пересылается либо из входного буфера в рабочую область, либо из рабочей области в буфер для вывода.

Врежиме подстановки логическая запись не пересылается. Вместо этого адрес входного буфера подменяется адресом рабочей области или адрес рабочей области подменяется адресом буфера для вывода.

158