Текст
                    СИСТЕМА
МАТЕМАТИЧ ЕСКОГО
ОБЕСПЕЧЕНИЯ


СИСТЕМА МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ Под общей редакцией А. М. Ларионова
3Q502— 008(01) Книга освещает основные вопросы системы математического обеспечения (СМО) отечест¬ венных электронных машин третьего поколения— ЕС ЭВМ. В ней дается обзор операционных сис¬ тем ЕС ЭВМ, причем основное внимание уделя¬ ется операционной системе ОС ЕС. Кратко опи¬ саны трансляторы с языков Фортран, Алгол-60, Кобол и ПЛД. Пособие предназначено для прикладных про¬ граммистов, а также студентов вузов соответст¬ вующих специальностей. Авторы: В. Г. ЛЕСЮ К, А. С. МАРКОВ, Г. В. ПЕЛЕ ДО В, Л. Д. РАЙКОВ. 123 —— 73—74 © Издательство «Статистика», 1974 г
ПРЕДИСЛОВИЕ Система математического обеспечения.— неотъемлемая часть вычислительных систем,и.постдоЩ|ч'Щ' на базе моделей Единой сис¬ темыэлектронных "вычислительных машин (ЁСЭВМ). Она явля¬ ется логическим продолжением'технических средств, расширяющих возможности аппаратуры и сферы применения ЕС ЭВМ. В настоящей книге дается общая характеристика математиче¬ ского обеспечения ЕС ЭВМ и перспектив его развития. Это прак¬ тическое пособие для тех, кто приступает к изучению математиче¬ ского обеспечения ЕС ЭВМ по эксплуатационной документации. Большая часть книги посвящена наиболее развитой системе ОС ЕС, причем основное внимание уделено работе управляющих про¬ грамм и трансляторов режима пакетной обработки. За рамками книги остались вопросы телеобработки, машинной графики и при¬ кладных программ. Для чтения книги не требуется специальной подготовки помимо общего знакомства с логической структурой и системой команд ЕС ЭВМ. Для более глубокого изучения глав, содержащих деталь¬ ную информацию по возможностям операционной системы ОС ЕС, целесообразно воспользоваться справочными документами ОС ЕС, такими, как «Язык управления заданиями», «Макрокоманды су¬ первизора и управления данными», «Супервизор», «Управление данными», описания языков и руководства по трансляторам. В ка¬ честве дополнительной литературы можно порекомендовать издан¬ ные в последние годы переводы фирменных материалов и книг по системам IBM 360 и 370. В связи с постоянным развитием СМО ЕС ЭВМ возможности и свойства системы, описанные в этой книге, могут не во всех дета¬ лях соответствовать состоянию системы, поставляемой в опреде¬ ленное время конкретному пользователю. Разработанное к настоящему времени математическое обеспе¬ чение ЕС ЭВМ ориентировано прежде всего на пакетную обработ¬ ку. Однако уже сейчас СМО ЕС ЭВМ содержит базовое обеспече¬ ние для оперативных режимов работы (режим реального времени, режим разделения времени, диалоговые режимы и т. д.). Ближай¬ шие перспективы связаны с дальнейшим развитием оперативных режимов и расширением сфер применения ЕС ЭВМ. 3
Исчерпывающая информация о текущем состоянии операцион¬ ных систем содержится в эксплуатационной документации, а до¬ ступные пользователю прикладные программы перечислены в со¬ ответствующих каталогах СМО ЕС ЭВМ. Авторы стремились не нарушать процесс стабилизации терми¬ нологии, наметившейся в последнее время в области систем обра¬ ботки данных. В некоторых местах книги (особенно это’ относит¬ ся к первой главе) новые термины появляются в тексте раньше, чем дается их. определение. В подобных случаях рекомендуется обращаться к терминологическому словарю, приведенному в конце книги.
1. ОБЩИЕ СВЕДЕНИЯ О СИСТЕМЕ МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ ЕС ЭВМ В 1.1. МОДЕЛИ ЕС ЭВМ Единая система электронных вычислительных машин представ¬ ляет собой ряд программно-совместимых моделей вычислительных машин третьего поколения: ЕС-1010; ЕС-1020; ЕС-1021, известную также под названием ЕС-1020А; ЕС-1030; ЕС-1040; ЕС-1050. Концепции, заложенные в систему, позволяют развивать ее в дальнейшем путем добавления новых моделей. Четыре модели ЕС ЭВМ, которые в дальнейшем будем называть основными моделями (ЕС-1020, ЕС-1030, ЕС-1040, ЕС-1050), пол¬ ностью программно-совместимы, а две мини-машины (ЕС-1010 и ЕС-1021) имеют лишь частичную программную совместимость с основными моделями и друг с другом. Общие характеристики моделей приведены в табл. 1. Таблица 1 Основные характеристики моделей ЕС ЭВМ Основные характеристики Модели ЕС ЭВМ ЕС-1010 ЕС-1021 ЕС-1020 ЕС-1030 ЕС-1040 ЕС-1050 Объем оперативной па¬ мяти (Кбайтов)1 8 16—64 64—256 128—512 256—102,4 512—1024 Производительность процессора (тыс. операций в секунду) 10—20 60—100 300 500 Количество селектор¬ ных каналов 1 2 2 3 6 6 Особенности состава команд 2 • 3 Полная программная совместимость Страна-производи¬ тель ВНР ЧССР НРБ ПНР i СССР СССР ГДР СССР 1 1 Кбайт =1024 байтам. 2 Специальный состав команд; программная и микропрограммная интерпре¬ тация полного набора команд основных моделей. 3 Специальный состав привилегированных команд. 5
Для каждой модели существует некоторый минимальный по¬ ставляемый состав периферийного оборудования: для модели НС-1010: мини-диск, конструктивно входящий в процессор, устройства ввода-вывода с перфоленты и пишущая ма¬ шинка; для модели ЕС-1021: накопитель на сменных магнитных дис¬ ках, устройство ввода с перфокарт, печатающее устройство и пи¬ шущая машинка; для моделей ЕС-1020 и ЕС-1030: два накопителя на сменных магнитных дисках, четыре накопителя на магнитной ленте, уст¬ ройства ввода-вывода с перфокарт, устройства ввода-вывода с пер¬ фоленты, печатающее устройство и пишущая машинка; для модели ЕС-1040: шесть накопителей на магнитных дисках, восемь накопителей на магнитной ленте, устройства ввода-вывода с перфокарт, устройства ввода-вывода с перфоленты, печатающее устройство и пишущая машинка; для модели ЕС-1050: шесть накопителей на магнитных дисках, восемь накопителей на магнитной ленте, два устройства ввода-вы¬ вода с перфокарт, два устройства ввода-вывода с перфоленты, два печатающих устройства, две пишущие машинки. Основными отличительными особенностями ЕС ЭВМ являются универсальность,^адаптируемость к применениям,^возможность по¬ степенного наращивания вычислительной мощности в большом диа¬ пазоне. Эти черты характеризуют Единую систему в целом, т. е.- как аппаратную часть, так и систему математического обеспече- мия^Универсальность обеспечивается набором команд, включаю¬ щим ^операции с фиксированной и плавающей точкой различной точности, логические и десятичные операции и операции с полями переменной длины, разнообразными форматами данных, мульти¬ программными возможностями, развитой системой математическо¬ го обеспечения. •2.у\даптируемость к применениям достигается благодаря пере¬ менному составу;моделей ЕС ЭВМ (память, каналы, периферий- ное оборудование). Это позволяет подбирать оптимальную конфи- Турацию модели, удовлетворяющую требованиям конкретного при¬ менения. Математическое обеспечение также адаптируется к кон¬ кретным применениям. Эта адаптация заключается в выборе необ¬ ходимых компонентов и настройке их на конфигурацию модели и класс решаемых задач. ^Возможность постепенного наращивания вычислительной мощ¬ ности достигается несколькими способами: увеличением количест¬ ва и номенклатуры периферийных устройств, увеличением объема оперативной памяти, созданием многомашинных вычислительных комплексов и заменой процессора па более производительный. В последнем случае периферийное оборудование заменять, как правило, не требуется. При увеличении мощности вычислительной установки, благодаря программной совместимости основных моде¬ лей, имевшееся ранее программное обеспечение полностью сохра¬ няется. Это значит, что программы, написанные с соблюдением оп¬ 6
ределенных требовании, могут быть использованы на любой рас¬ ширенной модели. Программная совместимость моделей ЕС ЭВМ обеспечивается единством логической структуры (единым набором команд, еди¬ ной формой представления данных, единой системой адресации, стандартным способом подключения периферийных устройств). Это позволяет разрабатывать программы, не зависящие от кон¬ кретной машины, иметь общие для большинства вычислительных машин операционные системы, создавать единый, фонд приклад¬ ных программ. Модель ЕС-1010 имеет упрощенную структуру и укороченный набор команд, а модель ЕС-1021—набор команд, ориентирован¬ ный на работу в малых системах управления. Совместимость этих моделей с основными моделями обеспечивается программной и микропрограммной интерпретацией полного набора команд. Обе модели имеют отдельные операционные системы, обеспечивающие их эффективное функционирование с учетом особенностей струк¬ туры и областей применения. 1.2. ОСОБЕННОСТИ СИСТЕМЫ МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ ЕС ЭВМ Система матем^тич_еского_обеспечения вычислительных систем третьего поколения "выполняет роль посредника между пользова¬ телями и вычислительной машиной, обеспечивая удобный для поль¬ зователя уровень общения с машиной. Система математического обеспечения ЕС ЭВМ представляет собой^абор.. основных операционных систем,^пакетов прикладных программ ^комплексов программ технического обслуживания. Од¬ ной из основных целей при создании СМО ЕС ЭВМ было дости¬ жение уннв^-рсальности без потери эффективности. CMOJEC ЭВМ является дткрытон системой. Это означает, что ее состав может пополняться и расширяться, обеспечивая развитие технических средств, развитие методов обработки информации и расширение сфер применения. Например, состав операционной системы может непрерывно расширяться за счет включения ком¬ понентов для обслуживания новых внешних устройств, включения новых трансляторов, использования новых языков программиро¬ вания, за счет компонентов, реализующих новые программные и аппаратные возможности. Непосредственное использование больших универсальных сис¬ тем, как, например, операционные системы, не может быть эффек¬ тивным, так как они включают в себя большое число избыточных компонентов, не используемых в конкретной вычислительной сис¬ теме или при решении конкретного класса задач. Любой _кдмдо- нент СМО (операционная система или прикладная программа) т
нуждается в настроике на условия конкретного применения. Та¬ кая. настройка .называется генерацией компонента СМО. Типич¬ ным примером настройки является процесс генерации .основных операционных систем ЕС ЭВМ, который получил наиболее полное воплощение в операционной системе ОС ЕС. Операционная систем a Jp С ЕС является общецелелой. Она ори¬ ентирована не на типовые, а на самые разнообразные примене¬ ния. Требования к системе обработки данных существенно отли¬ чаются от одной установки к другой и от одного пользователя к другому в пределах одной установки. Общецелевая система должна быть достаточно сложной и большей и содержать в себе компоненты, обеспечивающие .максимальное разнообразие воз¬ можностей. Попытка удовлетворить все требования, с помощью одной системы приводит"*к значительным потедиАЦ-Р-есу.рнав (памя¬ ти, времени работы процессора и др.). Следовательно, вместо од¬ ной большой готовой операционной системы пользователю необ¬ ходимо предоставить средства, с помощью которых он мог бы ге¬ нерировать операционную систему для своих нужд, приспосабли¬ вая ее к конфигурации вычислительной установки и классам решаемых задач. Процесс генерации начинается с уточнения нужд вычислитель¬ ной системы.фБыяснягатся общий объем и тип выполняемых работ, [приоритеты работ различных типов,^сервис для выполнения ра¬ бот. Следующий наиболее — выбор конфигурации Д£;щ11чесдда и операционной системы в их сочетании. От него зависят производительность будущей установки и ее способ¬ ность выполнить заданный объем работ по обработке данных. Выбор с ре дату, необходимых для конкретных применений, ока¬ зывается возможным благодаря модульной структуре ОС ЕС. Мо¬ дулями называются составные части операционной системы, кото¬ рые могут объединяться ~в~разиых комбинациях и формировать уникальную операционную систему. Некоторые модули требуются в любой операционной системе, другие являются дополнительны¬ ми (необязательными). Существуют группы альтернативных моду¬ лей, выполняющих одни и те же функции с различной эффектив¬ ностью. Например, один модуль требует небольшого количества памяти, но расходует много машинного времени для выполнения своих функций, а другой занимает больше места в памяти, но вы¬ полняется быстрее. Пользователь может включить или не вклю¬ чить тот или другой модуль в операционную систему в зависимос¬ ти от ресурсов, которыми он располагает. После того как комбинация технических средств и средств опе¬ рационной системы выбрана, необходимо представить ее в такой форме, чтобы генерация системы могла быть выполнена автома¬ тически. Для этой цели служит специальный язык генерации, с помощью которого пользователь описывает^конф^ вычис¬ лительной установки и определяет^омпоиенты^которые он жела¬ ет включить в операционную систему. Используя это'Хописание и библиотеки, содержащие программные модули, выполняется про- ь
цесс генерации новой операционной системы. Генерация является обычным знанием и производится под управлением операционной ]]сТёмы.Она может'быть выполнена практически с помощью любой существующей операционной системы. Потребитель может восполь¬ зоваться поставляемой ему стартовой операционной системой, предназначенной для генерации. По окончании генерации системы б ней можно произвести некоторые изменения без полного повто¬ рения генерации, в момент загрузки системы либо с помощью частичной генерации. Принцип генерации заложен во все операционные системы ЕС ЭВМ. Он используется и в пакетах прикладных программ, особенно в пакетах, расширяющих возможности операционных систем или имеющих сложную логическую структуру. Модульный принцип конструирования обеспечивает возможность непрёрыгзнбТб^зволюционного роста_ операционных систем. Разви¬ тие операционных систем можеГосуществляться не только коллек¬ тивом разработчиков, но и коллективами пользователей. Операционные системы обеспечивают вместимость. программ пользователей независимо от конкретной^ кокфигура 1щи сгенери¬ рованной системы. Это позволяет осуществлять обмен программа¬ ми ивыполнят^их на различных установках. Существует совмес¬ тимость между основными операционными системами на различных уровнях (на уровне языка Ассемблера, на уровне форматов дан¬ ных). Однако эта совместимость в настоящее время неполная. Структура СМО ЕС ЭВМ приведена на рис. 1. Рис. 1. Структура системы математического обеспечения ЕС ЭВМ 9
Используя основные операционные системы ЕС ЭВМ, можно разрабатывать программы, которые не зависят от конкретных уст¬ ройств ввода-вывода, а, следовательно, могут выполняться на раз¬ личных конфигурациях технических средств. Принцип независи- , мости обустройств, в полной мере реализованный в операционной системе ОС ЕС, позволяет добавлять к системе новые устройства и их программное обеспечение, причем программы пользователей, разработанные ранее, могут использовать новые устройства без перепрограммирования. Мультипрограммирование — основа повышения производитель¬ ности вычислительной системы и обеспечения различных режимоз использования. В режиме мультипрограммирования эффектив¬ ность использования программных и технических средств вычисли¬ тельной системы может быть значительно повышена путем совме¬ щения операций обмена как между собой, так и с работой цент¬ рального процессора, что сокращает непроизводительные простои оборудования. 1.3. ОПЕРАЦИОННЫЕ СИСТЕМЫ ЕС ЭВМ Операционные системы — это комплекс программ, предназна¬ ченных для^'лучшения функционирования и расширения примене¬ ния ЭВМ, ^автоматизации процесса подготовки программ и про¬ хождения Их на машине,Увеличения производительности вычисли¬ тельной системы неповышения производительности труда обслу¬ живающего персонала. Целевое назначение операционной системы: ^ а) увеличение пропускной способности ЕС ЭВМ, т. е. увеличе¬ ние общего объема работы, выполняемой системой в единицу вре¬ мени; ^ б) уменьшение времени реакции системы, т. е. уменьшение ин¬ тервала времени между моментом представления работы на обра¬ ботку и моментом получения результата; в) помощь программисту и оператору в использовании вычис¬ лительной системы; г) расширение сферы применения. ( Одним из средств увеличения пропускной способности системы с помощью операционных систем является непрерывная обработка потока задания, которая осуществляется автоматическим перехо¬ дом от одного задания к другому. В режиме мультипрограммиро¬ вания увеличение пропускной способности достигается более эф¬ фективным использованием аппаратных и программных ресурсов системы-. Операционная система помогает обеспечить занятость всей системы в течение возможно более длительного времени пу¬ тем эффективного распределения имеющихся в системе ресурсов по нескольким задачам и переключения управления с одной задачи на другую при возникновении задержки вычислений из-за ожида¬ ния выполнения какого-либо события (операция ввода-вывода, ис¬ течение временного интервала и т. д.). 10
Ъ) Уменьшение времени реакции в ЕС ЭВМ достигается за счет ограничения участия человека в управлении обработкой данных и за счет обеспечения прямых и автоматических линий связи между :истемой и потребителем. Ликвидируются задержки из-за преоб¬ разования данных на автономных внешних системах (перфорация тайных и т. п.). / Операционные системы упрощают работу программиста и опе¬ ратора, предоставляя им большое число языков программирования 'л соответствующих трансляторов для общения с системой; обеспе¬ чивают легкий доступ к часто используемым программам; плани¬ руют работы; контролируют и регистрируют ошибки. Гибкость и упорядоченный рост системы в направлении новых сфер применения достигается наличием разнообразных средств про¬ граммирования и модульным принципом построения операционной системы. Модульный принцип допускает включение в операцион¬ ные системы новых модулей, удовлетворяющих стандартным сог¬ лашениям о связях, комбинирование возможностей системы раз¬ личными способами, ее настройку для заданной конфигурации вы¬ числительной установки. Неотъемлемой частькхоперационной сис¬ темы является набор описаний и руководств по использованию всех ее компонентов. В состав системы математического обеспечения ЕС ЭВМ вхо¬ дят четыре операционные системы: 1) ОС-10 ЕС — операционная система, обеспечивающая эксп¬ луатацию модели ЕС-1010; 2) МОС ЕС — малая операционная система, обеспечивающая эксплуатацию модели ЕС-1021; 3) ДОС ЕС — дисковая операционная система, обеспечиваю¬ щая эксплуатацию всех моделей ЕС ЭВМ (кроме ЕС-1010 и ЕС-1021) и предназначенная для обеспечения работы в режиме пакетной обработки однопроцессорных вычислительных установок с малым объемом оперативной памяти и ограниченным набором внешних устройств; 4) ОС ЕС — операционная система, обеспечивающая эксплуа¬ тацию всех моделей ЕС ЭВМ (кроме ЕС-1010 и ЕС-1021) и пред¬ назначенная для обеспечения работы однопроцессорных и много¬ процессорных вычислительных'установок с большим объемом опе¬ ративной памяти и полным набором внешних устройств в раз¬ нообразных режимах использования вычислительных систем. Весь комплекс программ, входящих в состав любой из опера¬ ционных систем ЕС ЭВМ, можно разделить на управляющую и обрабатывающие программыХУправляющая программа осуществи ляет руление работой вычислительной системы, обеспечивая выполнение непрерывного потока заданий, а также непакетировагъ ных заданий./('Обрабатывающие программы под руководством угъ равляющей Программы осуществляют н с п о с р е д ств ецнае-^в-ылсщ] е- пне вычислительных работ, указанных в_ заданиях Обрабатываю- *щие программы, входящие в состав операционных систем, назы¬ ваются системными обрабатывающими программами. К ним, в 11
частности, относятся и трансляторы. Учитывая важность трансля¬ торов для характеристики возможностей операционных систем, они выделены в отдельную группу. 1.4. ОПЕРАЦИОННАЯ СИСТЕМА ОС-Ю ЕС Операционная система ОС-Ю ЕС обеспечивает однопрограмм¬ ный режим обработки данных в однопроцессорных конфигурациях модели ЕС-1010. Основной вид носителя — перфолента. Объем оперативной памяти ЕС-1010 не менее 8 Кбайтов. При включении в конфигурацию мини-диска оперативная память возрастает до 16 Кбайтов. В этом случае на мини-диске располагаются программ¬ ные компоненты операционной системы и библиотеки программ пользователей. Программы обрабатываются под управлением сис¬ темы в соответствии с командами оператора .ОС-Ю ЕС обеспечи¬ вает также работу адаптера, позволяющего подключать стандарт¬ ные устройства ЕС ЭВМ. Структура ОС-Ю ЕС изображена на рис. 2. Рис. 2. Структура операционной системы ОС-Ю ЕС Управляющая программа операционной системы ОС-Ю ЕС включает: программу начальной загрузки, выполняющую подготовку опе¬ ративной памяти, ввод в нее супервизора и его запуск; супервизор, осуществляющий контроль за прохождением про¬ грамм пользователей и работой других компонентов операцион¬ ной системы, прием и интерпретацию прерываний, связь между опе¬ ратором и системой; 12
программу управления заданиями, обеспечивающую прием и интерпретацию директив оператора, инициирование и завершение выполнения заданий; программу управления данными, осуществляющую перемеще¬ ние данных между оперативной памятью и внешними носителями, обработку и исправление ошибок ввода-вывода. К системным обрабатывающим программам операционной сис¬ темы ОС-19 ЕС относятся: редактор связей, составляющий готовую к выполнению про¬ грамму из отдельно транслированных модулей, помещенных в биб¬ лиотеку перемещаемых модулей;. программа обслуживания библиотек, выполняющая включение и исключение компонентов библиотек, исправление, печать или пер¬ форацию программ, размещенных в библиотеке; программа отладки, обеспечивающая интерпретацию частей' программы, вывод на печать отладочной информации, заказанной пользователем, получение распечаток памяти при аварийном за- вершс'нии; утилиты (вспомогательные программы), предназначенные для копирования, перемещения, печати и перфорации данных. В состав трансляторов операционной системы ОС-10 ЕС входят трансляторы для следующих языков: языка Ассемблера — машинно-ориентированного языка, поз¬ воляющего использовать мнемонические коды операций, символи¬ ческую адресацию, команды условной компиляции и команды оп¬ ределения констант; базисного Фортрана IV — языка программирования для науч¬ но-технических задач, являющегося подмножеством языка Форт* ран IV. Средства генерации ОС-Ю ЕС обеспечивают пользователя воз¬ можностью выбора соответствующей конфигурации и функций опе¬ рационной системы. Операционная система ОС-10 ЕС в дальнейшем может быть расширена комплексированием модели ЕС-1010 с основными мо¬ делями ЕС ЭВМ, обеспечением сателлитового режима использо¬ вания модели ЕС-1010. 1.5. МАЛАЯ ОПЕРАЦИОННАЯ СИСТЕМА МОС ЕС Малая операционная система МОС ЕС предназначена для эксп¬ луатации однопроцессорной конфигурации модели ЕС-1021. Она обеспечивает только однопрограммный режим работы и является подмножеством дисковой операционной системы ДОС ЕС. Струк¬ тура МОС ЕС изображена на рис. 3. Управляющая программа МОС ЕС включает: программу на¬ чальной загрузки; супервизор; программу управлениями задания¬ ми и программу управления данными, допускающую последова¬ тельную, прямую и индексно-последовательную, организацию дан¬ ных. 13
Рис. 3. Структура операционной системы МОС ЕС К системным обрабатывающим программам МОС ЕС относят¬ ся: редактор связей; библиотекарь, программы отладки, програм¬ мы сортировки и объединения, осуществляющие упорядочение дан¬ ных в возрастающей или убывающей последовательности, а также объединение уже упорядоченных массивов данных, утилиты. В состав операционной системы МОС ЕС входят трансляторы для следующих языков программирования: языка Ассемблера — машинно-ориентированного языка, позво¬ ляющего использовать мнемонические коды операций, символиче¬ скую адресацию, средства макроязыка; Фортрана IV — языка программирования для научно-техниче¬ ских задач; Алгола-68 — универсального языка программирования; РПГ (генератора программ отчетов), предназначенного для ав¬ томатизации программирования задач обработки символьной ин¬ формации и обеспечивающего создание файла из одного или не¬ скольких файлов, выполнение вычислений над записями входных файлов, вывод печатных отчетов и т. д.; ЛИСПа — языка программирования для обработки списков; Симскрипта — языка программирования для обработки сим¬ вольной информации. Операционная система МОС ЕС в дальнейшем может быть рас¬ ширена за счет средств комплексирования модели ЕС-1021 с основ¬ ными моделями ЕС ЭВМ, а также обеспечением сателлитного ре¬ жима использования ЕС-1021.
1.6. ДИСКОВАЯ ОПЕРАЦИОННАЯ СИСТЕМА ДОС ЕС Дисковая операционная система предназначена для всех моде¬ лей ЕС ЭВМ (кроме ЕС-1010 и ЕС-1021) в конфигурациях с ма¬ лым объемом оперативной памяти (64—256 Кбайгов) и с ограни¬ ченным набором внешних устройств. Практически ото ограничение касается только графических устройств ввода-вывода и магнит¬ ных барабанов. В качестве носителя информации используются магнитные диски. ДОС ЕС обеспечивает функционирование однопроцессорных комплексов технических средств ЕС ЭВМ; пакетную обработку заданий с возможностью одновременного выполнения до трех па¬ кетов заданий (режим мультипрограммирования с фиксированным числом задач); выполнение в мультипрограммном режиме непаке- тированных заданий; совмещение работы оператора по подготовке очередного задания с обработкой уже введенных заданий; облег¬ чение связи оператора с системой; протоколирование хода работы вычислительной системы; возможность расширения функций и об¬ ластей применения за счет включения пакетов прикладных про¬ грамм; работу через каналы связи. Особенностью мультипрограмм¬ ного режима в дисковой операционной системе является статиче¬ ское распределение оперативной памяти и внешних устройств между решаемыми задачами, определяемое при генерации систе¬ мы либо оператором в процессе работы. Структура ДОС ЕС пред¬ ставлена на рис. 4. Рис. 4. Структура операционной системы ДОС ЕС В состав управляющей программы дисковой операционной сис¬ темы входят: программа начальной загрузки, осуществляющая подготовку оперативной памяти, загрузку в нее ядра системы, обработку ди- 15
ректив начальной загрузки, установку исходного значения даты и времени дня; супервизор, обеспечивающий обработку и идентификацию пре¬ рываний, планирование работы каналов, связь с оператором, дина¬ мический вызов загрузочных модулей из библиотек, обслуживание системных часов, обработку сбоев внешних устройств, выполнение процедур, связанных с окончанием задания, совместное выполне¬ ние до трех программ, запуск непакетированных заданий, органи¬ зацию контрольных точек; программа управления заданиями, выполняющая считывание с системных устройств ввода и расшифровку операторов и директив управления заданиями, подготовку системы к выполнению задания, присвоение логическим устройствам конкретных физических уст¬ ройств, редактирование и запоминание информации о метках то¬ мов и файлов, подготовку для запуска программ с контрольных точек; инициатор одиночных программ, осуществляющий прием и об¬ работку директив оператора и подготовку системы к выполнению непакетированных заданий в мультипрограммном режиме; программы управления данными, обеспечивающие чтение и за¬ пись данных с последовательной, индексно-последовательной или произвольной организацией; объединение логических записей в блоки и их деблокирование, управление буферами ввода-вывода; обработку концов файлов и переключение томов; установление со¬ ответствия символических имен физическим устройствам взода- вывода; совмещение операций обмена с процессом обработки. К системным обрабатывающим программам дисковой операци¬ онной системы относятся: редактор связей, осуществляющий объединение отдельно транс¬ лированных модулей из объектной библиотеки в готовый к выпол¬ нению загрузочный модуль, автоматический просмотр объектной библиотеки для разрешения внешних ссылок, формирование за¬ грузочных модулей с оверлейной структурой, резервирование па¬ мяти для общих областей; библиотекарь, выполняющий функции копирования и коррек¬ тирования для всех трех основных системных библиотек загрузоч¬ ных, объектных и символических модулей, создающий личные объ¬ ектные и символические библиотеки, выполняющий сервисные функции для системных и личных библиотек: автотест, обеспечивающий автоматическую отладку объектных программ (для Ассемблера); редактирование объектных модулей, использование символической адресации в тестовых запросах (для Ассемблера); вывод на печать запрошенной отладочной информа¬ ции; распечатку оперативной памяти; внесение изменений в отла¬ живаемую программу; утилиты (вспомогательные программы), обеспечивающие пе¬ ремещение в системе наборов данных, перекомпоновку и удаление записей, обработку стандартных и пользовательских меток файлов и томов, подготовку к работе дисков; сами утилиты могут генери¬ 16
роваться посредством макроопределений утилит, что дает возмож¬ ность добавлять в них подпрограммы пользователя и настраивать их в соответствии с его нуждами; ленточная и дисковая сортировки, осуществляющие сортировку записей по произвольным ключам в возрастающем или убываю¬ щем порядке, объединение до четырех магнитных лент и дисков с входными файлами, создание контрольных точек и запуск с них, мультитомный и мультифайловый ввод и мультитомный вывод; программа неавтономной проверки внешних устройств с целыо диагностики неисправностей, проверки после ремонта и периоди¬ ческой профилактической проверки устройств взода-вывода. В состав трансляторов дисковой операционной системы входят трансляторы для следующих языков программирования: языка Ассемблера, РПГ, подмножества Фортрана IV, подмножества ПЛ/1, Кобола. 1.7. ОПЕРАЦИОННАЯ СИСТЕМА ОС ЕС Операционная система ОС ЕС предназначена для эксплуатации всех моделей ЕС ЭВМ (кроме ЕС-1010 и ЕС-1021) в конфигура¬ циях с большим объемом оперативной памяти и полным набором внешних устройств. ОС ЕС размещается на магнитных барабанах или дисках. * ОС ЕС обеспечивает4)функционирование однопроцессорных и многопроцессорных комплексов технических средств ЕС ЭВМ,«^па¬ кетную обработку заданииЬ]связь оператора с сиртемойупротоколи- рование хода работы вычислительной системы^уэозможность рас¬ ширения функций и областей применения,работу системы в режи¬ ме квантования времени-^совмещение пакетной обработки и режи¬ ма квантования времени,^работу в реальном масштабе времени, ^автоматический сбор исходных данных непосредственно от источ¬ ника, их хранение, обновление и автоматизированную обработк^^ра- боту через каналы связи,Н/функционирование графических уст¬ ройств ввода-вывода,^/автоматизированное разграничение доступа к защищенным наборам данных$уширокий набор средств автома¬ тизации подготовки, отладки и выполнения задач. ОС ЕС имеет два основных режима мультипрограммной рабо¬ ты: режим мультипрограммирования с фиксированным числом за¬ дач и режим мультипрограммирования с переменным числом за¬ дач. ОС ЕС может работать в однопрограммном режиме, в кото¬ ром не используются мультипрограммные возможности. Режимы различаются, с одной стороны, организацией мультипрограммиро¬ вания, с другой стороны, минимальным объемом оперативной па¬ мяти, необходимым для использования того или иного режима. В однопрограммном режиме операционная система ОС ЕС вы¬ полняет задания строго последовательно. В каждый момент време¬ ни в оперативной памяти находится только одна выполняемая про¬ грамма. Однопрограммный режим требует наименьшего объема оперативной памяти и может быть реализован на вычислитель¬ ной установке с объемом оперативной памяти 64 Кбайта. 2. Зак.1{ TU4, 17
Режим мультипрограммирования с фиксированным числом за¬ дач (минимальный объем оперативной памяти 128 Кбайтов) обес¬ печивает одновременную работу фиксированного числа заданий (не более 15), определяемого статическим распределением памяти, выполненным при генерации системы либо заданным оператором. При этом допускается в рамках задания распараллеливать про¬ цесс вычислений путем организации задач, одновременно выпол¬ няемых в режиме мультипрограммирования. Максимальное число одновременно выполняемых задач не должно превышать 255. Рас¬ пределение ресурсов вычислительной установки между этими за¬ дачами ведется динамически. Режим мультипрограммирования с переменным числом задач (минимальный объем оперативной памяти 256 Кбайтов) обеспе¬ чивает одновременную работу произвольного числа заданий (не бо¬ лее 15), определяемого в любой заданный момент состоянием ди¬ намически распределяемых ресурсов вычислительной установки (включая оперативную память). Оперативная память для каждого задания выделяется динамически, поэтому число заданий зависит от суммы запросов выполняемых задач и является переменной ве¬ личиной. Так же как и в предыдущем режиме мультипрограммиро¬ вания, допускается распараллеливание процесса вычислений путем организации задач, выполняемых одновременно в режиме мульти¬ программирования. Максимальное число одновременно выполня¬ емых задач не фиксируется, а определяется динамически в зависи¬ мости от наличия свободных ресурсов. ОС ЕС допускает следующие режимы использования:'пакетную обработку, ''удаленную пакетную обработку,'режим разделения времени, диалоговые режимы,урежим работы в реальном масштабе времени,тфаботу вычислительной установки в многопроцессорных и многомашинных конфигурациях. В режиме пакетной обработки производится обработка непре¬ рывного потока заданий с автоматическим переходом от одного задания к другому. Участие оператора в обработке заданий сведе¬ но к минимуму, что уменьшает число ошибок по его вине. Ввод по¬ тока заданий производится с устройства ввода, непосредственно соединенного с вычислительной установкой (устройства ввода с перфокарт, магнитных лент и т. д.). Обработка потока заданий может осуществляться в любом из мультипрограммных, а также в однопрограммном режиме. После ввода они образуют входные очереди заданий, обычно размеща¬ емые на диске. Выбор задания из очереди на обработку может быть организован либо последовательно, либо на основе приори¬ тетов. Очереди заданий могут пополняться новой порцией зада¬ ний, введенных с устройства, предназначенного для этой цели. Та¬ кое пополнение может быть осуществлено в произвольные моменты времени, даже если очереди еще полностью не обработаны. Ре¬ зультаты выполнения заданий записываются на диск и образуют выходные очереди. 18
После завершения выполнения задания производится вывод ре* зультатов из выходной очереди па устройства системного вывода (АЦПУ, карточные перфораторы, магнитные ленты и т. д.). Вывод может быть осуществлен либо последовательно, либо на основе приоритетов. В однопрограммном режиме входные и выходные очереди отсутствуют. Ввод заданий в этом режиме производится путем считывания очередного задания (пункта задания) с устрой¬ ства системного ввода, а вывод производится непосредственно на устройство системного вывода. В мультипрограммных режимах также допускается непосредственный вывод на устройство систем¬ ного вывода в процессе обработки задания. ' В режиме удаленной пакетной обработки ввод потока заданий, а также вывод результатов производится на удаленный абонент¬ ский пункт (терминал), соединенный с вычислительной установкой по каналу связи (телеграфному, телефонному или др.). В состав абонентского пункта, используемого в режиме удаленной пакетной обработки, входят устройство ввода с перфокарт, устройство вы¬ вода на перфокарты, АЦПУ. V1 Операционная система ОС ЕС в настоящее время обеспечивает простейший вариант режима разделения времени, называемый квантованием времени. Группа заданий, одновременно находя¬ щихся в основной памяти, объявляется квантующейся. Это значит, что они получают управление на определенный интервал времени, называемый квантом. После истечения этого интервала управле¬ ние получает следующее квантующееся задание также на величи¬ ну кванта времени и т. д. Величина кванта и признак принадлеж¬ ности заданий к группе квантования устанавливаются при гене- ^рации операционной системы. Помимо группы квантующихся зада¬ ний в оперативной памяти могут находиться обычные задания, вы¬ полняемые без квантования времени. Все задания, входящие в группу квантования, имеют один и тот же приоритет. Он может быть как выше, так и ниже приоритетов неквантующихся заданий. Одновременно может быть несколько групп квантования с различ¬ ными приоритетами Задания, выполняемые в режиме квантования, находятся в опе¬ ративной памяти до своего завершения и в процессе выполнения на внешнюю память не вытесняются. Режим квантования време¬ ни обеспечивается как в режиме мультипрограммирования с фик¬ сированным числом задач, так и в режиме мультипрограммирова¬ ния с переменным числом задач. На базе мультипрограммного режима с переменным числом за¬ дач может функционировать система разделения времени широко¬ го назначения для обслуживания более ста одновременно'' работа¬ ющих удаленных абонентов. Система разделения времени предназ¬ начена для использования на старших моделях ЕС ЭВМ с объ¬ емом оперативной памяти не менее 512 Кбайтов. Абонентские пункты, представляющие собой пишущие машинки, телетайпы или дисплеи с клавиатурой, связаны с вычислительной системой по каналам связи. 2* 19
Одновременно с программами, выполняемыми в режиме разде¬ ления времени, могут выполняться фоновые задания пакетной об¬ работки. Режим разделения времени имеет более высокий приори¬ тет. Таким образом, задания пакетной обработки выполняются только в том случае, если все программы, выполняемые в режиме разделения времени, находятся в состоянии ожидания или отсутст¬ вуют. Между пакетной обработкой и режимом разделения времени обеспечивается программная совместимость, что позволяет одну и ту же программу выполнять как в режиме пакетной обработки, так и в режиме разделения времени. Для выполнения заданий в режиме разделения времени выде¬ ляется од'ин или несколько разделов оперативной памяти, каждый из которых предназначен для выполнения одного или нескольких заданий. Любое такое задание получает управление на период вре¬ мени, называемый квантом времени. В это время копии всех дру¬ гих задании, выполняемых в режиме разделения времени, сохра¬ няются во внешней памяти. После истечения кванта времени теку¬ щее задание вытесняется на внешнюю память, а на его место за¬ гружается следующее задание (этот процесс называется .свопин¬ гом), которое получает управление, имея свой квант времени. В режиме разделения времени возможно выполнение таких дей¬ ствий, как работа с наборами данных (ввод с абонентского пунк¬ та, запоминание, поиск, модификация, редактирование, вывод ит. д.), разработка программ в режиме диалога, выполнение про¬ грамм в режиме диалога и т. д.* Для определения указанных дей¬ ствий предназначен набор команд, с помощью которых пользова¬ тель с абонентского пункта управляет работой системы. Для раз¬ работки программ в режиме диалога предполагается использова¬ ние ряда языков программирования. , ! Диалоговый режим использования вычислительных систем воз¬ можен и без режима разделения времени. Базовым обеспечени¬ ем режима диалога служат телекоммуникационные методы досту¬ па, которые позволяют передавать информацию по каналам связи между вычислительной машиной и абонентскими пунктами. Наос- нове операционной системы ОС ЕС возможна разработка паке¬ тов прикладных программ для программирования в режиме диало¬ га с использованием языков высокого уровня. Режим работы в-реальном масштабе времени используется, ког¬ да вычислительная система работает совместно с некоторым фи¬ зическим процессом или объектом. При этом данные, поступающие в систему, должны быть обработаны с учетом временных ограни¬ чений с тем, чтобы результаты обработки можно было бы исполь¬ зовать для управления процессом. Источниками данных могут быть либо устройства-датчики, либо человек, находящийся за або¬ нентским пунктом. Системы, работающие в реальном масштабе времени, характе¬ ризуются следующими особенностями: работа системы управляется поступающими данными; в отли¬ чие от пакетной обработки, где система обычно сама запрашива- 20
ет данные, в реальном масштабе времени система должна быть в постоянной готовности принять данные, поступающие на вход; потоки входных данных носят случайный характер; как пра¬ вило, не допускается потеря поступающих данных, так как их не¬ возможно повторить; время реакции системы на внешние события должно удовлет¬ ворять определенным ограничениям. Для обеспечения высокой реактивности системы требуется мак¬ симально распараллеливать процессы обработки, что требует вы¬ сокого уровня мультипрограммирования. Вычислительные системы на базе моделей ЕС ЭВМ, работаю¬ щие под управлением операционной системы ОС ЕС в одном из мультипрограммных режимов, удовлетворяют всем требованиям, предъявляемым к системам реального масштаба времени. Опера¬ ционная система ОС ЕС обеспечивает высокую реактивность сис¬ темы. Минимальное время реакции на прерывания в реальном мас¬ штабе времени составляет от нескольких микросекунд до сотен микросекунд. Оно зависит от производительности выбранной моде¬ ли, а также от конфигурации сгенерированной операционной сис¬ темы. Эти же факторы влияют на реактивность системы в целом. Генерация операционной системы существенно влияет на время реакции и производительность вычислительной системы. Исполь¬ зуя большой набор возможностей, предоставляемых при генера¬ ции, можно получить систему, максимально удовлетворяющую предъявляемым требованиям. Операционная система ОС ЕС предоставляет широкие возмож¬ ности по распараллеливанию процессов вычислений и организации мультипрограммной работы. ОС ЕС имеет средства для организа¬ ции приема случайных потоков данных, поступающих в непредска¬ зуемые моменты времени. Аппаратные и программные средства контроля правильности работы, средства диагностики и восстанов¬ ления после сбоев повышают надежность работы вычислительной системы. Операционная система ОС ЕС обеспечивает двухпроцессорную систему с общим полем оперативной памяти для моделей ЕС-1040 и ЕС-1050. ОС ЕС содержит обеспечение средств комплексирования, пред¬ назначенных для организации многомашинных комплексов (без общего поля оперативной памяти). К ним относятся!! Адаптер ка¬ нал-канал, который позволяет непосредственно связать каналы двух различных моделей ЕС ЭВМ,£разделеиные (совместно исполь¬ зуемые) устройства периферийной памяти, а5)гакже средства пря¬ мого управления. На базе указанных средств пользователь может строить практически произвольные конфигурации многомашинных комплексов, используя программное обеспечение средств комплек¬ сирования. Структура операционной системы ОС ЕС представлена на рис. 5. В состаЗГуправляющей программы операционной системы ОС ЕС входят: 21
Операционная система ЕС ЭВМ (ОС ЕС) 22 Рис. 5. Структура операционной системы ОС ЕС
af программа начальной загрузки, осуществляющая настройку оперативной памяти, загрузки ядра операционной системы и за¬ грузку программы инициализации ядра; 6| программа инициализации ядра, которая подготавливает сис¬ темные таблицы, проверяет состояние таблиц, состояние внешних устройств, настраивает системные наборы данных, связывается с оператором с целью оперативного изменения свойств операци¬ онной системы; (j планировщик заданий, обеспечнвающий^считывание входных потоков заданий,^последовательную или приоритетную обработку заданий (в зависимости от режима ОС ЕС)^инициирование вы¬ полнения нескольких заданий одновременно,^чтение .и интерпрета¬ цию операторов языка управления заданиями,^распределение ре¬ сурсов вычислительной установки для задания,()вызов каталогизи¬ рованных процедур,Автоматическое распределение томов на внеш¬ них носителях,S/асийхронное чтение входных и выдачу выходных данных задания,ведение системного журнала; главный плайировщик, осуществляющий связь оператора с сис¬ темой; главный планировщик вместе с планировщиком заданий входят в состав программ управления заданиями; ll супервизор,?) о'су щ е с т в л я'io щ и йобр а б о т ку всех типов прерыва¬ нии,2к’пр явление выполнением одной или нескольких задача/основ¬ ной памятыор/связями между модулями,работой программ с овер¬ лейной структурой,'^/системными часами,^/резидентными програм¬ мами доступа к данным^юредствами защиты оперативной памяти, запросами на ввод-вывод,^динамическую загрузку программ в опе¬ ративную памятьц!совмещение работы каналов с процессором,^ра¬ боту системы в режиме квантования времени,/совмещение пакет¬ ной обработки и режима квантования времени/функционирование многопроцессорных комплексов ЕС ЭВМ; функцией программ су¬ первизора является управление задачами; t п£ог£_аммы управления данными, обеспечивающие/ввод и вы¬ вод данных с последовательной, индексно,-последовательной, биб¬ лиотечной и произвольной организацией^объединение записей в блоки и разделение блоков на записи,Совмещение операций ввода- вывода и обработки,Обработку системных и пользовательских ме¬ ток томов и наборов данных^втоматическое позиционирование то- мовфнализ и обработку ошибочных ситуаций в операциях ввода- вывбда^езависимость программ от устройств; программы управления восстановлением после сбоя, осуществ¬ ляющие обработку Прерываний от схем контроля машины, регист¬ рацию машинных сбоев в процессоре, каналах и внешних устрой¬ ствах, повторение сбившейся команды процессора или канала, если это возможно, выборочное завершение затронутой сбоем зада¬ чи, формирование записи о сбое в журнале, перевод системы в со¬ стояние ожидания, если восстановление работоспособности не¬ возможно. К системным обрабатывающим программам ОС ЕС относятся следующие компоненты: 23
редактор связей, объединяющий отдельно оттранслированные объектные и загрузочные модели в один готовый к выполнению за¬ грузочный модуль; формирующий загрузочные модули с оверлей¬ ной структурой; вносящий изменения в программы путем замены, исключения и перемещения программных секций; резервирующий память для общих областей, создаваемых трансляторами; загрузчик, осуществляющий редактирование и непосредствен¬ ную загрузку для выполнения отредактированных модулей в од¬ ном пункте задания; программа сортировки-объединения, обеспечивающая размеще¬ ние наборов данных в заданном порядке, сортировку записей в со¬ ответствии с их управляющими полями, объединение файлов, раз¬ мещенных на накопителях (до 32 магнитных лент, 6 дисков и 6 ба¬ рабанов), с входными файлами, создание контрольных точек и запуск с них, мультитомный и мультифайловый ввод и мультитом- ный вывод; тестовый транслятор (Тестран), служащий для отладки про¬ грамм на языке Ассемблера и обеспечивающий вывод на печать областей памяти, общих регистров и регистров с плавающей точ¬ кой, распечатку системных блоков и таблиц, фиксацию логики отлаживаемой программы с представлением соответствующей пе¬ чатной информации, выполнение отлаживаемой программы в ре¬ жиме трассировки, редактирование и вывод на печать отладочной информации в соответствующих форматах; утилиты (вспомогательные программы), обеспечивающие пере¬ мещение наборов данных с одного носителя на другой, печать и перфорацию наборов данных, печать каталога системы, оглавле¬ ний томов на дисках и оглавлений библиотек, обновление библио¬ тек, модификацию каталога, подготовку и разметку томов прямо¬ го доступа и магнитных лент, редактирование записей в наборах данных, сбор информации об ошибках и их распечатку в удобной для пользователя форме. В состав трансляторов ОС ЕС входят трансляторы со следую¬ щих языков программирования: языка Ассемблера, РПГ, Форт¬ рана IV, ПЛ/1, Кобола, Алгола-60. Программное обеспечение телеобработки позволяет осуществ¬ лять передачу информации в вычислительную систему и из нее по каналам связи (телефонным, телеграфным и др.)- Средства теле¬ обработки обеспечивают одновременную работу с вычислительной машиной нескольких удаленных абонентских пунктов. Программ¬ ное обеспечение телеобработки включает два метода доступа: ба¬ зисный телекоммуникационный метод доступа и общий телеком¬ муникационный метод доступа. Эти методы доступа используются во всех системах, осуществляющих удаленную обработку данных (удаленная пакетная обработка, диалоговые системы, системы раз¬ деления времени, системы в реальном масштабе времени, ипфор- мацнонно-поисковые системы, различные АСУ и т. д.). Программное обеспечение машинной графики обеспечивает работу вычислительной системы с алфавитно-цифровыми и графи¬ 24
ческими дисплеями. Оно включает графический метод доступа, под* программы графического программирования, а также обеспечение дисплея в качестве консоли оператора. Средства генерации операционной системы ОС ЕС обеспечи¬ вают настройку в широких пределах на конкретные конфигурации технических средств ЕС ЭВМ и класс решаемых задач. 1.8. КОМПЛЕКС ПРОГРАММ ТЕХНИЧЕСКОГО ОБСЛУЖИВАНИЯ Комплекс программ технического обслуживания (КПТО) со¬ держит тест-программы двух категорий: ^работающие без опера¬ ционной системы;’5работающие под управлением операционной си¬ стемы. По функциональному назначению тест-программы делятся на^аладочные^Ьроверочные ^диагностические. Наладочные тест-программы служат для проверки правильнос¬ ти функционирования устройств и блоков во время наладки маши¬ ны. Проверочные тест-программы предназначены для периоди¬ чески проводимой проверки правильности функционирования уст¬ ройств, блоков и машины в целом и для обнаружения неисправнос- *тей в процессе эксплуатации. Диагностические тест-программы позволяют классифицировать отказы и локализовать места неис¬ правности. Наладочные тесты разработаны для центральных процессоров оперативной памяти, устройств ввода-вывода, внешней памяти. Оми являются самостоятельными программами, выполняемыми без операционных систем. Проверочные и диагностические тесты работают под управле¬ нием специальной программы-монитора, предназначенной для не¬ автономной проверки внешних устройств, в функции которой вхо¬ дят вызов, выполнение каждого отдельного теста и управление им. Монитор осуществляет связь с оператором, обработку преры¬ ваний, печать сообщений об ошибках и т. п. 1.9. ПАКЕТЫ ПРИКЛАДНЫХ ПРОГРАММ Пакеты прикладных программ строятся на базе операционных систем и являются их дальнейшим развитием в конкретном на¬ правлении. Большинство пакетов прикладных программ разраба¬ тывается на базе операционной системы ОС ЕС. Пакет поставля¬ ется отдельно, имеет самостоятельную документацию и не входит в состав операционной системы. Многие пакеты прикладных про¬ грамм имеют собственные средства для генерации. Разработка пакета не требует модификации операционной системы. Это отно¬ сится и к пакетам, влияющим на работу управляющей программы. Если такой пакет требует внесения изменений в управляющую про¬ грамму, то это выполняется в процессе загрузки и инициализации пакета. 25
Все пакеты прикладных программ могут быть разбиты на три группы: пакеты, расширяющие возможности операционных систем; пакеты общего назначения; пакеты, ориентированные на приме¬ нение в АСУ. Пакеты прикладных программ, расширяющие возможности опе¬ рационных систем, обеспечивают функционирование различных конфигураций ЕС ЭВМ. К мим относятся пакеты, обеспечивающие работу типовых конфигураций многомашинных комплексов, диало¬ говые системы, системы работы в реальном масштабе времени, удаленную пакетную обработку. Пакеты прикладных программ общего назначения включают на¬ бор программ для широкого круга применений. К ним относятся программы, обеспечивающие различные применения алфавитно- цифровых н графических дисплеев; программное обеспечение графопостроителей, системы программирования для языков Ал¬ гол-68, Симула-67 и ПЛ/1; универсальная система программирова¬ ния на базе языка АЛМО; системы программирования для специ¬ альных языков программирования; программы для научно-техни¬ ческих расчетов, математического программирования, обработки матриц; программы для различных видов моделирования; про¬ граммы для задач теории массового обслуживания и т. д. Пакеты прикладных программ, ориентированные на примене¬ ние в АСУ, включают обобщенные системы обработки банков дан¬ ных, информационно-поисковые системы общего назначения и сис¬ темы обработки документов.
2. ОПЕРАЦИОННАЯ СИСТЕМА ОС ЕС. ОБЩИЕ СВЕДЕНИЯ Ц 2.1. ОСНОВНЫЕ СОСТАВНЫЕ ЧАСТИ ОПЕРАЦИОННОЙ СИСТЕМЫ ОС ЕС. ПОДГОТОВКА СИСТЕМЫ К РАБОТЕ Операционная система ОС ЕС включает управляющую и обра¬ батывающие программы. Управляющая прог р амма^— о б я з а т ел ь н ый компонент л ю б ого сгенерированного варианта операдйонноТГсистемы. В ее функции входит планирование прохождения непрерывного потока заданий, управление распределением ресурсов, реализация принятых мето¬ дов организации данных, управление операциями ввода-вывода, организация мультипрограммной работы, управлением работоспо¬ собности системы после сбоев и ряд других функций. Многие под¬ программы из состава управляющей программы выполняются в состоянии супервизора и защищаются нулевым ключом защиты памяти. Обрабатывающие программы выполняются в состоянии задачи под управлением управляющей программы. Обрабатывающая программа не может выполнять привилегированные команды, в том числе и команды ввода-вывода. Они выполняются путем обра¬ щения к управляющей программе. Управляющая программа состоит из четырех компонентов: уп¬ равление заданиями, управление задачами, управление данными и управление восстановлением. Управление заданиями включает планировщик заданий и глав¬ ный планировщик, в функции которых входит предварительное пла¬ нирование заданий для выполнения и осуществление связи опера¬ тора с системой. Управление задачами включает программы супервизора, основ¬ ное назначение которых состоит в динамическом распределении ресурсов системы между несколькими задачами, решаемыми одно¬ временно в мультипрограммном режиме. Многие программы су¬ первизора входят в ядро операционной системы, постоянно нахо¬ дящееся в оперативной памяти. Программы управления данными обеспечивают все операции обмена (между оперативной памятью и периферийными устрой¬ ствами) на физическом и логическом уровнях. Они включают ряд служб, обеспечивающих выполнение таких функций, как управле¬ 27
ние каталогом, управление распределением памяти прямого досту¬ па, обработка ошибок ввода-вывода и т. д. Программы управления восстановлением регистрируют машин¬ ные сбои и отказы и восстанавливают работоспособность системы после сбоев, если это возможно. Обрабатывающие программы делятся на две категории: систем¬ ные и прочие обрабатывающие программы. К первым относятся программы, входящие в состав операционной системы: транслято¬ ры, редактор связен, загрузчик, тестовый транслятор Тестран, сортировка-объединение, утилиты и ряд других. Прочие обрабаты¬ вающие программы — это программы пользователей, пакеты при¬ кладных программ и др. Выделение системных обрабатывающих программ чисто условное и связано в основном с порядком разра¬ ботки и поставки, а не с их выполнением на вычислительной уста¬ новке. Статус системных обрабатывающих программ в системе сов¬ падает со статусом обычных пользовательских проблемных про¬ грамм. Поставляемая операционная система состоит из стартовой опе¬ рационной системы (стартера) и полного набора программ опера¬ ционной системы, расположенных в библиотеках компонентов. Стартовая операционная система предназначена для генерации различных рабочих вариантов операционной системы из библиотек компонентов. Операционная система поставляется на магнитной ленте. Прежде чем использов-а-ть операционную систему, необходимо выполнить ее генерацию. В результате генерации возникает ва¬ риант операционной системы, отвечающий заданным требовани¬ ям. Указанные требования пользователь записывает на языке мак¬ рокоманд генерации. Генерация операционной системы может про¬ водиться не только на стартовой операционной системе, но и на любой работающей операционной системе, сгенерированной ранее. Все сгенерированные варианты операционной системы независимо от режима мультипрограммирования программно совместимы меж¬ ду собой. Управляющая программа и большинство системных обрабаты¬ вающих программ имеют ряд необязательных возможностей или возможностей по выбору. Перед генерацией определяется конфи¬ гурация операционной системы и производится выбор требуемых необязательных возможностей. Результаты выбора выражаются на языке макрокоманд генерации. Макрокоманды генерации, порядок проведения генерации, а также описание необязательных возмож¬ ностей приводятся в соответствующих руководствах. Сгенерированная операционная система размещается на одном или нескольких пакетах дисков, что определяется при генерации. Чтобы начать работу с системой, необходимо загрузить ее в опе¬ ративную память с помощью процедуры начальной загрузки. Для этого резидентный том системы (т. е. пакет дисков, на котором за¬ писана программа начальной загрузки, а также другие компоненты сгенерированной операционной системы) устанавливают на уст- 28
рокство. Адрес устройства набирают на переключателях пульта и нажимают кнопку начальной загрузки программ (НЗП). Поеме это¬ го последовательно выполняются программа начальной загрузки и программа инициализации ядра. Программа начальной загрузки производит поиск на резидентном томе системы набора данных с именем SYS!.NUCLEUS, который представляет собой ядро. Ядро— это часть управляющей программы, которая постоянно находится в оперативной памяти и никогда не перекрывается другими частя¬ ми операционной системы или программами пользователя. После того как указанный набор данных найден, программа начальной загрузки загружает его в оперативную память. Затем загружается программа инициализации ядра, которой программа начальной за¬ грузки передает управление. В процессе начальной загрузки оператор может изменить неко¬ торые системные параметры. С этой целью система выдает опера-' тору запросы. Отвечая на них, оператор может указать новые зна-, чения системных параметров либо отказаться от их изменения. В результате этих действий оператор может изменить список рези¬ дентных (т. е. находящихся в оперативной памяти) программ и данных. Среди них — программы методов доступа, программы, обрабатывающие обращения к супервизору, отдельные элементы оглавления библиотек. Расширение списка резидентных программ и данных ведет к увеличению производительности системы (так как не тратится время на поиск и загрузку из внешней памяти) за счет дополнительного расхода оперативной памяти. Далее производится инициализация основной памяти, исполь¬ зуемой для выполнения задач пользователя и некоторых систем¬ ных задач. В процессе начальной загрузки системы мультипро¬ граммирования с фиксированным числом задач оператор может переопределить количество разделов памяти, их размер, а также классы заданий для каждого раздела. После завершения начальной загрузки системы выдается со¬ общение о том, что она готова к работе и может выполнять поток заданий, поступающих на вход. 2.2. РАЗРАБОТКА ПРОГРАММ Разработка программ заключается в формулировании алгорит¬ ма, программировании, отладке и выполнении программ. При разработке программ программист пользуется услугами операционной системы. Система программирования ОС ЕС позво¬ ляет проводить программирование и отладку задачи по частям с использованием различных языков программирования. В состав системы программирования входит набор трансляторов е языков Ассемблера, Фортрана IV, Алгола-60, Кобола, ПЛ/1 и РПГ, а так¬ же редактор связей и Тестран. При разработке программ исполь¬ зуются многие компоненты управляющих программ и обрабатыва¬ ющие программы. 29
Для повышения эффективности программирования использу¬ ется сегментация больших программ на менее крупные, автоном¬ ная их разработка и объединение перед или в процессе выполнения. В связи с этим в операционной системе ОС ЕС используется мо¬ дульный принцип программирования. Каждая программа пред¬ ставляет собой модуль. Несколько модулей могут быть объедине¬ ны и составить более крупный модуль. Кроме того, 'модули могут динамически вызывать друг друга. Программы, записанные на одном из входных языков про¬ граммирования, представляют собой исходные модули. Они могут представлять собой либо последовательные наборы данных, либо разделы библиотечных наборов данных (библиотек). Последова¬ тельные наборы данных могут находиться на перфокартах, магнит¬ ных лентах или томах прямого доступа;- библиотечные наборы данных —только на томах прямого доступа. Набор данных, содер¬ жащий исходный модуль, является входными данными для соответ¬ ствующего транслятора или Ассемблера. В результате трансляции получается объектный модуль на машинном языке. Такие модули непригодны для загрузки в оперативную память и выполнения. Объектные модули также могут быть представлены в виде по¬ следовательных наборов данных или в виде разделов библиотек. Объектные модули для последующей обработки могут выводиться на перфокарты, магнитную ленту или том прямого доступа. Они состоят из текста в машинном коде, содержащего команды и кон¬ станты программы, и управляющих словарей. Управляющие слова¬ ри? содержат информацию для объединения объектных модулей и для последующей загрузки и настройки программ в оперативной памяти. Отдельный программный модуль может содержать ссылку на другие программные модули. На некоторые величины данной про¬ граммы могут быть ссылки из других модулей. Величины в про¬ грамме, осуществляющие ссылку вне модуля и на которые произ¬ водится ссылка извне, называются внешними символами. Инфор¬ мация о внешних символах (адрес, тип и т. д.) помещается в сло¬ варе внешних символов. Словарь используется редактором связей при объединении нескольких модулей в один для согласования разрешения внешних ссылок, т. е. ссылок модулей между собой. Сама внешняя ссылка вне модуля в тексте программы объектного модуля не формируется. Вместо нее в адресной части соответству¬ ющей команды находятся нули. Кроме внешних символов в модуле могут быть внутренние ад¬ ресные ссылки, типичным примером которых являются адресные константы. Ссылки такого рода, а также адреса программных сек¬ ций отражаются в другом управляющем словаре — словаре пере¬ мещений. Он используется редактором связей при объединении модулей, а также программой выборки для настройки модуля на физические адреса памяти, в которую он загружен. Формат объектных модулей стандартный для всех транслято¬ ров. Это позволяет одинаково обрабатывать их редактором связей 30
и объединять модули, написанные на разных языках программи¬ рования. Редактор связен —одна из обрабатывающих программ ОС ЕС. Обработка редактором связей — обязательный шаг, который следу¬ ет после ассемблирования или трансляции любого исходного мо¬ дуля. Редактор связи подготавливает результат трансляции — объектные модули для выполнения. Он редактирует модули и объ¬ единяет их в единый загрузочный модуль, который может быть по¬ мещен программой выборки в оперативную память для выполне¬ ния. Загрузочный модуль может быть использован, повторно редактором связей для объединения с другими объект^мй^ли за¬ грузочными модулями. Кроме объединения модулей редактор свя¬ зей выполняет ряд других функций: замену, исключение и пере¬ группировку программных секций внутри модуля по указанию про¬ граммиста, автоматический вызов подпрограмм из библиотеки, создание оверлейных структур программ, формирование характе¬ ристик загрузочного модуля и запись их в оглавление библиотеки и т. п. Загрузочный модуль^ может представлять лишь раздел библио¬ тек!?, 'Которая записывается только на томе прямого доступа/ Это связано с тем, что программа выборки осуществляет динамический вызов программных модулей по их имени. При этом она осуществ¬ ляет поиск модулей в библиотеках, где разделами являются за¬ грузочные модули, а их имена помещаются в оглавлении библиоте¬ ки. Существуют следующие типы библиотек: общая, временные и личные. Общая библиотека — это библиотечный набор данных, имею¬ щий имя SYS_LyjN.lD-iIB- В нем хранятся часто используемые про¬ граммы, в том числе и системные обрабатывающие программы, такие, как трансляторы. Эта библиотека формируется при гене¬ рации системы и всегда открыта для использования. Временные библиотеки — это библиотечные наборы данных, предназначенные для временного хранения программы, до ее ис¬ пользования более поздним пунктом того же задания. Этот тип биб¬ лиотек особенно полезен для хранения выхода транслятора или редактора связей, пока он не потребуется в более позднем пункте задания. После завершения задания временные библиотеки лик¬ видируются. Личные библиотеки — это библиотечные наборы данных, где хранятся группы программ, которые используются не настолько часто, чтобы включать их в общую библиотеку. Личные библиоте¬ ки становятся доступными для задания и для пункта задания с по¬ мощью специальных указаний на языке управления заданиями. Так же как и объектный модуль, загрузочный модуль состоит из текста и управляющих словарей: словаря внешних символов и словаря перемещений. Словарь внешних символов нужен для тех загрузочных модулей, для которых не все внешние ссылки были разрешены. Он будет использован при повторной обработке дан¬ ного загрузочного модуля редактором связей. 31
™ МОДУЛЯ в оперативной памяти счи- Выполпение загрузочного ‘ - ние ССЫЛки в модуле разреше- таетея возможным, если вС редактор связей нашел соответ- иы, т. с. каждой ссылке вне моДУ- 1 иняем0м модуле, на которую ствующую величину в другол соответствующие адреса производится эта ссылка, и уста '„МВОЛОв должен быть пуст, ссылок. При этом словарь внешних в модуль как невыпол- В противном случае редактор связен °™е^ допускаются. Од- нимын и его загрузка в память и выполнение не д j СВЯЗац до- нако по специальному указанию программиста редактор "'.от¬ пускает загрузку и выполнение модуля с неразрешенными ними ссылками. Такой модуль может быть правильно выполнен, если заранее известно, что при выполнении управление не попадет па неразрешенную ссылку. Для этого программист при определении за¬ дания редактору связей должен определить такой модуль как_&Ы-- прлнимып г качестве одной из характер.исхик.модуля. Ответствен¬ ность за правильность выполнения такого модуля программист ое- РеТПпогряммя выборки осуществляетфоиск модуля в библиотеке по его имени,^выделение свободного участка оперативной памяти, % загрузку модуля в выделенный участок памяти и^-настройку мо¬ дуля, которая заключается в вычислении абсолютных значений адресных величин, указанных в словаре перемещений. Информа¬ ция, необходимая для выполнения указанных действий, находится в оглавлщ11и^библто с именем модуля. К этой информа- ТдшГотносится объем памяти, требуемый для модуля, характерис¬ тики модуля и т. д. исходною модуль t Г а 0 UcjcodHbiu модуль ? а ’ Транслятор |— а 01 Транслятор входные языки Организация последовательная или библиотечная Объектною . модуль А Машинною код + управ ляющие словари Организация последовательная или библиотечная Машинный код *■ уп¬ равлявшие словари Организация библиотечная Машинною код Программа настроена дл выполнения Рис. б. Разработка программ в ОС ЕС 32
После загрузки и настройки модуля можно передать управле¬ ние в точку входа и начать его выполнение. В процессе выполнения модуль может через соответствующие макрокоманды супервизора динамически вызвать другой модуль по имени. В этом случае про- граммма выборки осуществит поиск и~загрузку требуемого мо¬ дуля. На рис. 6 показан пример разработки загрузочного модуля Е, который получается путем объединения объектных модулей А и В и загрузочного модуля С. Модуль Е записывается в библиотеку. Программа выборки загружает его в оперативную память для вы¬ полнения. Для исходных, объектных и загрузочных модулей на рисунке изображены носители, на которых они могут находиться. 2.3. МЕТОДЫ КОМБИНИРОВАНИЯ ПРОГРАММ Существует несколько видов комбинирования программ в бо¬ лее крупные. Два из них — комбинирование во время редактиро¬ вания связей и комбинирование программ во время выполнения — мы уже упоминали. Возможно также комбинирование программ во время трансляции и комбинирование во время ввода задания. Рассмотрим возможности комбинирования более подробно. Комбинирование программ во время трансляции — наиболее просто й метод комбин йров а ни яГД вё“ил й" более подпрограммы, со¬ ставленные разными авторами, перфорируются и затем объединя¬ ются в один массив п е р ф о к ар т для совместной трансляции. Комбинирование программ во время редактирования связей за¬ ключается в том, что несколько объектных и загрузочных модулей могут быть объединены редактором связей в один загрузочный мо¬ дуль, готовый для выполнения. При этом не играет роли происхож¬ дение модулей. В результате создается возможность комбинировать модули, первоначально написанные на разных языках программи¬ рования, а также модули, ранее обработанные редактором связи. Задание может состоять из нескольких пунктов. Комбинирова¬ ние программ во время ввода задания заключается в том, что при выполнении пунктов одного и того же Зсццния., которое в ОС ЕС может быть только последовательным, результаты предыдущего пункта передаются слёдующёму*“пункту задания. Предположим, что задание состоит из трех пунктов: трансляции, редактирования связей и выполнения. Результатом работы первого пункта (транс¬ ляции) является объектный модуль. Он передается второму пунк¬ ту, результатом выполнения которого является загрузочный мо¬ дуль. Загрузочный модуль передается третьему пункту, где он за¬ гружается в основную память и выполняется. В общем случае пункт задания может выполнять любую работу. Пункт задания может состоять из выполнения некоторой проблемной программы пользователя или программы операционной системы. Комбинирование программ во время выполнения заключается з следующем. Каждый пункт задания связан с одной программой, которую необходимо выполнить. Выполнение этой программы рас- 3 Заказ 3414. 33
сматривается системой как выполнение задачи. В процессе вы¬ полнения каждая программа может потребовать другую програм¬ му. В этом случае выдается соответствующая макрокоманда, в ре¬ зультате чего требуемая программа загружается в основную па¬ мять и получает управление. Вторая программа может выполнять¬ ся либо в пределах старой задачи, либо как подзадача. В послед¬ нем случае выполнение подзадачи осуществляется параллельно с выполнением образовавшей ее задачи. 2.4. СТРУКТУРЫ ПРОГРАММ Программа, предназначенная для решения задачи, делится на части, или подпрограммы, исходя из удобства работы и использо¬ вания подпрограмм. Каждая из них может разрабатываться с ис¬ пользованием различных языков и средств операционной системы. После кодирования и перфорации каждая подпрограмма обраба¬ тывается транслятором, который вырабатывает объектный модуль. Объектный модуль обрабатывается редактором связей и может быть скомбинирован с другими подпрограммами. Редактор связей преобразует объектный модуль в модуль загрузки. Операционная система непосредственно участвует в подготовке программ к вы¬ полнению и оказывает существенную помощь программисту при разработке программ. Загрузочный модуль может быть выполнен как пункт задания.. Имя такого модуля указывается в описании задания на языке уп¬ равления заданиями. Указанный модуль с помощью программы выборки считывается из библиотеки, загружается в память и по¬ лучает управление как задача в системе. При образовании задачи управляющей программе известно имя первого загрузочного модуля, который должен быть выполнен. В зависимости от структуры этот модуль может быть загружен в память полностью или нет. В последнем случае во время выполне¬ ния он может вызывать другие загрузочные модули. Допускаются следующие структуры модулей: 1’простая структура, ^оверлейная структура (или структура с перекрытием),*>}динамическая после¬ довательная структура нединамическая параллельная структура. В случае простой структуры один загрузочный модуль содер¬ жит все коды, необходимые для выполнения задачи, т. е. этот мо¬ дуль не передает управление никакому другому модулю во время своего выполнения. Он загружается в память как единое целое. При этом несущественно, был ли модуль получен объединением не¬ скольких модулей редактором связей или с самого начала был единым. Любой модуль начинается макрокомандой SAVE и заверша¬ ется макрокомандой RETURN. Это связано с тем, что любой мо¬ дуль может быть выполнен самостоятельно или может использо¬ ваться как часть любой другой программы. Макрокоманда SAVE запоминает содержимое общих регистров в некоторой области па¬ мяти, называемой областью сохранения. Макрокоманда RETURN 84
восстанавливает исходное зна¬ чение регистров и передает управление в программу, ис¬ пользующую данный модуль. Этой программой может быть либо программа более старше¬ го уровня, либо управляющая программа. Программа простой струк¬ туры может содержать под¬ программы. Обращение к ним производится без участия су¬ первизора с помощью макро¬ команды CALL или с помо¬ щью команд перехода. Пример программы простой структуры показан на рис. 7. A SAVE ■ CALL В RETURN В SAVE RETURN Передачи управления — из супервизора . в супервизор Рис. 7. Пример модуля структуры простои Так как загрузочный модуль простой структуры содержит все коды, необходимые для выполнения задачи, программа, имеющая простую структуру, не использует динамически другие загрузочные модули, а, следовательно, эта программа не выдает макрокоман¬ ды LINK, LOAD, XCTL или ATTACH. Перечисленные макрокоман¬ ды требуют вмешательства управляющей программы. Однако про¬ граммы с простой структурой можно динамически вызывать из других (динамических) загрузочных модулей. Загрузочный модуль может иметь несколько точек входа, т. е. адресов, по которым можно передать управление. Во время редак¬ тирования связей для модуля может быть указано первичное имя программы и до 16 псевдонимов — альтернативных имен или то¬ чек входа. Все имена "и соответствующие точки входа .содержатся в ^огладдешии той“""библиотеки, где хранится~загрузочный модуль. Загрузочный модулГ’Шжет’дйнамически определять другие имена и другие точки входа. Однако они не сохраняются, когда основная память, используемая загрузочным модулем, освобождается. Таким образом, при выполнении загрузочного модуля простой структуры операционная система выполняет следующие действия: поиск модуля в библиотеке; выделение для него места в оперативной памяти; загрузку модуля полностью и его настройку по месту в опера¬ тивной памяти; W передачу управления в точку входа модуля; наблюдение за выполнением модуля; ь) завершение выполнения модуля (возврат управления, восста¬ новление содержимого регистров, освобождение занимаемой мо¬ дулем оперативной памяти и т. д.). Программы простой структуры очень эффективны по скорости выполнения, поскольку они не требуют дополнительной загрузки других частей программы. Может оказаться, что задача слишком велика и все ее программы не могут быть загружены в оператив- 3* 35
. , ную память одновременно. В этом Оперативная память случае ИСПОЛЬЗОВаТЬ ПрОСТУЮ структуру нельзя и может быть Сссм^пгп А Сегменте использована оверлейная струк- Сегментс тУРа- Программа делится на ло- , гические части (сегменты), неко- Рис. 8. Пример модуля оверлейной торые сегменты перекрываю г структуры друг друга в оперативной памя¬ ти в процессе выполнения. Программа оверлейной структуры находится в библиотеке в ви¬ де одного загрузочного модуля, однако можно указать сегменты, которые не должны находиться в основной памяти в одно и то же время. Одна и та же область основной памяти может быть исполь¬ зована разными сегментами. Логические сегменты загружаются в основную память тогда, когда это требуется. Оверлейная структура может быть представлена в виде дерева (рис. 8). Корнем дерева является сегмент, который всегда нахо¬ дится в основной памяти (А). Сегменты В и С вызываются в ходе выполнения программы на одно и то же место памяти. Смена сег¬ ментов, а также первый вызов сегмента производится с помощью супервизора. Если сегмент находится в памяти и к нему произво¬ дится повторное обращение, то оно выполняется без помощи су¬ первизора. Структура запланированного перекрытиа. создается ре¬ дактором связи по соответствующему_заданиюГ"' Совмещаемые сегменты называются исключаюгцими (В и С).' Обмен информацией между исключающими сегментами произво¬ дится через область памяти старшего (включающего) сегмента А. Оверлейная структура позволяет экономить память, но приво¬ дит к потере времени при смене сегментов. При выполнении модуля оверлейной структуры для примера, изображенного на рис. 8, операционная система выполняет сле¬ дующие действия: загрузку и передачу управления корневому сегменту А; наблюдение за выполнением сегмента А; загрузку и передачу управления сегменту В; наблюдение за выполнением сегмента В; перекрытие сегмента В сегментом С; передачу управления сег¬ менту С; наблюдение за выполнением сегмента С; завершение выполнения модуля. Действия системы здесь указаны более укрупненно по сравне¬ нию с приведенными ранее действиями системы в случае простой структуры. Например, загрузка сегмента здесь подразумевает по¬ иск модуля в библиотеке, выделение для него памяти, непосредст¬ венно загрузку и настройку модуля. Для сложных задач трудно планировать оверлейную структу¬ ру. Трудности возрастают, когда выбор сегментов зависит от об¬ рабатываемых данных или когда число сегментов очень велико. В таких случаях целесообразно осуществлять вызов модулей дн- 36
А 9 С Рис. 9. Использование макрокоманд LINK в динамических последовательных структурах намически, в ходе выполнения программы, т. е. использовать ди¬ намические последовательные структуры. В динамических последовательных структурах для вызова мо¬ дуля используются следующие макрокоманды супервизора: LINK, XCTL, LOAD и связанную с последней DELETE. В качестве одного из параметров этих макрокоманд указывается имя программного модуля. Пример использования макрокоманды LINK представлен па рис. 9. По макрокоманде LINK операционная система осуществля¬ ет поиск модуля, имя которого указывается в параметре ЕР = (точнее, это имя точки входа), выделяет для него память, загружа¬ ет и настраивает модуль и передает ему управление. После того как выполнение вызванного модуля завершится, управление воз¬ вращается вызвавшему модулю к команде, следующей за макро¬ командой LINK- Таким образом, модули выполняются последова¬ тельно, т. е. после выдачи макрокоманды LINK модуль не будет выполняться до тех пор, пока не выполнится вызванный модуль; который в свою очередь может вызвать другой модуль и т. д. После возврата управления в вызывающий модуль память, занятая выз¬ ванным модулем, считается свободной. Поп многократном использовании одного и того же модуля це¬ лесообразно использовать макрокоманды LOAD и DELETE. Мак¬ рокоманда LOAD производит загрузку модуля в память, выполняя те же действия, что и макрокоманда LINK, с тем лишь отличием, что она не передает управление вызванному модулю. Модуль оста¬ ется в оперативной памяти до тех пор, пока не будет выдана мак¬ рокоманда DELETE, которая освобождает память, занятую ука¬ занным модулем. Передача управления такому модулю может быть осуществлена либо с помощью команд передач управления, либо с помощью макрокоманды LINK. В последнем случае при выпол¬ нении макрокоманды LINK модуль находится в оперативной памя¬ ти, и передача управления будет производиться без обращения к библиотеке, что может дать экономию времени выполнения моду¬ ля. Пример использования макрокоманд LOAD, DELETE и LINK представлен на рис. 10. 37
Макрокоманда XCTL анало¬ гична макрокоманде LINK, за исключением того, что управле¬ ние возвращается не тому моду¬ лю, который выдал макрокоман¬ ду XCTL, а модулю более высо¬ кого уровня. Память, занятая модулем, выдавшим макрокоман¬ ду XCTL, считается свободной сразу после выдачи макрокоман¬ ды. Возможно, что вызываемый модуль будет загружен в память, ранее занимаемую вызывающим модулем. Пример использования макрокоманд XCTL и LINK пред¬ ставлен на рис. 11. В рассмотренных выше струк¬ турах п р о г р а м м ы в ы п о л н я юте я последовательно. С помощью макрокоманды ATTACH можно ор¬ ганизовать параллельное выполнение программ в мультипрограмм¬ ном режиме. В этом случае вызываемый модуль выполняется од¬ новременно с вызывающим модулем. Макрокоманда ATTACH во многом аналогична макрокоманде LINK. Разница в том, что она организует параллельное выполнение программ. В однопрограмм¬ ном режиме такое выполнение невозможно. Поэтому в данном ре¬ жиме макрокоманда ATTACH выполняется, как макрокоманда LINK. Организация параллельного выполнения программ имеет смысл только в том случае, если одна или обе программы имеют периоды ожидания каких-либо событий (например, завершения операций ввода-вывода) в процессе своего выполнения. Именно в эти перио¬ ды может выполняться вторая программа. На рис. 12 представлен пример параллельного выполнения двух программ А и В, причем В имеет период ожидания завершения операции ввода-вывода. А Рис. 10. Использование макрокоманд LOAD, DELETE и LINK в динами¬ ческих последовательных структурах А ВС Рис. 11. Использование макрокоманд XCTL и LINK в ди н а м и чес к их п осл едо в а тел ь и ы х с т р у кт у р а х 38
Пунктирной линией отмечены периоды времени, когда соответ¬ ствующая программа не выпол¬ няется. 2.5. ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ ПРОГРАММ Повторное.использование про¬ грамм возможно только в режиме мультипрограммирования с пере¬ менным .числом-3.ада.ч. В зависи¬ мости ОТ ВОЗМОЖНОСТИ ПОВТОрНОГО рис \2 Использование макрокоман- использования программ сущест- ды ATTACH в динамической парал- вуют три типа загрузочных моду- дельной структуре лей: однократно используемые, повторно используемые и реентерабельные. Тип модуля определя¬ ется вовремя редактирования_связей по указанию программиста. Это одна из характеристик модуля, формируемых редактором свя¬ зей в оглавлении библиотеки. Однопрограммный режим и мульти¬ программный режим с фиксированным числом задач рассматрива¬ ют программы как однократно используемые, если они заносятся в память не по макрокоманде LOAD. При использовании макро¬ команды LOAD в этих режимах предполагается, что программы являются реентераб^лшыш!. Однократно используемые модули изменяются во время выпол¬ нения и не могут правильно выполняться, если производится по¬ пытка их повторного выполнения. Поэтому при каждом обращении к такому модулю его необходимо вновь вызывать из библиотеки. Повторно используемые модули являются самовосстанавлива- ющимися, так что любая часть, измененная во время выполнения, восстанавливается перед повторным использованием. Следователь¬ но, одна и та же копия загрузочного модуля в оперативной памяти может использоваться повторно на протяжении выполнения зада¬ чи. Повторно используемые загрузочные модули, кроме того, мо¬ гут совместно использоваться различными задачами, при условии, что задачи были образованы в _одном и том же пункте, задания. Имеется еще одно условие использования загрузочного модуля не¬ сколькими задачами: в момент обращения к нему какой-либо за¬ дачи он не должен использоваться другой задачей. Если же это случается, то запросы задач ставятся в очередь до освобождения модуля. Реентерабельные модули разрабатываются таким образом, что¬ бы они не изменялись во время выполнения, т. е. они допускают «только чтение». Реентерабельные загрузочные модули, выбира¬ емые из системной библиотеки, могут загружаться на участки па¬ мяти, защищенные ключом защиты памяти супервизора. ATTACH ЕР-Ь ■ Ожидание juOev 1 I ииения в Ожидание ввода - вывода Опиняание. ввода -во/вода 39
Обласггк задачи А Область, задачи В о Фиксиро¬ ванная область SAVE... LINK ЕР-С RETURN. Рабочая облаете Область сохранения ~В] SAVE... LINK ЕР С . RETURN... Рабочая область Область сохранения £] SAVE... GETMA1N... return'.'.'.' Модуль А Модуль В Регистр 1 -*J Адрес рабочей Области Так как только управля¬ ющая программа работает с таким ключом защиты, реентерабельные програм¬ мы защищены от случайных изменений со стороны ка¬ кой-либо программы поль¬ зователя. Поскольку реен¬ терабельный з а г р у з о ч н ы й модуль никогда не изменя¬ ется во время выполнения, он может загружаться один раз и свободно использо¬ ваться любой задачей в си¬ стеме в любое время. На¬ пример, он может использо¬ ваться одновременно двумя (или более) задачами в мультипрограммных режи¬ мах. Прежде чем одна зада¬ ча, первой обратившаяся к нему, закончит выполнение модуля, по прерыванию мо¬ жет начаться выполнение, другой задачи, которая мо¬ жет повторно войти в этот модуль, что не помешает первой задаче в дальнейшем продолжить выполнение модуля. При¬ мер использования реентерабельного модуля приведен на рис. 13. В мультипрограммных режимах одновременное использование реентерабельного загрузочного модуля считается нормальным ре¬ жимом работы. Это позволяет экономить основную память и сокра¬ щать затраты времени на повторную загрузку. Многие программы управляющей программы составляются в форме реентерабельных модулей, и поэтому они могут совместно использоваться задачами и повторно использоваться внутри одной задачи. Реентерабельный загрузочный модуль может выполняться правильно, даже если ключ защиты в слове состояния программы во время выполнения задачи отличается от ключа памяти супервизора, которым защи¬ щен такой модуль. Содержимое областей памяти, где размещаются реентерабельные программы, никогда не меняется во время вы¬ полнения, поэтому нарушения защиты ^памяти не происходит. При написании реентерабельных программ следует пользовать¬ ся общими регистрами и регистрами с плавающей точкой для ад¬ ресации и хранения переменных, а также пользоваться времен¬ ными областями памяти, которые принадлежат задаче, использу¬ ющей эту программу, и защищены ключом защиты этой задачи. Для реентерабельной программы такие временные области памяти могут обеспечиваться обратившейся к ней программой. Рис. 13. Использование рабочих областей реентерабельной программой 40
Временные области памяти также могут быть получены дина¬ мически самой реентерабельной программой по макрокоманде GETMAIN из области памяти, принадлежащей обратившейся за¬ даче. Область памяти может быть освобождена по макрокоманде FREEMAIN или автоматически после завершения задачи. Связь реентерабельной программы с рабочей областью осуществляется через один из регистров общего назначения, который содержит ад¬ рес этой области. Если реентерабельная программа была прервана по какой-ни¬ будь причине, содержимое регистров и слово состояния программы сохраняются супервизором в области памяти (области сохране¬ ния), связанной с прерванной задачей, и восстанавливаются позд¬ нее, когда выполнение задачи необходимо продолжить. Независи¬ мо от того, как будет использоваться модуль, прерванная задача может позднее возобновить выполнение этого модуля. Супервизор сохраняет в неизменном виде рабочую память задачи и, когда по¬ требуется, восстанавливает содержимое сохраненных регистров и слово состояния программы. Для реентерабельного модуля безраз¬ лично, какая задача к нему обратилась в данный момент. У каж¬ дой задачи имеется своя собственная временная область памяти, выделенная для работы этого модуля. Пример использования рабочих областей реентерабельной про¬ граммой С представлен на рис. 13. Две программы А и В содер¬ жат обращение по макрокоманде LINK к реентерабельной про¬ грамме С, размещенной в области супервизора. Предположим, пер¬ вой обратилась программа А. При выполнении С после первого обращения с помощью макрокоманды GETMAIN выдается запрос на некоторый объем оперативной памяти для рабочей зоны. Эта память выделяется в области задачи А. Связь программы С с ра¬ бочей областью осуществляется через регистр 1 (или через любой общий регистр), который содержит адрес рабочей зоны. Пусть в процессе выполнения программы С от первого обращения произо¬ шло прерывание и начала выполняться программа В. При обработ¬ ке прерывания содержимое общих регистров и слово состояния про¬ граммы запоминаются в области сохранения задачи А. Затем программа В осуществляет второе обращение к програм¬ ме С. В результате второго обращения будет повторно получена ра¬ бочая область, но уже в области памяти задачи В. Регистр 1 бу¬ дет содержать адрес этой области. Когда управление вновь вернет¬ ся задаче А, из области сохранения А будет восстановлено содер¬ жимое общих регистров и слово состояния программы. В резуль¬ тате регистр 1 будет содержать адрес рабочей зоны задачи А, а выполнение будет продолжено с прерванной команды программы С от первого обращения. При этом не играет роли, завершилось ли второе обращение от программы В или нет. 2.6. МУЛЬТИПРОГРАММИРОВАНИЕ Под термином «мультипрограммирование» понимается исполь¬ зование вычислительной системы для выполнения двух или более 41
программ одновременно. Это поз¬ воляет более эффективно исполь¬ зовать ресурсы и повысить ее про¬ пускную способность. Централь¬ ный процессор в каждый момент времени выполняет команды ка¬ кой-либо одной программы. Ос¬ тальные программы находятся в оперативной памяти в состоянии готовности или ожидания завер¬ шения какого-либо события (за¬ вершения операции ввода или вы¬ вода, истечения заданного вре¬ менного интервала, завершения выполнения какой-либо про¬ граммы и т. д.). Оперативная память вычислительной машины используется центральным процессором и каналами. Так как блок памяти име¬ ет один вход, доступ к нему процессора и любого из каналов осу¬ ществляется строго последовательно (рис. 14). Программы, одновременно претендующие на использование центрального процессора, в мультипрограммном режиме упорядо¬ чиваются по приоритетам. В случае конфликтов управление полу- а) Программа f Программа 2 Го Общее бремя дополнения программ Т0= Рис. 14. Связь центрального процес¬ сора и внешних устройств с опера¬ тивной памятью б) Программа / Программа 2 I I I I I I I I И/, -с- Обсцее бремя вьшолнения программ Tm=t, Рис. 15. Графики активного состояния программ в однопро¬ граммном и мультипрограммном режимах: а — однопрограмм¬ ный режим; б — мультипрограммный режим 42
чает программа с наивысшим приоритетом. Ома переводится в ак¬ тивное состояние. Остальные конкурирующие программы, нахо¬ дящиеся в состоянии готовности, получают управление, если про¬ граммы с более высокими приоритетами окажутся в состоянии ожи¬ дания. На рис. 15 приведен пример выполнения двух программ в одно¬ программном и мультипрограммном режимах. Программа 1 имеет время выполнения t\, причем значительную часть этого времени со¬ ставляют периоды ожидания. Программа 2 имеет время выполне¬ ния причем периоды ожидания составляют незначительную часть этого времени. В случае одиопрограммного режима программы выполняются строго последовательно, и общее время выполнения обеих про¬ грамм равно сумме времени выполнения их по отдельности. В муль¬ типрограммном режиме при условии, что программа 1 имеет более высокий приоритет, программа 2 выполняется в периоды ожидания программы 1. Поэтому общее время выполнения обеих программ будет несколько больше времени выполнения первой программы (за счет работы управляющей программы). Несмотря на совмеще¬ ние выполнения, имеют место периоды ожидания w\ и ш2, когда обе программы находятся в состоянии ожидания. В течение этих периодов центральный процессор будет простаивать. Однако вре¬ мя простоя в этом случае меньше времени простоя в однопрограмм¬ ном режиме. X)cno.BO]Ll^ является совмещение рабо¬ ты центрального процессора с операциями ввода-вывода' Такое совмещение возможно в связи с тем, что центральный процессор не занимается выполнением операций ввода-вывода, а только иниции¬ рует их. После этого операции ввода-вывода выполняются канала¬ ми по самостоятельным программам. Канал представляет собой специализированный процессор_ввода-вывода, имеющий свою сис¬ тему команд и работающий параХтёльно с другими каналами и с центральным процессором. 2.7. ЗАДАНИЕ, ПУНКТ ЗАДАНИЯ, ЗАДАЧА Основной единицей работы, выполняемой вычислительной сис¬ темой, является задание. Оно заключается в выполнении вычисле¬ ний в некотором конкретном- применении. Задание включает выпол¬ нение одной или нескольких связанных программ. Примерами за¬ даний могут быть: расчет и вывод ведомости заработной платы; ввод, сортировка и вывод набора данных; трансляция, редактиро¬ вание и выполнение модуля и т. д. Задания никак не связаны друг с другом и не могут оказывать влияния друг на друга, поэтому их можно выполнять одновременно в режиме мультипрограммиро¬ вания. Каждое задание должно быть описано на языке управления за¬ даниями. Ввод заданий осуществляется через одно или несколько устройств системного ввода. Последовательность заданий, посту¬ 43
пающая в систему, называется входным потоком заданий. Он фор¬ мируется случайным образом по мере поступления заданий в вы¬ числительный центр на обработку. Задание может состоять из одной или нескольких логических частей, выполняемых последовательно. Такие части называются пунктами (шагами) задания. Примерами пунктов задания могут быть: пункт, выполняющий трансляцию исходного модуля; пункт, выполняющий редактирование полученного после трансляции объ¬ ектного модуля; пункт, осуществляющий выполнение полученного после редактирования загрузочного модуля. Приведенные выше пункты в рамках одного задания должны выполняться следд.аа.1:е.дьщ)-, так как они передают данные друг другу. С каждым пунктом задания связано выполнение некоторой про¬ граммы. Она может быть единственной программой в рамках пунк¬ та задания либо может динамически вызывать другие программы в процессе своего выполнения. Имя этой программы указывается при описании пункта задания на языке управления заданиями. Выполнение пункта задания влияет па выполнение последующих пунктов задания. Предыдущие пункты могут передавать наборы данных последующим пунктам задания. Пользователь сообщает системе о своем задании и пунктах за¬ дания на языке управления заданиями. На этом языке система получает информацию о задании и о программе, характеристики данных, требования к устройствам. Ииформ£ци^сообщается систе¬ ме при выполнении программы, а не во время ее трансляции или а ссе м б л и ров а н и я. Язык управления заданиями состоит из ряда управляющих опе¬ раторов. Основными из них являются следующие три: оператор JOB (оператор задания); оператор ЕХЕС (оператор пункта задания); оператор DD (оператор описания данных). Первым оператором каждого задания является оператор JOB. В нем указываются имя задания, учетный номер, фамилия про¬ граммиста. Кроме того, может быть указана информация, относя¬ щаяся ко всему заданию (приоритет, объем требуемой оператив¬ ной памяти и т. д.). Каждый пункт задания начинается с оператора ЕХЕС. Этот оператор содержит указание программы, которую необходимо вы¬ полнить, а также информацию, относящуюся только к пункту за¬ дания (приоритет, объем требуемой оперативной памяти и т. д.). В пункте задания необходимо определить все наборы данных (входные, выходные и промежуточные), с которыми работает про¬ грамма пункта задания. Это делается с помощью операторов DD. Каждый набор данных обычно описывается одним оператором DD. В нем указываются имя набора данных, его характеристики, уст¬ ройство, на котором расположен набор данных, состояние набора данных, действия, которые необходимо выполнить с набором дан¬ ных в. конце выполнения пункта задания. Кроме того, сам набор данных может непосредственно следовать за оператором DD. Бла¬ 44
годаря тому, что информация о наборе данных сообщается в опе¬ раторе DD, программы могут не зависеть от характера данных, ко¬ торые они обрабатывают. Задания выполняются по пунктам. При инициировании выпол¬ нения для каждого пункта создается задача (задача пункта зада¬ ния), которая является основной единицей работы в процессе не¬ посредственного выполнения пункта задания. В рамках задачи пункта задания выполняется программа, указанная в операторе ЕХЕС. Задача может образовывать подзадачи с помощью макро¬ команды ATTACH. Подзадача выполняется параллельно с поро¬ дившей ее задачей и другими подзадачами. Подзадача может в свою очередь образовывать свои подзадачи и т. д. Таким образом, с помощью подзадач можно распараллеливать выполнение про¬ грамм, повышая уровень мультипрограммирования. Образование подзадач возможно только в мультипрограммных режимах работы операционной системы. Если в процессе выпол¬ нения пункта задания подзадачи не образуются, то все программы пункта будут выполняться последовательно. В одиопрограммном режиме допускается употребление макрокоманды ATTACH. Одна¬ ко в этом случае подзадача не образуется. 2.8. ОБРАБОТКА ПОТОКОВ ЗАДАНИЙ Входной поток содержит описания заданий на языке управле¬ ния заданиями. Это описание может содержать входные наборы данных. Операционная система выполняет автоматическую обра¬ ботку непрерывного потока заданий, что уменьшает необходимость ручного вмешательства оператора в процесс обработки. Прохожде¬ ние потоков заданий через систему в процессе мультипрограммной обработки показано на рис. 16. Входной поток заданий вводится с устройства системного вво¬ да (устройство ввода с перфокарт, накопитель на магнитных лен¬ тах или магнитных дисках). Ввод входного потока осуществляет программа системного ввода. В ее функции^входипкчитываиие опе¬ раторов входного потока заданий, ихг/апализ информирование уп¬ равляющих таблиц, характеризующих каждое задание, пункты за¬ дания и наборы данных. Затем программа системного ввода помещает задание (в виде управляющих таблиц) в одну из вход¬ ных очередей. Входные очереди размещаются на устройстве прямо¬ го доступа в наборе данных SYS1.SYSJOBQE. Допускается до 15 входных очередей, каждая из которых соответствует одному классу заданий. Класс задания обозначается латинскими буквами от А до О и указывается в операторе JOB параметром: CLASS = обозна- чение класса. Так, на рис. 16 указаны три входные очереди для классов A, D и F. Входные наборы данных, введенные вместе с потоком заданий с устройства системного ввода, размещаются на томах прямого до¬ ступа. Например, если задание вводится с перфокарт, в процессе 45
f Is P 0) O Qj rR О i ll IIS P Cj Л 111 III III Ilf Sps III l| Cl c\°Q S3S Q. > о 46 Рис. 16. Обработка потока заданий в мультипрограммных режимах
выполнения оно будет считывать данные не с перфокарт, а с тома прямого доступа, что сокращает время выполнения программы. Место задания в очереди определяется значением приоритета задания, который обозначается числом от 0 до 13. Приоритет за¬ дания указывается также в операторе JOB параметром: PRTY = значение приоритета. Чем, выше значение приоритета, тем ближе к выходу помещается задание. Указанное значение приоритета оп¬ ределяет приоритет предварительного планирования заданий для выполнения. Задания, помещенные во входные очереди, еще не вы¬ полняются. Априорно значения классов и приоритетов заданий ни¬ как не связаны с характером самого задания. Эти значения указы¬ ваются в задании программистами. Классификация, заданий и на¬ значение приоритетов производится администрацией вычислитель¬ ного центра, которая сообщает программистам классы и приорите¬ ты заданий. Аппарат классов и приоритетов заданий является универсаль¬ ным системным средством, основное назначение которого — макси¬ мальная загрузка ресурсов системы с целью повышения пропуск¬ ной способности вычислительной установки. Например, пусть в по¬ токе заданий есть такие задания, которые требуют большого коли¬ чества оперативной памяти, но мало используют центральный про¬ цессор и другие ресурсы системы. Нецелесообразно выполнять та¬ кие задания одновременно, так как небольшое количество таких заданий займет всю оперативную память, а другие ресурсы не бу¬ дут использованы. Их лучше выполнять последовательно, присвоив им один и тот же класс и определив порядок их прохождения зна¬ чением приоритета. Одновременно с выполнением такого задания следует выполнять задания других типов (назначив для них другое значение класса), например, такие, которые требуют меньшего объема оперативной памяти, но более интенсивно используют ос¬ тальные ресурсы системы. В свою очередь и эти задания могут быть разбиты на классы но какому-либо принципу (например, по степе¬ ни интенсивности использования центрального процессора и др.). При пакетном режиме обработки значение приоритета задания практически не влияет на время получения результатов решения программистом, поскольку вычислительный процесс организуется таким образом, что прием заданий на обработку, формирование очередных порций входного потока, установка на системное уст¬ ройство ввода и выдача результатов программистам производятся по расписанию и приурочиваются к определенному времени. Про¬ граммист, нарушивший порядок и присвоивший своему заданию завышенный приоритет, получит результаты вместе с выдачей ре¬ зультатов других заданий. Значение приоритета может быть использовано для повышения количества заданий, выполняемых в единицу времени. Например, «короткие» задания, не требующие большого количества машинно¬ го времени, могут иметь более высокий приоритет по сравнению с заданиями, требующими большого счета. В этом случае «короткие» 47
задания не будут задерживаться во входных очередях и програм¬ мисты будут быстро получать результаты. Так как «короткие» за¬ дания не требуют большого количества машинного времени, на вы¬ полнен пн «длинных» заданий это мало отразится. Тем не менее возможны ошибки, а также сознательные откло¬ нения от правил при назначении значений классов и приоритетов заданий, которые могут нарушить установленный в вычислитель¬ ном центре порядок прохождения заданий. Для контроля поступа¬ ющих на обработку заданий может быть использована система уче¬ та, состоящая из учетной информации, указываемой в операторах JOB и ЕХЕС, и программ учета, обрабатывающих учетную инфор¬ мацию и ряд других параметров. Система учета строится в зависимости от особенностей исполь¬ зования вычислительной установки, в соответствии с которыми сис¬ темные программисты вычислительного центра разрабатывают программы учета. Каких-либо стандартных программ учета опера¬ ционная система не содержит. Задания, находящиеся во входных очередях, выбираются для выполнения специальной управляющей программой-инициатором. Инициатор, как и. программа систе^шо^ входит. .д состав ■ft л a 11 иррвщим3^5^Й^й • В функции инициатора входят? )|выбор оче¬ рёдного задания из очереди^распределение для него необходимых устройств взода-выводаД/загрузка программы, указанной в пункте задания, и передача ей управления. После этого инициатор освобож¬ дает оперативную память. Так как загрузка и передача управле¬ ния осуществляются посредством программ супервизора, находя¬ щихся в ядре, то обычно загрузка программы, указанной в операторе ЕХЕС пункта задания, производится на то место опера¬ тивной памяти, которое занимал инициатор, поскольку он уже не нужен. Кроме перечисленных функций инициатор вызывается после за¬ вершения задания для'ЙЬсвобождения устройств,^ ы полнен и я пред¬ писанных действий с наборами данных,.^освобождения оперативной памяти. Вслед за этим он выполняет инициирование следующего задания из очереди. В системе могут действовать несколько инициаторов, являю¬ щихся копиями одной и той же программы. Каждый инициатор приписан одному или нескольким классам. Это означает, что он может инициировать задания из одной или нескольких очередей. Если инициатор приписан нескольким классам, то сначала он об¬ служивает задания только из очереди первого из указанных клас¬ сов. В том случае, если очередь окажется пустой, этот инициатор будет обслуживать очередь второго класса и т. д. К одной входной очереди может быть приписано несколько ини¬ циаторов. Задания из одной и той же очереди могут выполняться одновременно, если эту очередь обслуживают несколько инициато¬ ров. Если очередь обслуживается одним инициатором, то задания из этой очереди будут выполняться последовательно друг за дру¬ 43
гом, но одновременно с выполнением заданий из других очередей. Отметим, что если инициатор приписан к какой-либо очереди, то это не значит, что он ее обслуживает. Класс данной очереди может быть для инициатора вторым, третьим или четрертым и т. д. Тогда в процессе обслуживания очередей предыдущих классов инициатор данную очередь не обслуживает. В течение интервала времени между инициированием и завер¬ шением задание выполняется в оперативной памяти под управ¬ лением программ супервизора, большая часть которых находится в ядре. Эти программы обрабатывают прерывания, возникающие в процессе работы системы; организуют мультипрограммную рабо¬ ту; выполняют системные запросы программ, такие, как выделение оперативной памяти, динамическая загрузка программ, распарал¬ леливание выполнения программы и т. п. Результаты работы программы пользователя могут быть выве¬ дены на системное устройство вывода. В процессе выполнения программы пользователя выходные наборы данных записываются на том прямого доступа и образуют выходные очереди. Каждая выходная очередь соответствует одному выходному классу зада¬ ния. Допускается до 36 выходных классов, которые обозначаются латинскими буквами от А до Z и цифрами от 0 до 9. Выходной класс указывается в операторе JOB параметром: MSGLASS = обозначение выходного класса, а также в операторе DD парамет¬ ром: ЗУЗОиТ^обозначемие выходного класса.^Первый параметр определяет выходной класс д л я#*соо_б ще н и й с ист ем ы, предназначен¬ ных для программистаЦвторой— выходной класс наборов данных, вырабатываемых в программе для вывода на устройство^систем- ного вывода, АЪ сто вы ход и ого набора данных в очереди определяется пара¬ метром PRTY. При завершении выполнения задания заканчивается формирование выходных наборов данных, и они могут выводиться на системные устройства вывода. Одно задание может создавать несколько выходных наборов данных с разными классами. Это может быть, в частности, ис¬ пользовано для направления различных наборов данных на раз¬ личные устройства. Например, системные наборы данных могут быть выведены на одно устройство, а выходные наборы данных — на другое. Вывод выходных наборов данных производится программой сис¬ темного вывода, которая входит в состав планировщика заданий. Одновременно могут работать несколько программ системного вы¬ вода, каждая из которых связана со своим устройством системного вывода (АЦПУ, выходной перфоратор, накопители на магнитной ленте, магнитных дисках). Одна программа системного вывода мо¬ жет быть приписана к нескольким выходным очередям. При этом используется то же самое соглашение, что и для инициаторов: прежде всего обслуживается та очередь, класс которой указан пер¬ вым. Если эта очередь пуста, обслуживается очередь, класс кото¬ рой указан вторым и т. д. 4. 3 а к з i 3414. 49
Преимущество использования программы системного вывода по сравнению с непосредственным выводом данных на устройство в процессе выполнения программы заключается в том, что програм¬ ма системного вывода работает практически в темпе работы уст¬ ройства, а не в темпе выполнения программы, вырабатывающей выходной набор данных, который может быть медленным и содер¬ жать паузы. Кроме того, программы системного вывода выполня¬ ются одновременно с выполнением следующих заданий, что повы¬ шает уровень мультипрограммирования. Кроме программ системного вывода, могут быть использованы программы прямого системного вывода, которые производят вывод данных на устройства системного вывода непосредственно в про¬ цессе выполнения программ пользователей, без предварительного запоминания на томах прямого доступа. Кроме системных программ ввода и вывода, могут быть ис¬ пользованы обычные методы вывода, ввода и модификации набо¬ ров данных на любом устройстве ввода-вывода, обеспечиваемом операционной системой. В этом случае не должны использоваться устройства системного ввода и системного вывода. v Таким образом, мы рассмотрели четыре программы, входяшше в исостав планировщика заданий: ^программу системного ввода^ро- грамму системного вывода^инициатор и'^программу прямого' сис¬ темного вывода. Первые три программы работают в самостоятель¬ ных разделах памяти. Последняя программа выполняется в раз¬ деле памяти программы пользователя. Перечисленные системные программы, а также программы, указанные в пунктах различных заданий, могут выполняться одновременно в мультипрограммном режиме. Допускается одновременное выполнение до 15 различных зада¬ ний. Это связано с тем, что память задания необходимо защищать ключом защиты. Существует всего 16 ключей защиты. Один ключ отводится для защиты ядра и некоторых системных программ. Остальные ключи распределяются между заданиями. Программа пункта задания может образовывать подзадачи, выполняемые в мультипрограммном режиме одновременно с породившей их зада¬ чей и друг с другом, с задачами и подзадачами других заданий, а также с системными задачами. В режиме мультипрограммирова¬ ния с фиксированным числом задач в рамках одного пункта зада¬ ния может выполняться максимально 250 задач (задачи и под¬ задачи эквивалентны друг другу). В режиме мультипрограммиро¬ вания с переменным числом задач такого ограничения не суще¬ ствует. Программы системного ввода и вывода, а также инициаторы запускаются командой START. Эта команда выдается оператором. После процедуры начальной загрузки эти команды могут выда¬ ваться автоматически системой, если такая возможность была за¬ казана при генерации операционной системы и не была отменена оператором в процессе начальной загрузки. В командах START для программ системного ввода и вывода указываются адрес сис¬ 50
темного устройства, выходные классы и другая информация. В команде START для инициатора указываются классы заданрй, к которым приписан инициатор. Программа прямого системного вы¬ вода также запускается командой START, в которой указываются классы заданий, выходные классы и адрес устройства системного вывода. Оперативная намято Устройства вотолнение за¬ дания (пункта задания) Рис. 17. Обработка потока заданий в однопрограммном режиме На рис. 17 показана обработка потока заданий в однопрограмм¬ ном режиме. Как видно из рисунка, основные отличия от обработки в мультипрограммных режимах заключаются в следующем. Во-первых, отсутствуют входные и выходные очереди. В связи с этим программа системного ввода вводит входной поток с уст¬ ройства по пунктам. После ввода очередного пункта он запуска¬ ется инициатором и выполняется под управлением программ су¬ первизора. После завершения выполнения пункта программа сис¬ темного вывода производит вывод результатов. Во-вторых, отсутствует мультипрограммирование. Все програм¬ мы выполняются строго последовательно. В-третьих, допускается только один входной поток, одно устрой¬ ство системного ввода и одно устройство системного вывода. Все ресурсы вычислительной системы принадлежат той единственной программе, которая выполняется. Поэтому распределение ресурсов практически отсутствует. 2.9. РЕЖИМЫ РАБОТЫ УПРАВЛЯЮЩЕЙ ПРОГРАММЫ Все режимы работы управляющей программы программно-сов¬ местимы. Это значит, что требования на выполнение всех заданий под управлением программ супервизора одинаковы. Тем не менее способ управления задачами допускает значительные вариации. Для вычислительной установки наиболее важным является выбор между управляющей программой, рассчитанной на однопрограмм¬ ный режим, и управляющей программой, рассчитанной на муль¬ типрограммный режим с фиксированным или переменным числом задач. 51:
Поскольку оба режима касаются управления задачами, про¬ грамма, написанная для однопрограммного режима и удовлетво¬ ряющая системным соглашениям, будет работать и в мультипро¬ граммном режиме. В однопрограммном режиме программы планировщика зада¬ ний являются задачами. Каждый пункт задания выполняется как часть этой задачи, и, поскольку она является единственной зада¬ чей в системе, она может иметь все наличные ресурсы. Программа пункта задания может иметь любую программную структуру из тех, которые были ранее упомянуты, за исключением динамиче¬ ской структуры с несколькими задачами в одном пункте задания. Управляющая программа сначала размещает загрузочный мо¬ дуль, который указан в операторе ЕХЕС. Для этого выделяется место в основной памяти в соответствии с информацией, находя¬ щейся в оглавлении библиотеки и относящейся к данному загру¬ зочному модулю. Затем загружается модуль в основную память. Когда загрузочный модуль появляется в основной памяти, управ¬ ление передается в точку входа. Если выбранный загрузочный модуль является первой програм¬ мой последовательной динамической структуры, последующие за¬ грузочные модули выбираются так же, как и первый, за одним исключением: если требуемый модуль является повторно исполь¬ зуемым или реентерабельным и его копия уже находится в основ¬ ной памяти, то она может использоваться для удовлетворения нового запроса. Когда пункт задания завершается, супервизор ин¬ формирует об этом планировщик заданий независимо от того, бы¬ ло ли окончание нормальным или аварийным. Минимальный объем оперативной памяти для работы в однопрограммном режиме со¬ ставляет 64К. В мультипрограммном режиме программы управления задача¬ ми должны распределять ресурсы между несколькими одновремен¬ но выполненными задачами, следить за использованием ресурсов и после окончания задачи освобождать все ресурсы. Если несколь¬ ко задач дожидаются одного и того же устройства, управляющая программа организует очередь запросов. Делая четкое различие между задачами, супервизор позволяет задачам разделять ресур¬ сы, если это возможно. Мультипрограммный режим сокращает общее время работы системы, даже если выполняются работы, состоящие из одной за¬ дачи. Сокращение времени получается за счет того, что управляю¬ щая программа сама работает в мульхшф014ШШндм.ДШШу1е. При¬ менение динамических структур для решения сложных задач позволяет различным сегментам программы совместно использо¬ вать системные ресурсы и таким образом оптимизировать их ис¬ пользование. Мультипрограммный режим позволяет параллельно выполнять несколько пунктов, принадлежащих различным зада¬ ниям. Выполняемый пункт может быть связан с последующими пунк¬ тами того же самого задания через коды завершения, а также мо¬ 52
жет передавать наборы данных. Пункт задания не может переда¬ вать данные последующему пункту путем сохранения их в разделе оперативной памяти. Задание по определению не зависит от других заданий. Это свойство очень существенно в условиях мультипрограммирования, когда задания выполняются по принципу приоритетов без попыток синхронизировать выполнение одного задания с другими. Пункт задания не может общаться непосредственно с параллельно вы¬ полняемым пунктом в другом разделе. Он не может вызвать обра¬ зование нового раздела. Команды, задаваемые оператором, управ¬ ляют числом находящихся в использовании разделов. Как уже было упомянуто, во время генерации системы можно выбрать средство квантования времени, а также модифицировать его во время инициализации системы. Квантование задач предот¬ вращает монопольное использование центрального процессора од¬ ной задачей. Эта возможность особенно полезна, когда имеется одна или несколько задач (или разделов) разговорного типа, где пользователь общается с программой через терминал. Ниже рассматриваются два существующих в операционной си¬ стеме режима мультипрограммирования — с фиксированным и пе¬ ременным числом задач. В режиме мультипрограммирования с фиксированным числом задач память делится на две основные области: системную и дина¬ мическую. Системная область содержит ядро, резидентные про¬ граммы и таблицы, области для транзитных программ супервизора и системных очередей. Динамическая область подразделяется на 52 дискретные области, называемые разделами. Количество раз¬ делов в динамической области и их размер задаются во время ге¬ нерации системы или во время начальной загрузки. Оператор мо¬ жет переопределить их в любое время. Из общего количества 15 разделов максимально могут использоваться для выполнения заданий. Программы системного ввода и системного вывода для своей работы используют отдельные разделы. В каждый момент време¬ ни в системе может работать не более 3 программ системного вво¬ да и не более 36 программ системного вывода. Программы прямо¬ го системного вывода размещаются в разделах заданий. Один такой раздел может содержать несколько программ прямого си¬ стемного вывода. Существуют две разновидности мультипрограммного режима с фиксированным числом задач: без подзадач и с подзадача?**!. В режиме без подзадач для каждого пункта задания образуется только одна задача. Внутри нее процесс вычисления не может быть распараллелен, т. е. все программы выполняются последовательно.. Задачи разных разделов выполняются одновременно в режиме мультипрограммирования. В режиме с подзадачами допускается распараллеливание вычислений за счет того, что любая задача (подзадача) может породить одну или несколько подзадач, кото¬ рые выполняются одновременно друг с другом и с породившей их
задачей, а также с задачами других разделов. Общее число всех одновременно выполняемых задач и подзадач не должно превы¬ шать 255. В это число входят задачи и подзадачи пользователей, а также задачи и подзадачи системы. Максимальное число задач и подзадач, выполняемых в рамках одного раздела, составляет 250 (5 задач используются управляющей программой). Еще одно различие между режимом без подзадач и режимом с подзадачами заключается в способе определения приоритетов задач. В режиме без подзадач приоритет присваивается разделам памяти. Он не выражается явным числом, но считается, что при¬ оритет раздела тем выше, чем старше начальный адрес памяти, в которой расположен раздел. В режиме с подзадачами приоритет присваивается каждой задаче и подзадаче и изменяется в диапа¬ зоне от 0 до 255. Приоритет задачи пункта задания определяется приоритетом раздела памяти. Приоритеты подзадач можно изме¬ нить относительно порождающей задачи в момент их образования в макрокоманде ATTACH. Кроме того, приоритеты задач и подза¬ дач могут динамически изменяться в процессе работы макрокоман¬ дой CHAP. Возможность образования подзадач в режиме мультипрограм¬ мирования с фиксированным числом задач задается при генерации операционной системы. Пользователь может направлять задания в определенный раз¬ дел или в группу разделов с помощью параметра CLASS в опера¬ торе JOB. Во время генерации системы каждому разделу может быть присвоено до трех классов заданий (в диапазоне А — О). Классы заданий могут модифицироваться при инициализации си¬ стемы или по команде DEFINE. Параметр CLASS в операторе JOB дает возможность пользователю определять тип задания, ко¬ торое может обрабатываться в каждом разделе. Оператор может изменить класс заданий, количество и размер некоторых или всех разделов системы в любое время после начальной загрузки. Если используется режим без подзадач, приоритет разделов возрастает с возрастанием адресов памяти. Задания распределя¬ ются по разделам с помощью параметра CLASS в операторе JOB. Каждое из 15 возможных заданий защищается от влияния со сто¬ роны других заданий, а системные области защищены от всех проблемных программ. Защита реализуется с помощью ключей защиты памяти. Все разделы независимы по отношению к планированию и ини¬ циализации заданий. Задания планируются для первого свобод¬ ного раздела проблемных программ, обслуживающего класс за¬ даний, определенный оператором JOB. Затем продолжается вы¬ полнение задач в системе. Задача с более низким приоритетом получает управление, когда другая задача с более высоким приори¬ тетом находится в режиме ожидания некоторого события, напри¬ мер завершения ввода-вывода. Когда задача с высоким приоритетом готова возобновить ра¬ боту, выполнение задачи низкого приоритета приостанавливается 54
и управление возвращается к задаче более высокого приоритета до окончания ее решения. Переключение управления от одной за¬ дачи к другой называется переключением задач. В режиме мультипрограммирования с подзадачами каждый пункт задания может образовать одну или несколько подзадач с помощью макрокоманды ATTACH. С помощью параметров этой макрокоманды подзадачам можно установить приоритеты. Кроме того, допускается изменение приоритета подзадачи с помощью ма¬ крокоманды CHAP. Пункт задания может быть завершен в том случае, если все задачи этого пункта будут завершены. Если предусмотрена возможность квантования времени, необ¬ ходимо иметь в виду следующее. В режиме без подзадач квантую¬ щаяся группа определяется при генерации как группа смежных разделов. Все задачи, запланированные для.этих разделов, будут участвовать в квантовании. Поскольку каждый раздел в системе присваивается одному классу задания и каждое задание будет запланировано в раздел в соответствии с классом, определенным параметром CLASS в операторе JOB, присваивание класса зада¬ ния должно производиться очень осторожно. Если необходимо, чтобы задание было квантующимся, следует направить его в раз¬ дел (с помощью параметра CLASS), отведенный квантующейся группе. В режиме с подзадачами квантующаяся группа определяется при генерации как группа задач в заданном диапазоне изменения приоритета. Поэтому любая задача, текущий приоритет которой попадает в диапазон приоритетов, присвоенный квантующейся группе, может считаться членом этой группы. Задача может иметь диспетчерский приоритет, равный приоритету квантующейся груп¬ пы, в результате действия параметра, определяющего приоритет в операторе JOB или в макрокомандах ATTACH или CHAP. По¬ этому, если подзадаче присваивается приоритет, совпадающий е приоритетом квантующейся группы, эта новая задача включается в группу независимо от того, была ли породившая ее задача кван¬ тующейся. При мультипрограммном режиме с фиксированным числом за¬ дач необходимо уделять внимание способу, которым пользователь определяет различные типы заданий и направляет эти задания в соответствующие разделы. Рассмотрим несколько простых случаев: задания, существенно использующие центральный процессор, могут быть направлены в разделы низкого приоритета так, чтобы они не препятствовали вы¬ полнению заданий, которые мало используют центральный про¬ цессор. Телекоммуникационные задания могут быть направлены в разделы высокого приоритета, так чтобы время ответа системы пользователю у терминала было минимальным. Несмотря на то, что мультипрограммирование с переменным числом задач предоставляет те же преимущества, что и с фиксиро¬ ванным числом задач, имеются существенные различия между 55
этими режимами, особенно в использовании памяти и дополни¬ тельных возможностей, доступных только в режиме с переменным числом задач. В режиме с переменным числом задач, так же как и с фикси¬ рованным, определенное количество основной памяти резервиру¬ ется для управляющей программы (системная область). Осталь¬ ная память (динамическая область) доступна программам пользо¬ вателей. Динамическая память распределяется между разделами динамически в процессе выполнения заданий, что является сущест¬ венным отличием от режима с фиксированным числом задач. В режиме с переменным числом задач производится чтение од¬ ного или нескольких входных потоков и осуществляется планиро¬ вание заданий (классифицируемых по входным очередям) в соответствии с приоритетами. Каждое вызванное для выполнения задание оперирует внутри зоны динамически выделяемых разде¬ лов. До 15 независимых заданий могут выполняться одновременно. Пункты одного и того же задания выполняются последовательно, поскольку один пункт может зависеть от успешного завершения другого пункта. Пункт задания (сам по себе считающийся зада¬ чей) может образовать одну или несколько подзадач, используя макрокоманду ATTACH. Задача, соответствующая пункту задания, и ее подзадачи вы¬ полняются независимо внутри одного и того же раздела и исполь¬ зуют один и тот же ключ защиты памяти. Для завершения пункта необходимо завершение всех его задач. Любая задача этого режи¬ ма, для которой значение текущего приоритета равно значению приоритета квантования, становится членом квантующейся группы. Группы квантования для режима с переменным числом задач задаются при генерации указанием одного или нескольких значе¬ ний приоритета. Все задачи с указанным значением приоритета будут выполняться в режиме квантования. Задача может иметь текущий приоритет, равный приоритету квантующейся группы, в результате определения соответствующего приоритетного парамет¬ ра в операторах JOB и ЕХЕС, или параметров в макрокоманде ATTACH, или в макрокоманде изменения* приоритета CHAP. Та¬ ким образом, если при использовании макрокоманды ATTACH подзадача получает значение приоритета, соответствующее группе квантования, новая задача включается в группу квантования не¬ зависимо от того, принадлежала ли к ней породившая ее задача. Размер раздела памяти определяется параметром REGION опе¬ раторов JOB или ЕХЕС. Если размер определяется в операторе JOB, то каждый пункт этого задания получит зону указанного раз¬ мера независимо от размера, указанного в операторах ЕХЕС. Ес¬ ли параметр REGION опущен в операторе JOB, то в каждом опе¬ раторе ЕХЕС можно указать требуемый размер раздела для дан¬ ного пункта. Если параметра REGION нет ни в операторе JOB, ни в операторе ЕХЕС, то заданию выделяется раздел стандартного размера, определенного в процедуре программы системного ввода.. После определения раздела для пункта задания никакая допол¬ 56
нительная память не может быть выделена этому пункту, если только не предусмотрено средство свертывания заданий. Средство свертывания заданий является дополнительным (не¬ обязательным) средством, доступным только в режиме мультипро¬ граммирования с переменным числом задач. Это средство позво¬ ляет осуществлять временное динамическое распространение конкретного задания за пределы первоначально отведенного ему раздела. Когда у некоторого задания появляется потребность в по¬ лучении дополнительного объема памяти, это средство пытается предоставить память из нераспределенного участка. Если такого нераспределенного участка памяти нет, производится свертывание задания, которое заключается в том, что это задание переводится во вспомогательную память, так что его раздел может использо¬ ваться первым заданием. Когда первое задание освобождает эту дополнительную память, она возвращается к тому источнику, от¬ куда была получена, т. е. либо в область нераспределенной памя¬ ти, либо заданию, переведенному во вспомогательную память. Для этого свернутое задание вновь переводится в основную память (развертывается) и может выполняться дальше. Свертывать мож¬ но не каждое задание, а лишь то, для которого дано на это разре¬ шение в параметре ROLL операторов JOB или ЕХЕС. В этом же параметре указывается, может ли задание воспользоваться этим средством.
3. ЯЗЫК УПРАВЛЕНИЯ ЗАДАНИЯМИ 3.1. ОБЩИЕ СВЕДЕНИЯ Задание — основная независимая единица работы вычислитель¬ ной системы. Оно может состоять из одной или нескольких после¬ довательно выполняемых программ. Каждое задание должно быть описано на языке управления заданиями. Язык управления заданиями не является языком программи¬ рования и не может быть использован для написания программ. Он служит для управления выполнением программ и описания устройств ввода-вывода. Язык управления заданиями является средством, связывающим программиста с операционной системой. С помощью этого языка программист может указать системе по¬ рядок выполнения задания, затребовать определенные системные средства, описать требуемые устройства ввода-вывода. Описание задания перфорируется на перфокартах и вводится в систему че¬ рез устройство системного ввода. Язык управления заданиями состоит из управляющих операто¬ ров или управляющих карт. Существуют девять типов управляю¬ щих операторов: 1. Оператор JOB (оператор задания) —самый первый оператор задания. Он отмечает начало текущего задания и конец предыду¬ щего. Этот оператор содержит информацию, относящуюся к зада¬ нию в целом. 2. Оператор ЕХЕС (оператор пункта задания)—самый пер¬ вый оператор каждого пункта задания. Оператор пункта задания определяет программу или процедуру, которую необходимо вы¬ полнить. Кроме того, этот оператор содержит информацию, отно¬ сящуюся к пункту задания. 3. Оператор DD (оператор описания данных) предназначен для описания каждого набора данных, находящегося на носителе ин¬ формации любого периферийного устройства (магнитные ленты, устройства прямого доступа, перфокарточные и перфоленточные устройства, печатающие устройства и т. д.). Оператор содержит описание набора данных, описание устройства, запрос на ресурсы и т. д. Кроме того, оператор DD допускает включение наборов дан¬ ных во входной поток. 4. Оператор PROC (оператор процедуры) является первым оператором процедуры. Он описывает параметры процедуры и их стандартные значения. 58
5. Оператор PEND (оператор конца процедуры) используется, чтобы отметить конец процедуры во входном потоке. 6. Ограничительный оператор (/*) указывает конец набора данных, представленного во входном потоке. 7. Пустой оператор (//) может быть использован для отмены конца задания. 8. Оператор команды может быть использован для ввода команды через входной поток. 9. Оператор комментария (//*) может содержать любую ин¬ формацию, которая кажется полезной программисту. Все управляющие операторы задания записываются (кодиру¬ ются) на бланках. Каждая строка бланка соответствует одной пер¬ фокарте и содержит 80 позиций (колонок). После кодирования операторов на бланке производится перфорация их на перфо¬ картах. Все управляющие операторы, за исключением ограничительно¬ го оператора и оператора комментария, идентифицируются сим¬ волами // в колонках 1 и 2. Ограничительный оператор идентифи¬ цируется символами /* в колонках 1 и 2. Оператор комментария идентифицируется символами //* в колонках 1, 2 и 3. Помимо идентифицирующих символов управляющие операто¬ ры могут содержать четыре поля: имя (или метка), оператор, опе¬ ранды и комментарии. В некоторых операторах одно или несколь¬ ко полей может быть опущено. Имя идентифицирует конкретный управляющий оператор, что позволяет ссылаться на него другим операторам или управляю¬ щим блокам. Имя оператора задания является одновременно име¬ нем задания. Имя может состоять не более чем из 8 символов и содержать любой буквенно-цифровой символ. Первый знак дол¬ жен быть буквой и находиться в колонке 3. Оператор — это сочетания JOB, EXEC, DD, PROC, PEND или оператор команды. Данное поле определяет тип управляющего оператора. Полю оператора обязательно должно предшествовать не менее одного пробела. За ним должен следовать также по край¬ ней мере один пробел. Поле операндов содержит параметры, разделенные запятыми. Оно должно отделяться от поля оператора одним или более про¬ белами. Нельзя кодировать пробелы между параметрами. После поля операндов должно следовать не менее одного пробела. Параметры могут быть двух типов: позиционные и ключевые. Позиционные параметры характеризуются их позицией в поле опе¬ рандов и должны быть закодированы первыми в определенном порядке. Отсутствие позиционного параметра указывается запя¬ той. Если после некоторого позиционного параметра все последую¬ щие позиционные параметры отсутствуют, то запятые кодировать не нужно. Ключевые параметры характеризуются ключевым словом, за которым следуют знак равенства и переменная информация. Клю¬ 59
чевые параметры кодируются после позиционных в любом порядке относительно друг друга. Значения ключевых и позиционных параметров могут прини¬ мать форму списка подпараметров. Список подпараметров заклю¬ чается в скобки, если он состоит более чем из одного подпарамет¬ ра. Подпараметры в списке разделяются запятыми. Поле комментариев может содержать любую информацию, полезную с точки зрения программиста. Оно должно отделяться от поля операндов по крайней мере одним пробелом. Управляющие операторы кодируются в колонках 1—71. Если общее число знаков превышает 71, то. можно прервать кодирова¬ ние оператора, в следующей строке закодировать символы // в ко¬ лонках 1 и 2 и продолжить кодирование оператора с колонки в ин¬ тервале 4—16. Когда прерывание оператора приходится на поле операндов, его можно сделать только после полностью закодиро¬ ванного параметра (подпараметра), включая запятую. Если пре¬ рывание оператора приходится на поле комментариев, то его мож¬ но сделать в любом месте. В последнем случае з колонке 72 необ¬ ходимо закодировать один из символов, отличных от пробела. Синтаксис языка управления заданиями довольно прост. Для упрощения использования управляющих операторов в типовых слу¬ чаях с применением системных обрабатывающих программ (тран¬ сляторы, редактор связей и т. д.) используются каталогизирован¬ ные процедуры. Они поставляются в составе операционной систе¬ мы для различных вариантов использования системных обраба¬ тывающих программ (например, трансляция; трансляция и редак¬ тирование; трансляция, редактирование и выполнение и т. д.). Каталогизированные процедуры записаны в специальной биб¬ лиотеке. Каждая процедура имеет имя, состоящее из 1—8 симво¬ лов. Первым оператором процедуры должен быть оператор PROC. В процедуре нельзя употреблять оператор JOB, ограничи¬ тельный оператор, а также оператор DD с набором данных. Про¬ цедура может содержать символические параметры, которые за¬ меняются па фактические значения при ее применении. Процедура вызывается путем употребления имени процедуры в операторе ЕХЕС. Библиотека процедур может быть пополнена. Кроме каталогизированных процедур, можно кодировать процеду¬ ры в самом задании (процедура во входном потоке). Начало про¬ цедуры в этом случае отмечается оператором PRO.C, а конец — оператором PEND. Такая процедура доступна для применения только в том задании, в котором она закодирована, в то время как каталогизированные процедуры могут быть использозаны всеми программистами. В данной главе рассматривается использование операторов язы¬ ка. управления заданиями в типовых случаях. Описание каталоги¬ зированных процедур для системных обрабатывающих программ можно найти в руководствах по использованию соответствующих обрабатывающих программ. GO
3.2. ОПЕРАТОР ЗАДАНИЯ Оператор задания начинает задание. Он должен содержать имя задания. Все параметры в поле операндов необязательны. Ес¬ ли параметры отсутствуют, то комментарии кодировать нельзя. Оператор задания имеет следующий формат: // имя JOB операнды комментарии Имя должно начинаться в третьей колонке и содержать от 1 до 8 буквенно-цифровых символов (от А до Z, от 0 до 9), причем цифра не может быть первым символом. В мультипрограммных режимах не следует допускать использования одинаковых имен заданий. Поле операндов содержит два позиционных параметра: учет¬ ную информацию и идентификацию программиста. Эти параметры необходимо кодировать в указанном порядке перед ключевыми параметрами. Учетная информация может включать учетный номер и допол¬ нительную учетную информацию. Если этот параметр состоит из нескольких подпараметров, то они разделяются запятыми и за¬ ключаются в скобки или апострофы. Отсутствие подпараметра от¬ мечается запятой. Параметр учетной информации допускает коди¬ рование не более 142 символов, включая запятые. Учетная информация является необязательным параметром. Однако его можно сделать обязательным при генерации системы (в однопрограммном режиме) или в каталогизированной проце¬ дуре системного ввода (в мультипрограммных режимах). Прави¬ ла обработки учетной информации в системе не определяются. В составе операционной системы отсутствуют программы обра¬ ботки учетной информации. Система учета, а также программы обработки учетной информации должны разрабатываться систем¬ ными программистами вычислительных центров в соответствии с условиями эксплуатации вычислительной установки. Программы обработки учетной информации могут быть вклю¬ чены в состав управляющей программы в процессе генерации опе¬ рационной системы, а также в сгенерированную систему. Управ¬ ляющая программа передает управление этим программам обра¬ ботки при инициализации пункта задания, при завершении пункта задания и при завершении задания. При этом регистр 1 содержит адрес списка указателей к различной информации, такой, как имя задания, имя пункта задания, идентификация программиста, учет¬ ная информация задания и пункта задания, время выполнения пункта задания, время выполнения задания и т. д. Эта информа¬ ция может быть обработана учетными программами в соответст¬ вии с системой учета, принятой в вычислительном центре. Вторым позиционным параметром оператора задания является идентификация программиста. Программист может указать свою фамилию, учетный номер или любую другую идентифицирующую информацию. Допускается употребление любых символов при ко¬ 61
дировании этого параметра. Общее число символов не должно превышать 20. Если применяются специальные символы, отличные от точки, то параметр заключается в апострофы. Назначение па¬ раметра идентификации программиста то же, что и параметра учетной информации. Он обрабатывается программами обработки учетной информации. Когда они отсутствуют, этот параметр не используется. Если оба позиционных параметра отсутствуют, то запятые можно не кодировать. Ниже рассматриваются ключевые параметры. Параметр MSGLEVEL определяет уровень распечатки опера¬ торов языка управления заданиями и сообщений системы о рас¬ пределении. Значение параметра состоит из двух подпараметров: MSGLEVEL= (операторы, сообщения) Первый подпараметр может принимать три значения: 0, 1, 2. Значение 0 кодируют, если необходимо выводить только оператор JOB. Значение 1 кодируют, если необходимо выводить все вход¬ ные управляющие операторы, операторы каталогизированных про¬ цедур и внутреннее представление операторов после подстановки символических параметров. Значение 2 кодируют, если необходи¬ мо выводить только входные управляющие операторы. Второй подпараметр может принимать два значения: 0 и 1. Значение 0 кодируют, если сообщения о распределении выводить не требуется, за исключением случаев аварийного завершения. При аварийном завершении эти сообщения появляются в качестве вывода. Значение 1 кодируют, если необходимо печатать все со¬ общения о распределении. Параметр CLASS определяет класс задания: CLASS = i^acc задания Класс задания указывается латинской буквой (от А до О). Та¬ ким образом, можно указать до 15 различных классов задания. Если этот параметр опущен, то предполагается, что задан класс А. В соответствии с заданным классом задание попадает в очередь заданий. Параметр PRTY определяет приоритет задания, с которым оно выбирается из очереди своего класса на выполнение. Чем выше приоритет задания, тем быстрее оно попадает на выполнение: PRTY = приоритет Приоритет задания определяется числом от 0 до 13. Рекомен¬ дуется избегать употребления значения 13, так как оно использу¬ ется системными программами. Параметр TYPRUN применяется для задержки выборки зада¬ ния из очереди на выполнение. Если закодировано TYPRUN = HOLD то задание независимо от приоритета будет оставаться в очереди заданий. Снять задержку может оператор с помощью команды RELEASE. 62
Параметр MSGCLASS определяет выходной класс для всех сообщений планировщика заданий: MSGCLASS = выходной класс Выходной класс кодируется латинскими буквами от А до Z и цифрами от 0 до 9. Таким образом, допускается до 36 выходных классов. Для каждого класса строится выходная очередь систем¬ ного вывода. Программа системного вывода, обрабатывающая заданный вы¬ ходной класс, осуществляет вывод на устройство системного вы¬ вода. Если этот параметр опущен, то предполагается, что выход¬ ной класс имеет значение А. Этот параметр определяет выходной класс только для сообщений, связанных с заданием. Выходной класс для данных, являющихся результатом выполнения задания, определяется в операторах DD параметром SYSOUT. Он может как совпадать, так и отличаться от выходного класса сообщения планировщика. В последнем случае сообщения планировщика и выходные наборы данных выводятся на разные устройства. Параметр COND предназначен для проверки кода возврата пункта задания. Любая обрабатывающая программа после завер¬ шения своей работы может передать вызывающей программе код возврата в регистре 15. Более подробно это буДет рассмотрено при обсуждении соглашений о связях. Программа пункта задания пе¬ редает код возврата в управляющую программу. Для анализа это¬ го кода возврата используется параметр COND, который можно кодировать как в операторе JOB, так и в операторе ЕХЕС. Код возврата должен быть числом, кратным 4, в диапазоне от О до 4095. Смысл каждого значения кода возврата может быть произвольным. Системные обрабатывающие программы выраба¬ тывают коды возврата, имеющие следующие значения: а) код возврата 0 указывает, что выполнение программы было нормальным; б) при коде возврата 4 выполнение программы было успеш¬ ным, однако в процессе выполнения были выявлены ситуации, на¬ поминающие ошибки, в связи с чем выдавались предостерегающие сообщения; в) код возврата 8 указывает, что при выполнении программы были обнаружены ошибки; г) код возврата 12 свидетельствует о том, что при выполнении программы были обнаружены серьезные ошибки; д) код возврата 16 обозначает, что были обнаружены ошибки, которые привели к завершению выполнения программы. Нормальный возврат рекомендуется обозначать кодом 0. Пред¬ полагается, что вызывающая программа «знает» назначение каж¬ дого кода возврата и умеет его анализировать. Анализ кодов воз¬ врата в управляющей программе производится в соответствии с кодированием параметра COND: COND=((kc^, оператор),...) 63
где код —число в диапазоне от 0 до 4095, оператор — одна из шести операций сравнения: Заданные в параметре коды сравниваются с кодом возврата каждого пункта задания. В операторе COND допускается до 8 про¬ верок. Если хотя бы при одной из проверок заданное условие" вы¬ полняется, то все оставшиеся пункты задания не выполняются и задание завершается. Если параметр COND опущен, то проверка кода возврата не производится. В режиме мультипрограммирования с переменным числом за¬ дач с помощью параметра производится запрос на величину раздела памяти, в котором бу¬ дут выполняться все пункты задания. Здесь nnnnn определяет число Кбайтов памяти (1 Кбайт, обозначаемый 1К, равен 1024 бай¬ там). Если необходимо для каждого пункта задания установить свой размер раздела, то этот параметр не следует кодировать в операторе JOB, а рекомендуется кодировать в операторах ЕХЕС. В однопрограммном режиме и режиме мультипрограммирования с фиксированным числом задач этот параметр игнорируется. Параметр TIME определяет предельное время использования центрального процессора для задания, в которое не входит время ожидания. Указанный параметр полезен при отладке программ, как средство против бесконечного зацикливания. Параметр TIME имеет следующий формат: Если параметр TIME опущен, то в качестве предельного зна¬ чения используется стандартное значение, установленное в про¬ цедуре системного ввода. Чтобы снять ограничение времени, не¬ обходимо кодировать В этом случае время использования центрального процессора не ограничивается. В режиме мультипрограммирования с переменным числом за¬ дач отдельные задания могут в процессе выполнения превысить размеры отведенного раздела памяти и вызвать свертывание дру¬ гих заданий, выполняемых в оперативной памяти. Эти процессы регулируются параметром ROLL. Он имеет следующий формат: Первый подпараметр определяет, может ли данное задание под¬ вергаться свертыванию другими заданиями. Второй подпараметр указывает, может ли данное задание свертывать другие задания. Если каждый пункт задания имеет свои запросы на свертывание, GT(>), GE(^s), EQ( = ), LT(<), LE(<), NE(=^). REGION = nnnnnK ТШЕ= (минуты, секунды) II ME =1440 64
то данный параметр следует кодировать в операторах ЕХЕС, а вг операторе JOB не кодировать. Рассмотрим пример оператора JOB: //NAMEl JOB (3874, 23—01—74) ,C.P.A.TEL. 555, II MSGLEVEL= (0, 1), MSGCLASS—A, CLASS = B, // PRTY = 5, COND=(8, LT),REGION = 55K, // TIME = 20, ROLL= (NO, NO) Задание, приведенное в примере, имеет имя NAME1. Учетный номер задания — 3874. В качестве дополнительной учетной инфор¬ мации задана дата в форме 23—01—74. В качестве идентификации программиста заданы его инициалы и телефон. Далее указывает¬ ся, что необходимо распечатывать только оператор JOB, а также сообщения о распределении. Для вывода сообщений планировщи¬ ка используется класс А. Заданию присвоены класс В и приори¬ тет 5. Пункты задания будут последовательно выполняться, если коды возврата каждого из них не будут превышать 8. Если код возврата одного из пунктов более 8, то оставшиеся пункты выпол¬ няться не будут. Для выполнения задания требуется раздел опе¬ ративной памяти не менее 55К. Время выполнения задания огра¬ ничено 20 мин. Задание не допускает свертки и не может вызвать свертку других заданий. Параметры REGION и ROLL используют¬ ся только в режиме с переменным числом задач. 3.3. ОПЕРАТОР ПУНКТА ЗАДАНИЯ Оператор пункта задания (оператор ЕХЕС) начинает каждый пункт внутри задания. За ним следуют операторы DD и данные, принадлежащие пункту. Основная функция оператора заключа¬ ется в том, чтобы указать программу, которую необходимо выпол¬ нить, или процедуру, которую необходимо вызвать. Это указание делается первым позиционным параметром, который является обя¬ зательным. Все другие параметры являются необязательными и могут отсутствовать. Оператор пункта задания имеет следующий формат: //имя ЕХЕС операнды комментарии Имя является необязательным. Оно предназначено для ссылки на конкретный пункт задания. Имя должно начинаться с колонки 3 и содержать от 1 до 8 буквенно-цифровых символов (от А до Z, от 0 до 9), причем цифра не может быть первым символом. Если в колонке 3 находится пробел, то пункт задания считается непо¬ меченным. Имя программы, выполняемой в пункте задания, определяется параметром PGM, который имеет следующий формат: PGM = iiMfl программы Несмотря на то, что по форме записи этот параметр напомина¬ ет ключевой, он является позиционным и должен быть самым пер- s. Заказ 3111.
вым в списке операндов. Программа, указанная в этом параметре, может находиться в системной библиотеке SYS1.LINKLIB, назы¬ ваемой общей библиотекой, во временной библиотеке или в лич¬ ных библиотеках. Программа является загрузочным модулем и должна быть разделом библиотеки, размещаемой на томе прямого доступа. Общая библиотека SYS1.LINKLIB содержит все системные об¬ рабатывающие программы, такие, как трансляторы, редактор свя¬ зей и сервисные программы. В общую библиотеку могут быть добавлены программы пользователей. Однако не следует злоупот¬ реблять этой возможностью, так как существует опасность пере¬ полнения или разрушения программ, находящихся в библиотеке. Общая библиотека содержит наиболее важные и часто используе¬ мые программы, поэтому записывать в нее следует только оконча¬ тельно отлаженные программы, которые предназначены для часто¬ го использования. Если нет дополнительных указаний, поиск программы произ¬ водится в общей библиотеке. Загрузочные модули, получаемые редактором связей, могут быть записаны в личные библиотеки. Программы внутри одной библиотеки не должны иметь совпадаю¬ щих имен. В личные библиотеки записываются программы, не предназначенные для частого использования. Чтобы указать си¬ стеме, что программу, указанную параметром PGM, следует искать в личной библиотеке, эта библиотека описывается как библиотека задания или библиотека пункта задания. Для того чтобы описать личную библиотеку как библиотеку задания, необходимо сразу же после оператора JOB поместить оператор DD с меткой JOBLIB, в котором должна быть указана личная библиотека. Например, пусть существует личная библиотека с именем САВ. Библиотека САВ в задании NAME указана как библиотека за¬ дания. Поэтому система будет искать программу А, указанную в первом пункте в библиотеке САВ. Если в этой библиотеке такой программы не окажется, то производится поиск в общей библиоте¬ ке. Этот принцип распространяется на программы всех пунктов задания. Чтобы сделать личную библиотеку библиотекой пункта зада- уия, необходимо среди операторов DD, принадлежащих пункту, поместить один оператор с меткой STEPLIB, в котором должна быть указана личная библиотека. Например, если ту же библиоте¬ ку САВ необходимо распространить только на пункт ST1, необхо¬ димо записать: //NAME //JOBLIB /7'STi JOB DD EXEC DSNAME = CAB PGM = A,... //NAME //ST 1 //STEPLIB H . . : JOB EXEC PGM = A,... DSNAME = CAB DD DD 06
Поиск программы А будет осуществляться сначала в библио¬ теке САВ, а затем в общей библиотеке. Другие пункты задания нег будут обращаться к библиотеке САВ (если она не описана повтор¬ но как библиотека пункта). Если описаны обе библиотеки, то ука¬ зание библиотеки пункта задания для данного пункта делает не¬ доступной библиотеку задания. Личные библиотеки используются не только как библиотеки задания или пунктЬг задания, но и самостоятельно для поиска про¬ грамм, применяемых в динамических структурах (см. раздел 4:5). Если загрузочный модуль, создаваемый редактором связей, предназначен для одноразового выполнения в следующем пункте, то его следует поместить во временную библиотеку, которая су¬ ществует только в период выполнения задания. Ссылка на то, что программу необходимо искать во временной библиотеке, делается следующим образом: PGM=*.hmh пункта, имя оператора DD Имя пункта и оператора DD указывает на описание временной библиотеки в том пункте, где создается загрузочный модуль. Рассмотрим пример: //STl ЕХЕС PGM = IEWL //SYSLMOD DD DSNAME = &&АВС(А), DISP = (NEW, PASS),... //ST2 EXEC PGM = M //ST3 EXEC PGM = *.STl.SYSLMOD В первом пункте задания выполняется программа редактора связей, которая имеет имя IEWL. Описание библиотеки, в которую помещается загрузочный модуль, производится в операторе SYSLMOD DD. Библиотека имеет имя ABC. Два знака & перед именем библиотеки указывают на то, что это временная библиоте¬ ка, которая перестанет существовать после завершения задания. Загрузочный модуль, помещаемый в эту временную библиотеку, получает имя А. Параметр DISP указывает, что библиотека но¬ вая, т. е. создается в этом пункте и передается для использования в последующих пунктах. Второй пункт ST2 выполняет програм¬ му М из общей библиотеки. Третий пункт ST3 указывает на то, что необходимо выполнить программу, полученную в пункте ST1 в на¬ боре данных, описанном оператором SYSLMOD. Иначе говоря, бу¬ дет выполнена программа А из временной библиотеки ABC, кото¬ рая была создана редактором связей. Кроме указания программы первый позиционный параметр' оператора ЕХЕС может указать на каталогизированную процеду¬ ру или процедуру во входном потоке, которая может содержать операторы для нескольких пунктов. Каталогизированные процеду¬ ры являются разделами библиотеки, называемой SYS1.PROCLIB. Чтобы указать на процедуру, необходимо в качестве первого по¬ зиционного параметра указать PROC = hmh процедуры Г)* (57
или имя процедуры Последующие параметры в операторе ЕХЕС могут быть исполь¬ зованы для замены параметров в процедуре. Все остальные пара¬ метры оператора ЕХЕС — ключевые. Их употребление не обяза¬ тельно. Ниже рассматривается употребление ключевых параметров в операторе пункта задания. Оператор PARM предназначен для передачи информации об¬ рабатывающей программе пункта задания. Оператор имеет сле¬ дующий формат: ^ PAR М = и 1-1 ф о 'ра ц и я Информация может включать любые символы, общее число ко¬ торых не должно превышать 100. Если информация состоит из нескольких выражений, разделенных запятыми, она заключается в апострофы. Если информация не содержит специальных симво¬ лов, то ее можно заключить в скобки. Заключающие скобки или апострофы не рассматриваются как часть информации. Преиму¬ щество заключения в скобки состоит в том, что подполя такой ин¬ формации можно переносить на новую строку, в то время как под¬ поля информации, заключенной в апострофы, переносить нельзя. В соответствии с правилами передачи параметров, рассматри¬ ваемыми ниже, обрабатывающая программа пункта задания по¬ лучает в регистре 1 адрес адреса информации. Учетная информация пункта задания указывается в параметре АССТ, имеющем следующий формат: АССТ= (учетная информация) Содержание и использование учетной информации определя¬ ется системой учета и программами обработки учетной информа¬ ции, принятыми в вычислительном центре. Эти вопросы рассмат¬ ривались выше при обсуждении учетной информации задания. Учетная информация пункта задания может состоять из не¬ скольких подпараметров, разделенных запятыми. Общее число символов учетной информации, включая запятые, не должно пре¬ вышать 142. Если существует только один подпараметр, то скобки можно опустить. Подпараметры, содержащие специальные симво¬ лы, необходимо заключать в апострофы. Оператор COND позволяет осуществить анализ кодов возврата одного пли нескольких предшествующих пунктов и определить ус¬ ловия выполнения пункта, если один или несколько предыдущих пунктов закончились аварийно. Проверки кодов возврата осущест¬ вляются, если параметр COND имеет следующий формат: COi\TD= ((код, оператор, пункт задания),...) Код и оператор принимают те же значения, что и в аналогич¬ ном параметре оператора задания. Указание пункта задания ссылается на один из предыдущих пунктов задания, код возврата €8
которого необходимо проверить. Указание пункта не производится, если проверяются все предыдущие пункты. Допускается до восьми f проверок на каждый пункт задания. Если хотя бы одна проверка окажется истинной, пункт задания не выполняется. Для указания условия выполнения пункта задания в случае аварийного завершения одного или нескольких пунктов исполь¬ зуются значения EVEN и ONLY. Подпараметр EVEN вызывает вы¬ полнение пункта задания, даже если один или несколько преды¬ дущих пунктов закончились аварийно. Подпараметр ONLY вызы¬ вает выполнение пункта задания, только если хотя бы один из предыдущих пунктов закончился аварийно. Если совместно с од¬ ним из этих параметров указаны проверки кодов возврата и хотя бы одна из этих проверок окажется истинной, пункт задания не выполняется. Операторы EVEN и ONLY используются только для тех аварийных завершений, которые возникли при выполнении об¬ рабатывающих программ. Если аварийное завершение возникло при выполнении планирования, то ни один из последующих пунк¬ тов задания не выполняется. Параметр DPRTY определяет значение диспетчерского приори¬ тета для программы пункта задания, которая становится первой задачей пункта. Этот параметр используется в мультипрограммном режиме с переменным числом задач, а также в режиме с фиксиро¬ ванным числом задач, допускающим образование подзадач. Фор¬ мат параметра следующий: DPRTY= (значение 1, значение 2) Значение 1 и значение 2 представляют собой числа в диапазоне от 0 до 15. Значение диспетчерского приоритета может изменяться в диапазоне от 0 до 255 и определяется по формуле значение 1X 16+значение 2 В соответствии с текущим значением диспетчерского приорите¬ та задачи получают управление в режиме мультипрограммиро¬ вания. В операторе ЕХЕС могут быть заданы параметры REGION и ROLL, имеющие то же назначение, что и в операторе задания, но только в отношении одного пункта задания. Если эти параметры заданы в операторе задания, то их задание в операторах пунктов задания игнорируется. Параметр TIME также может быть задан в операторе пункта задания. Его назначение — ограничить время использования цен¬ трального процессора пунктом задания. Формат параметра такой же, как и формат аналогичного параметра в операторе задания. Параметр TIME можно задавать как в операторе задания, так и в операторе пункта задания. Рассмотрим пример оператора ЕХЕС. //STl ЕХЕС PGM = ABC. PARM=(11, 95), // АССТ = 38741, COND= (8, LT), DPR!У = (3, 12), // TIMERS 09
Пункт задания имеет имя ST1. В пункте задания выполняется программа ABC, которой передаются два числа И и 95 в поле информации, адрес адреса которой будет помещен в регистр 1 пе¬ ред передачей управления программе ABC. Учетная информация — 38741. Пункт задания не будет выполнен, если хотя бы один из предыдущих пунктов того же задания выработает код возврата более 8. Диспетчерский приоритет пункта задания равен 60 (3X16+12 = 60). Время выполнения пункта задания ограничено 8 мин. 8.4. ОПЕРАТОРЫ ОПИСАНИЯ ДАННЫХ Операторы описания данных (операторы DD) должны следо¬ вать после оператора ЕХЕС и определять каждый набор данных, используемый в пункте задания. Оператор DD имеет следующий формат: //имя DD операнды комментарии Имя должно начинаться в колонке 3 и содержать-ют 1 до 8 бук¬ венно-цифровых символов (от А до Z, от 0 до 9), причем цифра не может быть первым символом. Все операнды оператора DD явля¬ ются необязательными, но отсутствие параметров не допускается. Обязательно должен быть закодирован по крайней мере один па¬ раметр. Оператор DD дает информацию; обтимени набора данных; устройстве истоме, на которых находится набор данных;^диспози- шш набора данных. Система осуществляет распределение устройств ввода-вывода перед началом выполнения пункта задания. Оператор DD может также давать различную информацию о наборе данных: организации, длине записи. рлзмере_блока и т. д. Если новый набор данных создается на устройстве прямого до¬ ступа, оператор DD определяет количество памяти, необходимое для распределения. Наборы данных можно группировать на одном устройстве, разделять на разные устройства и каналы и тем самым оптимизировать выполнение операций ввода-вывода. Значительная часть информации предназначена для организа¬ ции операций чтения или записи наборов данных: о типе органи¬ зации, типе записи, длине записи, длине блока, способе буфериза¬ ции, типе устройств ввода-вывода и т. д. Эта информация посту¬ пает из трех источников: блока управления данными (DCB), оператора DD и метки набора данных. Блок управления данными представляет собой таблицу в опе¬ ративной памяти машины, которая описывает каждый набор дан¬ ных, используемый в программе. Для программ на языках высо¬ кого уровня этот блок создается соответствующим транслятором. Транслятор также осуществляет заполнение этого блока необхо¬ димой информацией. В программах на языке Ассемблера програм¬ мист обеспечивает блок управления данными макрокомандой DCB. 70
Для заполнения этого блока программист должен выдать макро¬ команду OPEN, которая открывает блок. Когда блок управления данными открывается, информация из оператора DD заполняет незаполненные поля. Если некоторое поле было заполнено макрокомандой DCB, то информация для этого гюля, указанная в операторе DD, не используется. Затем считывается метка набора данных (если этот набор данных уже существовал йГймел метку), и и'зТГее берется информация для не¬ заполненных полей блока управления данными. Таким образом, наивысший приоритет в заполнении полей имеет блок управления данными (макрокоманда DCB), затем оператор DD и, наконец, самый низший приоритет имеет метка набора данных. . Например, тип устройства не следует кодировать в блоке управ¬ ления данными. Его можно указать в операторе DD, что позволяет создавать программы, не зависимые от устройства. Длину записи и блока также удобно не указывать в программе, а указать позже в операторе DD или метке набора данных. При кодировании оператора DD программист должен знать, какие поля в блоке управления данными являются пустыми, чтобы указать их в операторе DD. Программист, использующий язык Ассемблера, знает эти поля, так как он сам кодирует блок управ¬ ления данными в программе. Программист, использующий язык высокого уровня, может узнать эти поля из руководств по соответ¬ ствующим трансляторам. - q .. ^Связь оператора DD с блоком управления данными осуществ¬ ляется посредством указания в блоке управления данными имени соответствующего оператора J3D. Таким образом, все операторы DD должны иметь имя (исключение составляют сцепленные набо¬ ры данных, когда под одним именем объединяются несколько опе¬ раторов DD). Для каждой программы имена операторов DD должны быть известны и заданы в самой программе. Ниже рассматриваются основные параметры оператора DD. Чтобы ввести данные через входной поток, необходимо перед набором данных поместить оператор // имя DD * или // имя DD DATA Первый оператор используется для наборов данных, не содер¬ жащих в колонках 1 и 2 символов // или /*. Второй оператор ис¬ пользуется для ввода наборов данных, не содержащих в колонках 1 и 2 символов /*. Таким образом, второй оператор может быть ис¬ пользован для ввода операторов языка управления заданиями (например, ввод процедур для записи в библиотеку). Конец набо¬ ра данных отмечается оператором /*. Пример использования параметра *: // имя DD * набор данных / * 71
Наиболее часто для такого оператора используется имя SYSIN. Пример использования параметра DATA: II имя DD DATA набор данных I * Оба параметра являются взаимоисключающими позиционными параметрами. Если один из них присутствует в операторе, то он должен быть первым. В однопрограммном режиме для каждого пункта задания до¬ пускается только один набор данных во входном потоке. При этом оператор DD с параметром * или DATA должен быть самым по¬ следним оператором DD пункта задания. При выполнении про¬ граммы считывание происходит непосредственно с устройства сис¬ темного ввода. В мультипрограммных режимах допускается несколько таких наборов данных в одном пункте задания. Это оказывается возмож¬ ным благодаря тому, что эти наборы данных из входного потока предварительно записываются на тома прямого доступа, откуда считываются в процессе выполнения программы. Имя набора данных определяется параметром DSNAME. До¬ пускается употребление сокращения DSN. Набор данных может быть временным и невременным. Все невременные наборы данных должны иметь имя. Временные наборы данных могут имени не иметь. Временный набор данных запоминается на магнитной ленте или в памяти прямого доступа. Для него либо отсутствует параметр DSN, либо он закодирован в виде DSN = && имя. Если имя опуще¬ но, система сама вырабатывает имя для временного набора дан¬ ных. Любое последующее использование такого набора данных должно осуществляться обратной ссылкой на оператор DD, выра¬ батывающий этот набор данных. Например: //ST1 ЕХЕС PGM = А //ОР1 DD UNIT = SYSDA, DISP= (NEW, PASS),. //ST2 ЕХЕС PGM = B //DD2 DD DSN = *.ST1.0P1, DISP = (OLD, PASS) В параметре DSN оператора DD2 задана обратная ссылка на пункт STI, оператор ОР1, где вырабатывается новый временный набор данных, имя которого не указано. Во втором случае имя временного набора данных отмечается двумя символами &&. Можно пользоваться и одним символом &, который используется также для отметки параметров проце¬ дуры. Имя содержит от 1 до 8 символов. На такой набор данных можно ссылаться по имени. Можно также использовать обратные 72
ссылки. Предыдущий пример с использованием параметра 0SN* для временного набора данных выглядит следующим образом: //STl ЕХЕС PGM «А //ОР1 DD DSN —-&<$DATA1, DISP=(NEW, PASS),... //ST2 ЕХЕС PGM-В //DD2 DD DSN = &&DATA 1, DISP«=(OLD, PASS),... Оператор DD2 мог бы остаться в прежнем виде за счет употреб¬ ления обратной ссылки. Для невременных наборов данных имя может быть простым и составным. Простое имя состоит из не более чем 8 символов, при¬ чем первым символом не может быть цифра или специальный сим¬ вол. Составное имя состоит из нескольких имен, разделенных точ¬ ками. Составное имя не должно превышать 44 символов, включая точки. Если имя используется для обращения к поколению набора дан¬ ных, то применяется формат DSN = hmh (номер поколения) Если имя обращается к разделу библиотеки, то используется формат DSN —имя библиотеки (имя раздела) Если имя используется для обращения к индексно-последова¬ тельному набору данных, то используется формат DSN — имя (имя области) где в качестве имени области можно использовать INDEX, PRIME или OVFLOW. Параметр SYSOUT оператора DD позволяет направить набор данных в выходной поток: SYSOUT = выходной класс Выходной класс кодируется буквами латинского алфавита и цифрами (А—Z, 0—9). Выходные классы обсуждались ранее в связи с обсуждением параметра MSGCLASS оператора задания. Запрос на устройство, используемое набором данных, осуществ¬ ляется параметром UNIT. Устройство может быть указано одним из трех способов: адресом, типовым или групповым именем. Адрес состоит из номера канала, номера устройства управления и номера устройства. При указании типового имени система выбирает одно из устройств заданного типа. При указании группового имени ис¬ пользуется одно из устройств группы. Примеры: UNIT — 180 UN IT = 5010 UNIT-SYSSQ В параметре UNIT можно также указать: а) запрос на число устройств для многотомных наборов дан¬ ных; б) запрос на отсроченное монтирование тома (не в момент рас¬ пределения устройств, а в момент открытия набора данных); 73
в) запрос на использование разных устройств для каких-либо указанных наборов данных; г) запрос на использование одних и тех же устройств для ка¬ ких-либо указанных наборов данных. Параметр VOLUME (или сокращенно VOL) дает информацию :> томе или томах, на которых размещаются входные или должны размещаться выходные наборы данных. С помощью этого парамет¬ ра можно запросить какой-либо определенный том, несколько то¬ мов для набора данных, личные тома и т. д. Томом может быть бо¬ бина магнитной лепты, пакет дисков или барабан. Каждый том может иметь метку. Существует два вида меток — метка тока и метка набора данных. Оба вида меток записываются на томе как данные. Метка тома содержит серийный (регистра¬ ционный) номер тома и предназначена для его идентификации. Она читается системой для проверки правильности установки томов на устройства. В операционной системе существует средство автома¬ тического распознавания томов, которое является необязательным средством. Если оно необходимо, то его нужно указать при гене¬ рации системы. Автоматическое распознавание томов позволяет оператору заранее" монтировать (устанавливать на устройство) том, перед тем как он будет затребован. Система считывает метку тома и запоминает его серийный номер. Поэтому, когда том будет затребован для работы, система уже знает, что этот том установ¬ лен, и начинает с ним работать. Перечисленные выше типы устройств (накопители на магнит¬ ных лентах, дисках, барабанах) можно разделить на устройства с постоянным томом и устройства со сменными томами. К устрой¬ ствам с постоянным томом относятся накопители на магнитном барабане (например, ЕС-5033, ЕС-5035) и накопители на постоян¬ ном магнитном диске (ЕС-5051). К устройствам со сменными тома¬ ми относятся накопители на магнитной ленте (ЕС-5010, ЕС-5012, ЕС-5014, ЕС-5015 и т. д.) и накопители на сменных магнитных дис¬ ках (ЕС-5050, ЕС-5052, ЕС-5054, ЕС-5055, ЕС-5056 и т. д.). В связи с этой особенностью устройств работа с томами также имеет неко¬ торую специфику. у Все тома делятся наяпостоянно резидентные (или постоянно смонтированные) ^резервированные ^перемещаемые. Постоянно резидентный том не может быть демонтирован (снят с устройства). Постоянно резидентным томом может быть только том прямого доступа (пакет дисков, барабан). К постоянно рези¬ дентным относятся следующие тома: а) все тома, которые физически не могут быть демонтированы (устройства с постоянным томом); б) том, с которого система загружается процедурой начальной загрузки; в) том, который содержит такие системные наборы данных, как общая библиотека (SYS1.LINKLIB), библиотека процедур (SYS1.PROCLIB) и набор данных для входных и выходных оче¬ редей (SYS1.SYSJOBQE); 74
г) любой другой том прямого доступа, который указан систем¬ ным программистом как постоянно резидентный и запись об этом сделана в специальном разделе (PRESRES) библиотеки SYS1. PARMLIB. Том становится резервированным в результате выдачи коман¬ ды MOUNT или записи в PRESRES. Резервированный том оста¬ ется на устройстве до тех пор, пока не будет выдана команда UNLOAD для этого тома. Резервирование томов производится с целью избежать перемещения томов при многократном их исполь¬ зовании группой заданий. Резервировать можно как том прямого доступа, так и магнитные ленты. Все прочие тома, которые не являются постоянно резидентными или резервированными, относятся к перемещаемым томам. Они де¬ монтируются после их последнего использования или если устрой¬ ство требуется для другого тома. Запрос на том может быть специальным и неспеццальным. В случае специального запроса в параметре VOL содержится ин¬ формация о серийном номере тома, который должен быть исполь¬ зован. Если параметр VOL не содержит указания на конкретный том, то этот запрос является неспециальным. В этом случае систе¬ ма выбирает том. Для существующего набора данных параметр VOL должен всегда содержать серийный номер тома, за исключением случаев, когда набор данных каталогизирован (CATLG) или передается из предыдущего пункта задания (PASS). В первом случае серийный номер тома указан в каталоге, во втором — в предыдущем пункте задания. Если набор данных новый (т. е. оператор DD описывает набор данных, который создается в пункте задания), то.программист мо¬ жет либо указать серийный номер тома для нового набора данных, либо не указывать его, предоставив системе выбор тома для задан¬ ного типа устройств. В первом случае выдается специальный за¬ прос, во ЦДором — иеспециальный. С точки зрения доступности томов для использования они ха¬ рактеризуются как общие, личные, тома памяти или случайные. Запрос на специальный том осуществляется кодированием под¬ параметров SER или REF. Подпараметр SER требует указания серийных номеров томов, предназначенных для хранения набора данных. Если указано более одного тома, то предполагается, что набор данных хранится на нескольких томах. Серийный номер тома содержит от 1 до 6 алфавитно-цифровых символов. Допускается употребление любых других специальных символов, однако при этом серийный номер должен быть заключен в апострофы. Никаких ограничений на первый символ серийного номера не существует. VOL = SER= (серийный номер, *..) Рассмотрим два примера: //PR 1 DD DSN = ABC, UNIT=5050, VOL = SER= 123456,... //PR2 DD DSN = MULTPL, UNIT=(TAPE, 3), И VOL = SER= (T100, T101, T1Q2),... 75
В операторе PR1 дается специальный запрос на том 123456, который предназначен для хранения набора данных ABC и должен быть монтирован на одно из устройств типа 5050. В операторе PR2 также определен специальный запрос на три тома Т100, Т101, Т102, на которых должен храниться набор данных MULTPL. Эти тома необходимо монтировать на три устройства, заданные групповым именем ТАРЕ. Подпараметр REF предназначен для ссылки на другой набор данных или другой оператор DD. В этом случае предполагается, что набор данных будет храниться на одном томе с другим набо¬ ром данных. Если другой набор данных каталогизирован или пере¬ дается из предыдущего пункта задания, необходимо кодировать VOL*=REF = hmh набора данных Если набор данных не каталогизирован и не передается из пре¬ дыдущего пункта или если набору данных присвоено временное имя,необходимо кодировать VOL = REF = *. обратная ссылка Обратная ссылка содержит указание одного из предыдущих опе¬ раторов DD в данном пункте или в одном из предыдущих пунктов задания. Если предыдущий набор данных, на который производит¬ ся ссылка, расположен на нескольких томах, то для магнитной лен¬ ты обратная ссылка предполагает только один последний том, а для устройств прямого доступа — все тома. Рассмотрим два пункта задания: IIP I EXEC 11 Ml DD II //М2 DD IIP 2 EXEC //М3 DD PGM = А DSN = X, DISP = (, PASS), UNIT = 5050, VOL~SER=llllll, ... DSN = Y, DISP=(, PASS), VOL = REF = *.Ml,... PGM = B DSN = K', VOL = REF = *.Pl.Mi, DISP= (, PASS),.,. Оператор Ml определяет новый набор данных X, который пере¬ дается следующим пунктам задания (что указывает параметр D15P). Набор данных X должен быть размещен на томе 111111, который необходимо монтировать на одно из устройств типа 5050. Набор данных Y и набор данных К содержат обратные ссылки на оператор Ml. Разница между ссылками состоит в том, что одна из них осуществляется внутри пункта, а другая — между разными пунк¬ тами. Оба набора данных, как У, так и /(, должны храниться на том же томе, что и набор данных X. Так как набор данных X яв¬ ляется передаваемым (PASS), то в качестве ссылки можно было бы указать его имя. Например, оператор М2 можно было бы за¬ писать следующим образом: //М2 DD DSN = Y, DISP = (, PASS), VOL = REF = X,. 76
Если необходимо, чтобы какой-либо том использовался только одним набором данных при выполнении пункта, следует объявить* его личным томом, закодировав VOL= (PRIVATE,...) В этом случае во время выполнения пункта никакой другой набор данных не может быть распределен на этот том. Личный том демонтируется после последнего использования в пункте за¬ дания. Запросы на личный том могут быть специальными и неспе¬ циальными. Специальный запрос на личный том может быть зако¬ дирован следующим образом: VOL= (PRIVATE, SЕR = серийиыГi номер) Неспециальный запрос на личный том может быть закодирован так: VOL = PRIVATE Если запрос неспециальный, система просит оператора выбрать личный том. Если запрашивается постоянно резидентный том, то указа и ие PRIVATE игнорируется. Том магнитной ленты может быть личным, если набор данных невременный или если сделан специальный запрос. В противном случае том считается случайным и может быть использован другим заданием после завершения использования в текущем пункте. Если один из следующих пунктов использует набор данных па случай¬ ной ленте, полученный в предыдущем пункте, то, чтобы предотвра¬ тить использование тома другими заданиями, необходимо кодиро¬ вать PRIVATE. Рассмотрим пример: //Р1 ЕХЕС RGM = А1 //Ml DD U N IT = ТАРЕ, DISP=(, PASS) /7Р2 ЕХЕС PGM = B1 //М2 DD DSN = *P1.M1, VOL = PRIVATE, /'/ DISP=(OLD, DELETE) В операторе Ail пункта PI выдается неспециальный запрос на случайный том магнитной ленты (предполагается, что под груп¬ повым именем ТАРЕ подразумевается группа накопителей на маг¬ нитных лептах), на котором получается новый набор данных. В операторе М2 этот набор данных используется, а том объявляет¬ ся личным. Чтобы сохранить какой-либо том установленным на устройстве при переходе от одного пункта к другому, необходимо указать RETAIN в качестве второго подпараметра. Например: VOL= (PRIVATE, RETAIN, SER = E22) или VOL=(, RETAIN, SER = E22) В случае если набор данных находится на нескольких томах, то это указание относится к последнему тому. 77
Если не кодируется RETAIN и набор данных не передается дру¬ гому пункту того же задания (в параметре диспозиции не указано PASS), то том может быть демонтирован в конце пункта задания, При выдаче запроса на том в последующих пунктах его можно монтировать на другое устройство. Если каталогизированный многотомный набор данных необхо¬ димо обрабатывать, начиная не с первого тома, то в качестве третьего подпараметра следует указать порядковый номер тома, с которого начинается обработка. Например, чтобы начать обра¬ ботку со второго тома, можно построить код следующим образом: VOL= (PRIVATE, ,2) или VOL — (,, 2) Когда создается новый многотомный набор данных, то в слу¬ чае специального запроса все серийные номера томов должны быть перечислены в подпараметре SER, как было указано выше. При неспециальном запросе указывается число томов в четвертом пара¬ метре. Например, если набор данных должен располагаться на 10 томах, то неспециальный запрос можно кодировать следующим об¬ разом: VOL= (PRIVATE,,, 10) Число устройств, на которых будут располагаться эти тома, мо¬ жет быть меньше числа томов. В этом случае для устройств пря¬ мого доступа необходимо кодировать PRIVATE. Параметр DISP описывает текущее состояние набора данных (старый, новый, модифицируемый и т. д.), а также дает указания системе о диспозиции набора данных после нормального и аварий¬ ного завершения пункта задания (оставить, удалить, каталогизи¬ ровать, вывести из каталога, передать следующему пункту зада¬ ния). Параметр DISP можно не кодировать только в том случае, если набор данных создается и удаляется в одном и том же пункте задания. Первый подпараметр параметра DISP указывает теку¬ щее состояние набора данных, второй — диспозицию в случае нор¬ мального завершения и третий — диспозицию в случае аварийного завершения. Подпараметры могут принимать следующие зна¬ чения: у4* ‘ • DISP = ( 'NEW “ , KEEP - Г KEEP MOD DELETE - v;' DELETE OLD PASS CATLG SHR CATLG UNCATLG UNCATLG Текущее состояние набора данных определяет состояние набо¬ ра перед выполнением пункта задания. Если набор данных новый, система создает метку набора данных. Если набор данных уже су¬ ществует, то система находит и.считывает метку набора данных, Значение NEW обозначает, что набор данных создается в те¬ кущем пункте задания. В этом случае необходимо указать параметр 78
UNIT, а для устройств прямого доступа — параметр SPACE для определения объема памяти. При специальном запросе можно ис¬ пользовать параметр VOL. NEW является стандартным значением (если первый подпараметр не закодирован, то предполагаемся NEW). Например: DISP= (, PASS) эквивалентно D1SP= (NEW, PASS) Значение MOD указывает на то, что набор данных модифици¬ руется путем добавления данных. Когда такой набор данных от¬ крывается, механизм записи-считывания устанавливается после последней записи, обеспечивая добавление данных к последова¬ тельным, индексно-последовательным и библиотечным наборам данных. Значение OLD обозначает, что набор данных уже существует. Он может быть использован как для ввода, так и для вывода. Пункт задания получает монопольный доступ к набору данных. Если существующий набор данных был ранее1/цахалогизирован или передается из предшествующего пункта задания, то в операторе DD достаточно кодировать параметр DSN. Во всех остальных слу¬ чаях необходимо еще кодировать параметры UNIT и VOL. Значение SHR определяет, что набор данных уже существует и может быть совместно использован несколькими заданиями одно¬ временно в режиме мультипрограммирования. Оно применяется для тех наборов данных, которые читаются только в текущий момент. Это значение необходимо использовать для многих системных библиотек, таких, как библиотека подпрограмм транслятора, биб¬ лиотека макроопределений, общая библиотека и т. д., так как они могут потребоваться любому заданию в произвольный момент времени. Диспозиция в случае нормального завершения (нормальная диспозиция) может быть опущена, если состояние набора данных не должно меняться. Это значит, что новый набор данных должен быть удален, а существующий набор данных должен продолжать существование. Диспозиция вызывает различные действия для томов прямого доступа и магнитных лент. Если набор данных на томе прямого доступа сохраняется после обработки, то память остается занятой. Если набор данных удаляется, то память освобождается. При ис¬ пользовании магнитной ленты как в случае/усохранения, так и в случае^даления данных она перематывается Hjjgj г р уж а ется. Дан¬ ные остаются на ленте. Окончательное решение о том, сохранить ли ленту с данными или стереть их с лепты, принимает оператор или кто-нибудь из обслуживающего персонала. Если набор данных на томе прямого доступа передается последующим пунктам зада¬ ния, то данные сохраняются в памяти. Когда набор данных переда¬ ется на хмагнитной ленте, то в процессе передачи между пунктами лента перематывается, но остается на устройстве. 79
Значение PASS подразумевает, что набор данных передается по¬ следующим пунктам того же задания. Окончательная диспозиция должна быть указана в одном из последующих пунктов. Если окончательная диспозиция не будет указана, то при завершении задания временные наборы данных удаляются, а невременные со¬ храняют исходное состояние (новые удаляются, а существующие— продолжают существовать). Для наборов данных на ленте, кото¬ рые передаются, не передается номер файла. Поэтому при исполь¬ зовании набора данных в последующих пунктах необходимо ука¬ зать его в параметре LABEL. Параметры UNIT и VOL в последу¬ ющих пунктах для передаваемых наборов данных указывать не следует, так как эта информация передается вместе с набором данных. //Р1 ЕХЕС PGM-Л //Ml // DD DSN = K, DISP= (, PASS), UNIT = 5050, VOL = SER = 233, SPACE =(240, 50) //Р2 //М2 ЕХЕС RGM = B DD DSN = K, DISP= (OLD, CATLG) В операторе ЛИ указано, что новый набор данных вырабатыва¬ ется в пункте Р1 и передается для использования в следующем пункте. Он размещается на устройстве типа 5050, на томе с серий¬ ным номером 238 и требует для своего размещения 50 записей (блоков по 240 байтов). В пункте Р2 того же задания этот набор данных используется. Параметры UNIT и VOL не требуются в опе¬ раторе М2. В этом пункте набор данных получает окончательную диспозицию CATLG, что ведет к каталогизированию набора дан¬ ных К. Значение KEEP подразумевает, что набор данных необходимо сохранить. Это относится только к невременным наборам данных. Для временных наборов данных диспозиция KEEP заменяется сис¬ темой на PASS. Если набор данных с диспозицией KEEP исполь¬ зуется в последующих пунктах того же задания или в других за¬ даниях, в операторе DD для него необходимо указать параметры DSN, UNIT, VOL, а также DISP. Значение DELETE обозначает, что набор данных должен быть удален. Для томов прямого доступа освобождается память, заня¬ тая удаляемым набором данных, и он становится недоступным для системы. Для магнитных лент в случае удаления набор дан¬ ных сохраняется. Действие по удалению заключается в том, что лента перематывается и разгружается, а оператору выдается сооб¬ щение, что набор данных на ленте удален. В действительности с данными ничего не происходит и они могут быть использованы в дальнейшем. Если удаляемый набор данных был каталогизиро¬ ван, то он выводится из каталога и удаляется. Значение CATLG означает, что набор данных должен быть ка¬ талогизирован. Это относится только к невременным наборам дан¬ ных. Для временных наборов данных диспозиция CATLG заменя¬ ется системой на PASS. Диспозиция CATLG аналогична KEEP, за
исключением того, что имя набора данных вместе с информацией о томе и устройстве регистрируется в каталоге системы. Номер' файла для набора данных на магнитной ленте также регистриру¬ ется в каталоге, однако тип метки и плотность не регистрируются. Все тома многотомных наборов данных также регистрируются в каталоге. Если многотомный каталогизированный набор данных будет расширяться, в дальнейших использованиях необходимо за¬ дать диспозицию DISP=(MOD, CATLG) чтобы зарегистрировать дополнительные тома в каталоге. Для на¬ боров данных с составным именем необходимо использовать утили¬ ту IEHPROGM, чтобы создать в каталоге записи для старших уровней. Если набор данных уже каталогизирован, то как диспозиция CATLG, так и диспозиция KEEP эквиваленты и не меняют сос¬ тояния набора данных (он остается каталогизированным). Реги¬ страция набора данных в каталоге позволяет в дальнейшем обра¬ щаться к нему только по имени, не указывая такой информации, как том, устройство, номер файла и т. д. Вся эта информация нахо¬ дится в каталоге и используется системой без дополнительного указания. Значение UNCATLG используется для удаления набора данных из каталога. Удаляются имя набора данных и вся сопутствующая информация, однако сам набор данных сохраняется. При после¬ дующих использованиях набора данных в операторе DD необхо¬ димо указывать всю информацию, которая требуется для сохра¬ няемых наборов данных (том, устройство и т. д.). Диспозиция в случае аварийного завершения (аварийная дис¬ позиция) указывается в качестве третьего подпараметра. Допуска¬ ются те же значения, что и для нормальной диспозиции, за исклю¬ чением PASS. Если аварийная диспозиция не указана и пункт за¬ дания завершился аварийно, применяется нормальная диспозиция. Например: DISP = (NEW, KEEP) эквивалентна DISP-(NEW, KEEP, KEEP) Для временных наборов данных независимо от того, что зако¬ дировано для аварийной диспозиции, всегда предполагается DELETE. Эквивалентны следующие параметры диспозиции. В каждый пункт входит список эквивалентных указаний парамет¬ ра DISP. L Отсутствие параметра DISP = NE\V DISP = (NEW, DELETE, DELETE) DISP = A\OD— для несуществующего набора данных 2. DISP = SHR DISP=(SHR, KEEP, KEEP) 6. Заказ ЗШ. 81
3. D1SP = M0D ) —ДЛЯ каталогизированных и DISP= (OLD, KEEP, KEEP) } передаваемых наборов данных 4. DISP= (, KEEP, DELETE) DIJSP= (NEW, KEEP, DELETE) 5. DISP = (OLD, ,CATLG) DISP= (OLD, KEEP, CATLG) 6. DISP=(OLD, PASS, KEEP) \ —для временных наборов DISP=(OLD, PASS, DELETE) J данных 7. DISP=(, KEEP) \ —для временных наборов DISP=(NEW, PASS, DELETE) j данных Параметр SPACE используется для распределения периферий¬ ной памяти. Он применяется только для устройств прямого досту¬ па. С помощью этого параметра можно затребовать необходимый для набора данных объем памяти в момент образования или рас¬ ширения (модификации) набора данных. В момент распределения памяти система выделяет набору дан¬ ных первичное количество памяти, заданное параметром. Оно мо¬ жет состоять либо из одного непрерывного участка, либо из сово¬ купности (до пяти) отдельных участков на одном и том же томе. Кроме того, можно определить вторичное количество памяти. Оно выделяется только в том случае, если первичного количества па¬ мяти для набора данных недостаточно. В этом случае система мо¬ жет выделить до 15 участков (экстентов), размер каждого из кото¬ рых определяется вторичным количеством. Суммарное количество первичных и вторичных участков не должно превышать 16 на том._ Вторичные участки выделяются по мере необходимости. Для многотомных наборов данных вторичные участки могут выделяться на всех томах, доступных для хранения набора данных. Если за¬ казанный объем памяти прямого доступа будет превышать объем, занятый набором данных, незанятый участок можно освободить, сделав его доступным для других наборов данных. Первым подпараметром параметра SPACE является указание единиц измерения памяти, в которых производится заказ. Значе¬ нием первого подпараметра может быть: а) TRK — память определяется в дорожках; б) CYL — память определяется в цилиндрах; в) число, обозначающее среднюю величину физического блока в байтах, в которых определяется запрос на память. Второй подпараметр состоит из списка чисел, определяющих соответственно первичное количество памяти, вторичное количест¬ во памяти и число записей для оглавления библиотеки или число цилиндров для индекса индексно-последовательного набора дан¬ ных. Третье число может быть задано только для библиотечных и индекспо-последовательных наборов данных. Расс м от р и м прим ер: SPACE = (800, (20, 100)) В параметре- задано, что набору данных необходимо выделить память для 20 блоков по 800 байтов (первичное количество). Коли- Ь2
чество дорожек, необходимых набору данных, рассчитывает сис¬ тема в зависимости от типа устройства, на котором выделяется па¬ мять. Если первичного количества окажется недостаточно, то по мере надобности будут выделяться участки памяти по 100 800-бай¬ товых блоков. Рассмотрим второй пример. Предположим, что необходимо вы¬ делить память для библиотечного набора данных. SPACE = (TRK, (20,, 25))- Данный параметр обозначает, что для библиотеки запрашива¬ ется первичное количество памяти в 20 дорожек. Вторичное коли¬ чество не требуется. Если первичного количества будет недостат точно, задание завершается аварийно. Для оглавления библиоте¬ ки запрашивается 25 записей. Первичное количество памяти выделяется на одном томе. Оно может быть выделено как непрерывным участком, так и состоя¬ щим из не более пяти отдельных участков. Если определяется специальный запрос на какой-либо том в параметре VOL, то систе¬ ма выделяет первичную память именно на этом томе. Когда это невозможно, задание получает аварийное завершение. Если в па¬ раметре VOL определяется неспециальный запрос (т. е. отсутству¬ ет указание серийного номера тома), то система выбирает некото¬ рый установленный на устройстве том или выдает запрос на монти¬ рование тома на устройство и пытается распределить набор дан¬ ных на этот том. Если в данном томе места недостаточно, то систе¬ ма выбирает другой том. Если запрос на память выдается в блоках, то система сама вы¬ числяет количество дорожек, необходимое для первичного количе¬ ства, исходя из размера блока, указанного в качестве первого па¬ раметра. Если задано вторичное количество, то для него количество дорожек вычисляется, исходя из значения подпараметра BLKS1ZE параметра DCB. Разница заключается в том, что в параметре SPACE указывается средняя длина блока, а в подпараметре BLKSIZE — максимальная для записей переменной и неопределен¬ ной длины. Если первичного объема памяти для набора данных не хвата¬ ет и при этом указано вторичное количество, система распределя¬ ет дополнительный объем памяти, равный вторичному количеству. При этом она пытается предоставить непрерывный участок памя¬ ти. Когда это не удается, система пытается предоставить вторич¬ ное количество памяти путем выделения нескольких участков, но не более пяти. Вторичное количество первоначально выделяется на том же томе, что и первичное. Если на томе нет достаточного количества памяти или при попытке выделения число участков превышает 16, система пытается выделить вторичное количество памяти на другом томе для многотомного набора данных или за¬ вершает задание, если набор данных должен размещаться на од¬ ном томе. 83
В последующих пунктах задания или последующих заданиях вторичное количество может быть изменено. Если первоначально набор данных был создан без указания вторичного количества, то его можно определить в последующих пунктах или заданиях. Если вторичное количество, указанное при создании набора данных, яв¬ ляется неудовлетворительным, то в дальнейшем можно указать новое значение вторичного количества. В обоих случаях новое зна¬ чение вторичного количества действует только на последующее распределение памяти и не меняет уже распределенную память. Ограничение на количество участков на томе не меняется от изме¬ нения вторичного количества памяти. Рассмотрим пример. Пусть для набора данных А в момент его создания указывается 15 блоков по 240 байтов. Вторичное коли¬ чество не указывается. //Ml DD DSN = A, DISP = (,CATLG), VOL = SER = B97, // UNIT = 5050, SPACE= (240, 15) В дальнейшем при модификации или расширении набора дан¬ ных может потребоваться вторичное количество. Пусть вторичное количество требуется участками по 90 блоков. Для этого необхо¬ димо кодировать следующий оператор: //TR DD DSN = A, DISP=(MOD, KEEP), // SPACE =(240, (0,90)) В силу того что набор данных А был каталогизирован в момент создания, в последнем операторе параметры UNIT и VOL отсутст¬ вуют. Необходимую информацию система получает из каталога. Предположим, что в процессе дальнейшей работы с набором данных А для его последующего расширения размер вторичного количества памяти необходимо увеличить до 270 блоков. Для этого необходимо кодировать следующий оператор: //М3 DD DSN = A, DISP = (MOD, KEEP), // SPACE = (240, (0,270)) Если оператор SPACE содержит запрос для образования биб¬ лиотечного или индексно-последовательного набора данных, то не¬ обходимо определить размер оглавления библиотеки в первом случае или размер области индекса во втором. Это определение де¬ лается с помощью третьего значения второго подпараметра. Сис¬ тема отличает тот или иной набор данных по параметру DCB. Для индексно-последовательного набора данных параметр DCB дол¬ жен иметь подпараметр DSORG—IS или DSORG — ISU. Оглавление библиотеки состоит из блоков по 256 байтов. Число, указанное в третьем значении, определяет количество таких блоков в оглавлении. Память для оглавления выделяется из первичного количества памяти для набора данных. Запись содержит имя раз¬ дела библиотеки или псевдоним (альтернативное имя), адрес раз¬ дела в библиотеке, а также другую информацию. Каждый раздел библиотеки должен иметь имя и может иметь до 16 псевдонимов. Таким образом, требуется одна запись на имя раздела и по одной 84
записи на каждый псевдоним. Исходя из этого, можно вычислить размер оглавления библиотеки. Пусть библиотека предназначена для хранения 8 программ, каждая из которых может иметь до 3 псевдонимов. Следователь¬ но, на каждую программу требуется 4 записи (1 имя + З псевдони¬ ма). Общее число записей для оглавления составляет 32. Если предположить, что каждый блок содержит 5 записей, то для оглав¬ ления требуется 7 блоков. Параметр SPACE может быть закодиро¬ ван следующим образом: SPACE= (CYL, (2, 1,7)) Это означает, что для библиотеки должно быть распределено 2 цилиндра для первичного количества памяти. Вторичное количе¬ ство составляет 1 цилиндр. В первичном количестве памяти долж¬ но быть выделено 7 записей по 256 байтов для оглавления библио¬ теки. Расширять оглавление в существующей библиотеке нельзя. Поэтому объем оглавления должен быть достаточно большим, что¬ бы не потребовалось его расширения в процессе использования библиотеки. Если потребуется расширить оглавление или библио¬ течный набор данных, необходимо использовать системную утилиту IEBCOPY, определив для нее новое значение параметра SPACE. Эта утилита позволяет заново создать библиотечный набор дан¬ ных, сохранив его содержимое, а также сжать набор данных, что¬ бы свободное место в библиотеке оставалось только в конце набо¬ ра данных. В случае, если параметр SPACE определяет запрос для образо¬ вания индексно-последовательного набора данных, третье значение второго подпараметра используется, когда область индекса нахо¬ дится внутри основной области, и определяет количество цилинд¬ ров для области индекса. Для индексно-последовательных набо¬ ров данных распределение памяти производится в цилиндрах, что¬ бы каждая область начиналась с первой дорожки цилиндра. Третьим подпараметром параметра SPACE может быть зако¬ дировано значение RLSE. Если это значение указано, то после за¬ крытия набора данных (макрокоманда CLOSE) неиспользованное место в наборе данных будет считаться свободным. Это позволяет при создании набора данных заказывать максимальный объем па¬ мяти и освобождать лишнюю память после создания набора дан¬ ных. Освободить неиспользуемую память можно и для существую¬ щего набора данных, закодировав параметр SPACE следующим образом: SPACE— (О, О, RLSE) Четвертым, подпараметром параметра SPACE может быть зако¬ дировано одно из следующих значений: CONTiG, MXIG или ALX. CONTIG обозначает, что заказанный объем памяти должен быть выделен непрерывным участком. MXIG подразумевает, что долж¬ на быть выделена наибольшая свободная область на томе, но она должна быть равной или больше заказанного объема памяти. ALX указывает, что необходимо выделить до пяти участков памяти, каж¬ 85
дый из которых равен или больше заказанного количества па¬ мяти. Рассмотрим примеры. Оператор SPACE= (TRK, (200,10),, CONTIG) запрашивает непрерывный участок памяти размером 200 дорожек. Оператор SPACE= (TRK, (200, 10),, MXIG) запрашивает непрерывный участок памяти, который должен быть наибольшим на томе и равен или больше 200 дорожек. Оператор SPACE= (TRK, (200, 10),,ALX) запрашивает пять участков, каждый из которых равен или больше 200 дорожек. Если на томе нет пяти таких участков, то система вы¬ делит максимальное число участков (по крайней мере один должен быть). Пятый подпараметр параметра SPACE может принимать зна¬ чение ROUND. Это значение указывается, если память запраши¬ вается в блоках. В этом случае система должна выделить участок памяти, который укладывается в границы цилиндров, т. е. начи¬ нается с первой дорожки цилиндра и заканчивается последней до¬ рожкой цилиндра (возможно другого). В рассмотренной выше форме кодирования параметра SPACE системе предоставлялась возможность выбрать участок (или на¬ бор участков) памяти, удовлетворяющий запросу. Однако суще¬ ствует другая форма кодирования параметра SPACE, которая поз¬ воляет указать относительный адрес первой дорожки набора дан¬ ных, но не позволяет указывать вторичное количество памяти для набора данных (первичное количество указывается в дорожках). Для библиотечных или индексно-последовательных наборов дан¬ ных указывается размер оглавления или размер области индек¬ са. В этом случае параметр SPACE имеет следующий формат: SPACE= (ABSTR, (а, Ь, с)) где а — первичное количество в дорожках; b — относительный ад¬ рес первой дорожки набора данных; с — размер оглавления или области индекса (с может отсутствовать). Участок памяти выде¬ ляется только в том случае, если требуемая память свободна. Если несколько наборов данных обрабатываются одновременно и синхронно, то целесообразно расположить их на томе прямого доступа таким образом, чтобы каждый набор данных занимал часть дорожек па цилиндре. Тогда необходимые для обработки в некоторый момент времени записи разных наборов данных будут находиться на одном цилиндре (или на одном из соседних цилинд¬ ров). В результате уменьшается время доступа, так как уменьша¬ ется количество перемещений механизма записи-считывания. Для такого распределения, использующего разделение цилиндров меж¬ ду несколькими наборами данных, применяется параметр SPLIT. т
Операторы DD для всех наборов данных, использующих раз¬ деление цилиндров, должны следовать друг за другом. Для первого набора данных должен быть указан параметр SPLIT, содержащий • число дорожек на цилиндре для первого набора данных, а также первичное и, если требуется, вторичное количество памяти для всех наборов данных, использующих разделение цилиндров. Для каждого следующего набора данных параметр SPLIT содержит только число дорожек на цилиндре. Следует иметь в виду, что вто¬ ричное количество памяти отводится для одного из наборов дан¬ ных без разделения цилиндров. Пусть три набора данных А, В и С необходимо разместить на томе магнитного диска типа 5050, используя разделение цилиндров. При этом набор данных А должен занимать 4 дорожки каждого цилиндра, а наборы данных В и С — по 3 дорожки. Общий объем памяти для всех наборов данных составляет 6 цилиндров; вторич¬ ное количество — 1 цилиндр. В этом случае необходимо закодиро¬ вать следующие операторы: I/m DD DSN = A, DISP= (, KEEP), UNIT = 5050, // SPLIT = (4, CYL, (6, 1)) //М2 DD DSN = B, DISP=(, KEEP), SPLIT = 3 //М3 DD DSN = C, DISP=(, KEEP), SPLIT = 3 Кроме указанной формы параметра SPLIT, может быть исполь¬ зована другая форма, в которой единицей измерения памяти явля¬ ется блок. В этом случае доля дорожек на цилиндре для каждого набора данных указывается в процентах от 100%. Процент указы¬ вается первым значением параметра. Второе значение определяет размер блока в байтах. Третье значение указывает первичное и вто¬ ричное количество. Эту информацию содержит только первый опе¬ ратор DD. Каждый следующий оператор содержит лишь указание процентов. Рассмотрим аналогичный пример. Пусть наборы данных А, В и С требуют 240 блоков по 800 байтов. Вторичное количество не требуется. Набор данных А занимает 40% дорожек на цилиндре, а наборы данных В и С — по 30%. В этом случае необходимо зако¬ дировать следующие операторы: //Ml DD DSN=A, DISP= (, KEEP), UNIT = 5050, I/ SPLIT = (40, 800,240) //М2 DD DSN = B, DISP= (, KEEP), SPLIT = 30 //М3 DD DSN = C, DISP= (, KEEP), SPLIT = 30 Параметр SUBALLOC предназначен для размещения несколь¬ ких наборов данных на одном и том же томе в определенной по¬ следовательности в непрерывном участке памяти. Участок памяти выделяется для первого набора данных, чтобы он вмещал все по¬ следующие наборы данных. Для первого участка необходимо ко¬ дировать оператор DD, указав параметр SPACE с подпараметром CONTIG. После этого можно кодировать операторы DD для набо¬ ров данных с параметром SUBALLOC со ссылкой на первый опе¬ ратор. Два первых подпараметра SUBALLOC кодируются анало¬ 87
гично первым подпараметрам SPACE. Третий подпараметр ис¬ пользуется для ссылки на исходный оператор DD. Предполагается, что количество памяти, указанное в параметре SUBALLOC, выде¬ ляется из общего количества, указанного в исходном операторе. Рассмотрим пример: //STl ЕХЕС RGA1-T //Ml DD DSN-A, DISP — (, KEEP), UN1T = 5050, 11 SPACE - (TRK, 500,, CONTIG) //М2 DD DSN —B, DISP- ( , KEEP), 11 SUBALLOC = (CYL, 25, Ml) //ST2 EXEC RGM-P //М3 DD DSN-C, DISP-(, KEEP), // SUBALLOC = (800, 400, STl.Ml) Оператор Ml запрашивает непрерывный участок памяти разме¬ ром 500 дорожек на томе устройства типа 5050. Оператор М2 за¬ прашивает участок памяти 25 цилиндров из того объема памяти, который был запрошен в операторе Ml. Оператор М3 запрашивает участок памяти размером в 400 блоков по 800 байтов из той же памяти. Параметр LABEL кодируется в следующих случаях: а) если необходимо обрабатывать набор данных, который не является первым на томе магнитной ленты; б) если необходимо указать тип метки для создаваемого набо¬ ра данных на случайной магнитной ленте; в) если набор данных имеет нестандартные метки; г) если необходимо определить срок сохранения набора дан¬ ных; д) если необходимо защитить набор данных паролем; е) если необходимо определить метод обработки набора дан¬ ных, отличный от того, который указан в макрокоманде OPEN. Параметр LABEL содержит необходимую информацию для перечисленных выше случаев. Наборы данных на устройствах пе¬ риферийной памяти, как правило, имеют метки. Каждый набор на теме прямого доступа обязательно имеет метку, которая находит¬ ся в оглавлении тома. Эти наборы данных обязательно имеют стандартные метки, а также могут иметь метки пользователя. Наборы данных на магнитной ленте могут иметь стандартные метки, нестандартные метки, а также быть вообще без меток. Метки набороз данных на магнитной ленте располагаются перед набором данных и после него. Первый подпараметр параметра LABEL используется только для наборов данных на магнитной ленте. Он определяет последо¬ вательный номер набора данных, подлежащего обработке, если он не является первым. В результате лента устанавливается таким образом, чтобы можно было начать работу с набором данных. Значением первого подпараметра должно быть число, состоящее не более чем из четырех цифр. Если первый подпараметр опущен или указано значение 0, то предполагается, что задан первый на¬ бор данных. 88
Второй подпараметр указывает тип метки (точнее, тип обра¬ ботки меток, который зависит от типа метки). Допускаются сле¬ дующие значения для второго подпараметра: а) SL —для стандартных меток; б) SUL —для стандартных меток и меток пользователя; в) NL —отсутствие меток; г) NSL — для нестандартных меток; д) BLP —для указания системе, что метки не следует обра¬ батывать. Если набор данных имеет стандартные метки, то второй подпа¬ раметр можно опустить. Для стандартных меток (SL и SUL) си¬ стема осуществляет проверку правильности установки тома на устройство. Для нестандартных меток эту проверку должна делать специальная программа обработки нестандартных меток, разрабо¬ танная применительно к конкретным условиям эксплуатации вы¬ числительной машины и включенная в систему. Если указано BLP или NL, правильность установки ленты должен обеспечивать опе¬ ратор. Если указано NL, набор данных не должен иметь стандарт¬ ных меток. Для каталогизированных наборов данных информация о типе метки в каталоге не регистрируется. Следовательно, если определяется тип обработки, отличный от стандартного, необходи¬ мо указывать значение второго подпараметра, даже если набор данных каталогизирован. В качестве третьего подпараметра может быть приведено зна¬ чение PASSWORD, которое говорит системе, что набор данных должен иметь парольную защиту. Это значит, что набор данных не может быть использован, если оператор не введет с консоли правильный пароль. В качестве четвертого подпараметра может быть указано IN, если набор данных должен обрабатываться только для ввода, либо OUT, если набор данных должен обрабатываться только для вывода. В качестве пятого подпараметра можно дать либо период хра¬ нения набора данных в днях, либо дату, до которой необходимо хранить набор данных. Период хранения указывается в виде: RETPD = число Число может содержать не более трех цифр и определять коли¬ чество дней, в течение которых необходимо хранить набор данных. Срок хранения указывается в виде: EXPDT=число Число должно состоять из пяти цифр, где первые две цифры обозначают год, а оставшиеся три — порядковый номер дня в году. Например, 74032 обозначает 1 февраля 1974 г, 89
3.5. ОПЕРАТОРЫ ПРОЦЕДУРЫ И КОНЦА ПРОЦЕДУРЫ Оператор процедуры имеет следующий формат: //имя PROC операнды комментарии Оператор PROC является обязательным первым оператором процедуры во входном потоке. Он может быть также первым опе¬ ратором каталогизированной процедуры. Поле операндоз опера¬ тора содержит список параметров процедуры с указанием их стандартных значений, т. е. тех значений, которые присваиваются параметрам, если при вызове процедуры эти значения не опреде¬ лены. Параметры в процедуре отмечаются тем, что их первым сим¬ волом является &, за которым следует имя. В поле операндов параметры указываются только по имени. Список параметров процедуры в операторе PROC содержит только те параметры, для которых определяется стандартное зна¬ чение. Чтобы присвоить параметру некоторое стандартное значе¬ ние, необходимо кодировать: параметра значение или параметр =* В последнем случае считается, что в качестве стандартного значения параметр заменяется на пусто. Рассмотрим пример про¬ цедуры: //РР PROC TYPE = 5050, STATUS = //PI EXEC RGM = A //MM DD DSN = &NAME, DISP= (&STATUS, KEEP), // UNIT=&TYPE Процедура РР содержит три параметра ’ NAME, STATUS и TYPE. Для двух из них в операторе PROC определены стандарт¬ ные значения. Таким образом, при вызове данной процедуры не¬ обходимо обязательно определить значение для параметра NAME, а для остальных значение можно не определять, если стандартное значение является удовлетворительным. Допустим, некоторый пункт задания использует процедуру РР следующим образом: //STl ЕХЕС РР, NAME = КАТ Процедура будет выполнена как следующий пункт задания: //PI EXEC PGM=A //ММ DE) DSN = КАТ, DISP=(, KEEP), II UNIT = 5050 Теперь рассмотрим другое использование процедуры: //ТТ ЕХЕС РР, NAME = КАТ, STATUS = OLD, 11 TYPE = 5010 Процедура будет выполнена как следующий пункт задания; //PI ЕХЕС PGM = A //ММ DD DSN = RAT, DISP= (OLD, KEEP), II UNIT=5010 90
Оператор конца процедуры PEND должен быть последним оператором процедуры во входном потоке. Он имеет следующий формат: //имя PEND комментарии Имя и комментарии в операторе могут отсутствовать. 3.6. ПРОЦЕДУРЫ Процедура может содержать один или несколько операторов ЕХЕС, за которыми следуют необходимые операторы DD. Проце¬ дура не может содержать операторов задания, операторов JOBLIB DD, операторов DD с параметрами DATA или *, операто¬ ров ЕХЕС, вызывающих другие процедуры, ограничительных и пустых операторов. Процедура можег находиться в библиотеке процедур, а также может быть закодирована во входном потоке, среди операторов, составляющих задание. В последнем случае процедура доступна только одному заданию, в котором она нахо¬ дится. Чтобы вызвать каталогизированную процедуру, необходимо в операторе ЕХЕС указать имя процедуры, под которым она запи¬ сана в библиотеке процедур. Если процедура имеет оператор PROC в качестве первого оператора, то его имя не рассматри¬ вается как имя процедуры и может вообще отсутствовать. Запись новых и модификация существующих процедур в библиотеке осу¬ ществляется утилитой IEBUPDTE. Процедуры во входном потоке следует помещать перед первым оператором ЕХЕС. Каждая процедура должна начинаться опера¬ тором PROC и заканчиваться оператором PEND. Допускается до 15 процедур в каждом задании. Оператор PROC обязательно дол¬ жен иметь имя, которое является именем процедуры во входном потоке. Вызов процедуры осуществляется путем указания этого имени в операторе ЕХЕС. При вызове процедуры необходимо присвоить значения пара¬ метрам процедуры. Параметрам, имеющим стандартные значения, присвоенные в процедуре, можно не присваивать новые значения при вызове процедуры. При вызове процедуры можно изменить или добавить пара¬ метры операторов ЕХЕС процедуры. Для этого в операторе вызо¬ ва процедуры необходимо кодировать: параметр, имя пункта процедуры = значение Пусть процедура Р содержит следующие операторы ЕХЕС: //STl ЕХЕС PGM = A, PARM = 777 //ST2 ЕХЕС PGM = B, COND= (12, LE) При вызове процедуры необходимо значение параметра PARM опустить, добавить к оператору ST1 параметр COND=(12, EQ) и заменить в операторе ST2 параметр COND на COND=(12, EQ). 91
Для этого необходимо кодировать следующее обращение к проце¬ дуре: //РР ЕХЕС P. PARM. STl=,COND. ST I = (12. EQ). // COND. ST2= (12, EQ) После подстановки параметров получим: //STI ЕХЕС PGM = A, COND = (12, EQ) //ST2 EXEC PGM = B, COND = (i 2, EQ) При вызове процедуры можно изменить или добавить парамет¬ ры операторов DD процедуры. Для этого к оператору вызова про¬ цедуры необходимо добавить оператор DD следующего формата: //имя пункта процедуры, имя dd DD параметр=значение Пусть процедура Р содержит следующие операторы: //TI ЕХЕС PGA1 = A //Ml DD DSN = КАТ, DISP= (OLD, KEEP), II DCB= (BLKSIZE= 160, RECFM = F), VOL = SER = 111 При вызове процедуры необходимо заменить имя набора дан¬ ных на CAT, добавить указание устройства 5050 и убрать указание серийного номера тома. Для этого необходимо кодировать следую¬ щие операторы: //РР ЕХЕС Р //Т1.М1 DD DSN-CAT, UN IT = 5050. VOL = После подстановки параметров получим: ЦИ ЕХЕС PGM = A //Ail DD DSN = CAT, DISP-(OLD, KEEP), II DCB=(BLKSIZE=160, RECFM = F), UN IT = 5050 Если в операторе DD необходимо изменить только один под¬ параметр DCB, то не следует кодировать все подпараметры. На¬ пример, если в предыдущем примере размер блока нужно изме¬ нить на 320, следует кодировать: //РР ЕХЕС Р //Tl.Ail DD DCB=(BLKSIZE = 320) При вызове процедуры можно добавить дополнительный опе¬ ратор DD к пункту процедуры. Для этого к оператору вызова про¬ цедуры необходимо добавить новый оператор DD, у которого в качестве имени требуется указать: //имя пункта процедуры, имя dd DD . . . Пусть к процедуре Р из предыдущего примера надо добавить оператор DD с именем ММ. Для этого необходимо кодировать следующие операторы: //РР ЕХЕС Р //Т1.ММ DD SYSOUT = A Имя добавляемого оператора DD должно отличаться от имен операторов DD пункта процедуры. Все замены, дополнения и изменения в операторах процедуры выполняются только в момент вызова процедуры и не меняют копию процедуры в библиотеке или во входном потоке. 02
3.7. ОПЕРАТОРЫ КОМАНД, КОММЕНТАРИЕВ, ОГРАНИЧИТЕЛЬНЫЕ И ПУСТЫЕ ОПЕРАТОРЫ Оператор команд предназначен для ввода команд через вход¬ ной поток. Команды, находящиеся во входном потоке, выполняют¬ ся в момент ввода входного потока. Поэтому в мультипрограм¬ мных режимах команды и задания, с которыми они вводятся, будут выполняться в разное время. Формат операторов команды // команда, операнды комментарии Оператор комментариев предназначен для записи любой ин¬ формации, которая может быть полезна для понимания использо¬ вания или назначения операторов языка управления заданиями. Оператор комментариев имеет следующий формат: //* комментарии Ограничительный оператор предназначен для указания конца данных во входном потоке. В однопрограммном режиме ограни¬ чительный оператор обязателен в конце набора данных. В мульти¬ программных режимах его можно не употреблять в конце набора данных, который начинается оператором DD*, однако его обяза¬ тельно следует употреблять в конце набора данных, который начи¬ нается оператором DD DATA. Ограничительный оператор имеет следующий формат: /* комментарии Пустой оператор указывает системе на конец задания. Считав пустой оператор, система помещает задание во входную очередь в мультипрограммном режиме или инициирует его выполнение в однопрограммном режиме и начинает искать следующий оператор задания. Применение пустого оператора для указания конца зада¬ ния необязательно. Пустой оператор имеет следующий формат.: // 3,8. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРОВ ЯЗЫКА УПРАВЛЕНИЯ ЗАДАНИЯМИ Пусть некоторый набор данных создается программой А, моди¬ фицируется программой В и используется программой С. После этого он не нужен. Все три программы выполняются последова¬ тельно, как пункты одного задания. Класс задания В, приори¬ тет— 7. Объем памяти, необходимый для выполнения задания, составляет 50К. Имя задания ВТ. Набор данных размещается на диске 5050. Первичное количество памяти 25 дорожек, вторич¬ ное— 5. Так как набор данных существует только в пределах одного задания, он является временным. Программа А использует входной набор данных, находящийся во входном потоке. Програм¬ ма С вырабатывает выходной набор данных на устройство систем¬ 93
ного вывода (класс А). Задание может выглядеть следующим образом: //ВТ JOB CLASS = B, PRTY = 7, REGION = 50K h'STi EXEC PGM = A //DDNl DD UNIT=5050,DISP= (NEW, PASS), // SPACE=(TRK, (25,5)) //INPUT DD * входной набор данных /* //ST2 EXEC PGM = B //DDN2 DD DSN = =;: .ST1.DDN1, DISP= (MOD, PA55) ,7ST3 EXEC PGM = C //DDM3 DD DSN = :i=. ST1.DDN1, DISP= (OLD, DELETE) //OUTPUT DD SYSOUT = A Так как набор данных является временным, имя ему можно не присваивать. Если тот же набор данных используется в различных заданиях, то он не может быть временным. Пусть его имя будет BETA и он располагается на томе 222222 устройства 5050. Необходимо выпол¬ нить те же самые программы, но в различных заданиях. Набор данных BETA сохранить. Предусмотреть автоматический рестарт пункта задания для программ А и С. Задание, создающее набор данных BETA: //BTl JOB CLASS = B, PRTY=7, REGION = 50K I/ST1 EXEC PGM=A, RD = R //DDNl DD DSN = BETA, DISP= (NEW, KEEP, DELETE), // UN IT = 5050, VOL = SER = 222222, // SPACE =(TRK, (25,5)) //INPUT DD входной набор данных /* Задание, модифицирующее набор данных BETA: //ВТ2 JOB CLASS = B, PRTY=7, REGION = 50K) //ST2 EXEC PGM = B //DDN2 DD DSN = BETA,UNIT=5050, II VOL=SER=222222, DISP= (MOD, KEEP) Задание, использующее набор данных BETA: //ВТ2 JOB CLASS = B,PRTY=7,REGION=50K //ST3 EXEC PGM=C, RD = R //DDN3 DD DSN = BETA, UNIT=5050, // VOL=SER=222222, DISP= (OLD, DELETE, KEEP) //OUTPUT DD SYSOUT=A Пусть необходимо выполнить те же действия, но набор данных BETA каталогизируется при создании.
Задание, создающее набор данных BETA: //ВТ1 JOB CLASS = B,PRTY=7,REGION = 50K //STl EXEC PGM=A, RD = R //DbNl DD DSN=BETA,D1SP= (NEW, CATLG, DELETE), // UNIT=5050,VOL=SER=222222, // SPACE =(TRK, (25,5)) //INPUT DD * • • * входной набор данных I* Задание, модифицирующее набор данных BETA: //ВТ2 JOB CLASS=B,PRTY=7,REGION=50K // ST2 EXEC PGM=B //DDN2 DD DSN=BETA,DISP= (MOD, CATLG) • •• »«••«>•••• Задание, использующее набор данных BETA: //ВТЗ JOB CLASS = B, PRTY=7, REGION~50K //ST3 EXEC PGM = C, RD^=R //DDN3 DD DSN = BETA, DISP= (OLD, DELETE) //OUTPUT DD SYSOUT = A
4, СУПЕРВИЗОР В 4.1. ОБЩИЕ СВЕДЕНИЯ Супервизор входит в состав управляющей программы. Он пред¬ ставляет собой набор программ, выполняемых в ответ на запросы, поступающие из различных источников. Запросы реализуются через систему прерываний. Источниками запросов могут быть как аппаратные средства (завершение операции ввода-вывода, истече¬ ние заданного интервала времени, внешние события, сбои в аппа¬ ратуре и т. д.), так и программы. Запросы из программ представ¬ ляют собой запланированные обращения к супервизору (напри¬ мер, запрос на инициирование операции ввода-вывода), а также незапланированные действия программ (например, нарушение защиты памяти, переполнение и т. д.). Обслуживая запросы, су¬ первизор выполняет управляющие действия, связанные с обеспе¬ чением загруженности центрального процессора и координацией использования других ресурсов вычислительной системы. Большинство программ супервизора является составной ча¬ стью управления задачами. Супервизор ввода-вывода входит в состав управления данными. Многие программы супервизора включены в ядро операционной системы и постоянно находятся в оперативной памяти. Некоторые программы супервизора являются транзитными и загружаются в память по мере надобности. Про¬ граммы супервизора выполняются в состоянии «супервизор», что позволяет им выполнять привилегированные команды. В настоящей главе даются сведения о тех средствах суперви¬ зора, которые могут быть использованы с помощью системных макрокоманд. Рассматриваются стандартные соглашения о связях между программами, принятые в операционной системе, а также методика использования системных макрокоманд. Как правило, использование средств супервизора совпадает для всех трех ре¬ жимов управляющей программы, что обеспечивает программную совместимость этих режимов. Различия, зависящие от режима, особо оговаризаются в тексте. При описании макрокоманд применяются следующие синтакси¬ ческие обозначения. 1. Слова или наборы слов, записанные строчными буквами с допустимым употреблением цифр и пробелов, представляют собой синтаксические переменные, которые при употреблении макро¬ команды необходимо заменить на соответствующие значения. Способ замены дан в описании макрокоманды. Все остальные зиа- 96
ки, присутствующие в описании макрокоманды, в том числе и про¬ писные буквы, должны употребляться так, как они записаны. Например, регистр 1,Т предусматривает, что «регистр 1» при написании макрокоманды необходимо заменить на конкретное значение, а сочетание «,Т» непосредственно употребить в макрокоманде. После замены ука¬ занная выше запись может выглядеть следующим образом:' 2,Т где 2 является значением переменной «регистр 1». 2. Фигурные скобки { }, (содержащие несколько расположен¬ ных столбиком операндов, обозначают, что нужно сделать выбор одного из них. Например, обозначение { в} говорит о том, что необходимо употребить либо А, либо В. 3. Квадратные скобки [ ], содержащие один или несколько расположенных столбиком операндов, указывают на то, что нужно сделать выбор одного из них либо опустить запись. Например, обозначение в ] говорит о том, что можно употребить либо А, либо В, либо ничего не использовать при написании макрокоманды. 4. Многоточие «...» обозначает, что операнд, предшествующий многоточию, может быть повторен подряд несколько раз. Напри¬ мер, обозначение [цифра], . . . свидетельствует о том, что цифра может употребляться несколько раз либо не употребляться совсем, так как она заключена .в квад¬ ратные скобки. С другой стороны, обозначение цифра, . . . указывает на то, что цифра должна употребляться один или не¬ сколько раз. В обоих случаях переменная цифра должка быть заменена на конкретное значение. 4.2. СОГЛАШЕНИЯ О СВЯЗЯХ В операционной системе ОС ЕС используется модульный прин¬ цип программирования. Модуль может объединяться и использо¬ ваться с другими модулями, передавая им управление или: полу¬ чая управление от них. Для этого нужно соблюдать некоторые соглашения. К ним относится, например, необходимость сохра¬ нять содержимое регистров общего назначения при входе в про¬ грамму и восстанавливать их при выходе. Соглашения необходи- 7. Заказ ЗЦ1, У 7
iv]о соблюдать, если заранее неизвестно,, в каких сочетаниях про¬ граммы будут использоваться. В определенных случаях допустимы некоторые нарушения со¬ глашений. Например, если известно, что программа не обращает¬ ся к другим программам и не использует системных макрокоманд, то можно сохранять содержимое только тех регистров, которые используются в программе. Передачи и возврат управления, вы¬ полняемые с помощью операционной системы (например, в дина¬ мических структурах), требуют тщательного соблюдения согла¬ шения о связях. Соглашения о связях затрагивают сохранение и восстановление содержимого регистров, использование регистров связи при пере¬ дачах управления, способы передачи и возврата управления. При обсуждении соглашений всегда рассматривается пара, состоящая из вызываемой и вызывающей программ. Эти соглаше¬ ния относятся ко всем вызываемым и вызывающим программам в системе. Каждая программа, которая получает управление при выполнении пункта задания от другой программы, первоначально является вызываемой программой. Во время выполнения этой про¬ граммы может потребоваться работа какой-либо другой програм¬ мы и первая программа становится вызывающей. 4.3. РЕГИСТРЫ СВЯЗИ Регистры общего назначения 0, 1, 13, 14 и 15 называются реги¬ страми связи и используются управляющей программой. Рекомен¬ дуется использовать их и при передаче управления от одной про¬ граммы пользователя к другой независимо от того, осуществляется эта передача посредством управляющей программы или нет. Со¬ держимое регистров связи может изменяться управляющей про¬ граммой при выполнении передач управления и при использовании системных макрокоманд. Управляющая программа не изменяет содержимое регистров 2—12. Регистры 0 и 1 используются для передачи параметров управ¬ ляющей или вызываемой программе. В системных макрокомандах значения параметров засылаются в регистр 0 или 1 или оба реги¬ стра. После этого производится обращение к программе суперви¬ зора, использующей эти параметры. Эти действия выполняются в макрорасширении системной макрокоманды. Сама программа супервизора в макрорасширение не входит. При передаче параметров от одной программы к другой число параметров может быть произвольным. В этом случае в регистр 1 записывается адрес списка параметров (рис. 18). Список парамет¬ ров содержит одно слово на каждый параметр, выравненное по границе полного слова. Каждое слово содержит начальный адрес значения соответствующего параметра. Последнее слово в. списке параметров отмечается «1» в старшем бите. Таким образом управ¬ ляющая программа передает программе пункта задания информа- 98
Адрес списка п параметров Список параметров Адрес параметра f Адрес параметра 2 1^Адрес параметрам Граница слова Параметр Г | Параметр 2 | Параметр N дню из поля PARM оператора ЕХЕС. В этом случае список егистР* параметров состоит из одного слова, так как считается, что передается один параметр. Регистр 13 содержит адрес области сохранения для про¬ граммы, которой передается управление. Управляющая про¬ грамма может использовать эту область при обработке за¬ просов, сделанных с помощью системных макрокоманд. Про¬ грамма, которой передается управление, может использо¬ вать эту область сохранения с помощью макрокоманды SAVE. Регистр 14 при передаче уп¬ равления вызываемой програм¬ ме содержит либо адрес воз¬ врата к вызывающей програм¬ ме, либо адрес возврата к уп¬ равляющей программе, куда должна передать управление вызываемая программа после завер¬ шения ее работы. В макрорасширениях большинства макрокоманд имеется команда, которая загружает регистр 14 адресом следую¬ щей команды. Для возврата управления вызывающей программе может быть использована команда безусловного перехода по ре¬ гистру 14. При этом необходимо обеспечить сохранность содержи¬ мого этого регистра. Регистр 15 может быть использован различным образом. При передаче управления из управляющей программы в нем находится адрес точки входа. При передаче управления любой другой про¬ грамме необходимо адрес точки входа загрузить в регистр 15. В макрорасширениях системных хмакрокоманд в регистр 15 засы¬ лается адрес списка параметров для управляющей программы. При возврате управления из вызываемой программы регистр 15 может содержать код возврата. Рис. 18. Передача параметров 4.4. СОХРАНЕНИЕ РЕГИСТРОВ Первым действием каждой программы должно быть сохране¬ ние содержимого общих регистров, которые изменяются в процес¬ се выполнения программы. Регистры 0, 1, 13, 14, 15 необходимо сохранять в любом случае, так как их содержимое, а также при¬ знак результата изменяются при использовании системных мак¬ рокоманд супервизора и управления данными. Общие регистры запоминаются в области сохранения разме¬ ром 18 слов, которая должна выделяться вызывающей програм- 7* 99
Адрес Содержимое 0—3 Используется программами, написанными на ПЛ/1 4-7 Адрес предыдущей области сохранения (запоминается вызывающей программой) 8—11 Адрес следующей области сохранения (запоминается текущей программой) 12—15 Регистр 14 (адрес возврата) 16—19 Регистр 15 (адрес точки входа) 20—23 Регистр 0 24—27 Регистр 1 28—31 Регистр 2 32—35 Регистр 3 36—39 Регистр 4 40-43 Регистр 5 44—47 Регистр 6 48-51 Регистр 7 52—55 Регистр 8 56—59 Регистр 9 60-63 Регистр 10 64—67 Регистр 11 68-71 Регистр 12 Рис. 19. Формат области сохранения мой. На рис. 19 приведен формат этой области. При передаче уп¬ равления вызываемой программе адрес области сохранения дол¬ жен содержаться в регистре 13. Содержимое каждого регистра запоминается в определенном месте области сохранения. Напри¬ мер, регистр 0 всегда запоминается в 20—23 байтах области со¬ хранения, регистр 2 — в 28—31 байтах и т. д. Проще всего запо¬ минать все регистры. При этом последующие изменения в про¬ грамме не приведут к изменению содержимого регистров. Для сохранения регистров можно использовать команду груп¬ повой записи (STM) либо макрокоманду SAVE. Последняя имеет следующий формат: [имя] SAVE (регистр 1 [, регистр 2] ), [Т] [, идентификатор] Регистры 1 и 2 обозначают, от какого и до какого регистра не¬ обходимо осуществить сохранение. Регистры указываются в том же порядке, как при использовании команды групповой записи. Операнд Т свидетельствут, что необходимо произвести сохранение регистров 14 и 15. В качестве идентификатора может быть любое имя, состоящее не более чем из 70 знаков, или звездочка. Если указана звездочка, то подразумевается имя макрокоманды. Если оно отсутствует, то подразумевается имя программной секции. В случае его отсутст¬ вия это поле игнорируется. Если указан идентификатор одним из перечисленных способов, то в макрорасширении, отступив 4 байта после адреса, приведен¬ ного в регистре 15 (адрес точки входа), помещается 1 байт с ука- 100
замнем длины идентификатора, а вслед за мим — сам идентифика¬ тор. Необходимо, чтобы макрокоманда SAVE обязательно была первой командой в точке входа. 'Первые 4 байта предназначены для команды перехода к коман¬ де, следующей за полем идентификатора. Поле идентификатора позволяет очень быстро найти точку входа при анализе дампов (распечаток) памяти, так как идентификатор будет напечатан как содержимое соответствующих байтов памяти. Все области сохранения образуют список. Каждая область связана с предыдущей и последующей областями. Второе слозэ содержит адрес предыдущей области сохранения (для самой пер¬ вой— 0), третье слово — адрес последующей области сохранения (для самой последней — 0). Пр имер списка трех областей сохра¬ нения приведен на рис. 20. После возврата управления из программы ее область со¬ хранения может быть помечена как не используемая установ¬ кой в единицу всех битов стар¬ шего байта четвертого слова области сохранения (такое средство существует в макро¬ команде RETURN). Это очень удобное средство при анализе дампов, позволяющее установить активную область сохранения и проанализировать содержимое неактивных, но использовавшихся ранее областей сохранения. Так, на рис. 20 — две активные области сохранения и одна (третья) неиспользуемая область. При передаче управления область сохранения обеспечивается вызывающей программой. Ее адрес передастся в регистр 13. Со¬ хранение регистров осуществляется в вызываемой программе. Вы¬ деление памяти для области сохранения в вызывающей програм¬ ме может быть сделано различным способом. Самый простой спо¬ соб — это резервирование восемнадцати полных слов с похмощью команды DS или DC. Этот способ не может быть использован в реентерабельных программах, так как при каждом повторном вхождении в программу будет использоваться одна и та же об¬ ласть сохранения. Ее содержимое от первого вхождения будет перекрыто содержимым от второго вхождения. В реентерабельных программах память для области сохране¬ ния необходимо запрашивать макрокомандой GETMAIN. При по¬ вторном вхождении в такую программу будет выделен новый уча¬ сток памяти для области сохранения, отличный от того, который был выделен при первом вхождении. Восстановление регистров из области сохранения производится при возврате управления из вызываемой программы. Восстанов¬ ление может быть выполнено командой групповой загрузки (LM) либо макрокомандой RETURN. При использовании макрокоманды RETURN необходимо, чтобы регистр 13 содержал адрес области Рис. 20. Список областей сохранения .101
сохранения, а регистр 14 — адрес возврата. При выполнении згой макрокоманды в регистр 15 засылается код возврата. Код возвра¬ та может быть заслан в регистр 15 как до макрокоманды, так и в самой макрокоманде. Макрокоманда имеет следующий формат: [имя] RETURN [(регистр 1 [, регистр 2])] [, Т] Г, RC = число 1 l,RC=(15) J Регистры 1 и 2 указывают границы восстановления. Регистры необходимо указывать в том же порядке, как при использовании команды групповой загрузки. Операнд Т обозначает, что в старший байт четвертого слова области сохранения необходимо занести все единицы, чтобы отме¬ тить ее как неиспользуемую. Последний операнд определяет код возврата, который пред¬ ставляет собой число, кратное 4, в диапазоне 0—4095. Нуль яв¬ ляется кодом нормального возврата. Предполагается, что вызы¬ вающая программа умеет анализировать коды возврата. Первая запись используется, если код возврата определяется в самой мак¬ рокоманде. Вторая запись говорит о том, что код возврата ранее был установлен в регистре 15 и его не следует изменять в макро¬ расширении. Отсутствие этого операнда указывает на то, что код возврата не устанавливается, а содержимое регистра 15 может быть восстановлено из области сохранения, если это предусмотре¬ но в первом операнде. Макрорасширения макрокоманд SAVE и RETURN выполняют все необходимые действия без обращения к программам супервизора. 4.5. ПЕРЕДАЧИ УПРАВЛЕНИЯ Рассмотрим два типа передач управления с возвратом и без возврата. Передача управления с возвратом предполагает, что после выполнения вызываемой программы управление должно быть передано в вызывающую программу по некоторому адресу возврата. Передача управления без возврата предполагает, что после выполнения вызываемой программы управление должно быть передано вызывающей программе более старшего уровня (т. е. вызывающей программе для вызывающей программы). Рис. 21 иллюстрирует эти положения. В случае б программа 2 передает управление без возврата программе 3. Возврат из программы 3 должен быть осуществлен к программе 1 по адресу возврата, который был передан програм¬ ме 2. Прежде чем осуществить передачу управления без возврата, необходимо выполнить подготовительные действия, которые бы обеспечили правильное выполнение возврата управления. Все перечисленное относится в равной мере как к программам простой структуры, так и к программам динамической структуры. В рассмотренном примере все три программы могут входить в мо¬ дуль простой структуры, а передачи управления выполняются 102
Программа г Программа 2' Программа 3> а Программа 1 Программа 2 Программа 3 6 Рис. 21. Передачи управления с возвратом и без воз¬ врата (символом X помечен адрес возврата управления в программу 1): а — передача управления с возвратом; б — передача управления из программы 2 в программу 3 без возврата внутри этого модуля. Может быть также, что передачи между этими программами осуществляются динамически с помощью соответствующих макрокоманд. Если при передаче управления без возврата вызывающая программа (в примере программа 2) больше не нужна, память, занимаемая этой программой, может считаться свободной. При передаче управления с возвратом в простой структуре необходимо выполнить следующие действия: а) выделить область сохранения, адрес которой занести в ре¬ гистр 13 (для всех передач управления из одной и той же про¬ граммы может быть использована одна область сохранения); б) адрес точки входа, по которому производится передача уп¬ равления, занести в регистр 15; в) построить список параметров, адрес которого занести в регистр 1; г) обеспечить, чтобы в регистре 14 был адрес возврата (адрес возврата может указывать адрес команды, следующей за коман¬ дой передачи управления, а также адрес любой другой команды внутри рассматриваемой программной секции); д) передать управление по адресу, содержащемуся в регист¬ ре 15. Перечисленные выше действия программист может выполнить, предусмотрев соответствующие команды в своей программе. Для юз
упрощения программирования можно воспользоваться макро¬ командой CALL, которая имеет следующий формат: Гимя1 CALL j имя точки входа! [, (параметры) [ , VL]] [, Ш=*число] I (15) J Имя точки входа можно указать в макрокоманде либо предва¬ рительно заслать ее адрес в регистр 15. В последнем случае вме¬ сто имени точки входа необходимо записать (15). В качестве второго операнда указываются имена параметров (по не сами параметры), передаваемых вызываемой программе. Если адрес некоторого параметра находится в регистре, то можно вместо имени параметра указать этот регистр, заключив его в круглые скобки, например (10). Параметры отделяются друг от друга запятой. В макрорасширении строится список параметров, адрес которого засылается в регистр 1. Если указан операнд VL, адрес последнего параметра в списке отмечается единицей в старшем бите. Последний операнд форми¬ рует пустую команду, не выполняющую никаких действий (NOP), с кодом 4700 в двух старших байтах. В двух младших байтах ко¬ дируется число, указанное в операнде, которое не должно превы¬ шать значение 216—1. При этом в регистр 14 в качестве адреса возврата засылается адрес этой команды. Благодаря этому прие¬ му в вызываемой программе можно проверить указанное число, обратившись по адресу в регистре 14. Это можно использовать, например, для определения, какая по счету макрокоманда CALL в вызывающей программе осуществила передачу управления в вызываемую программу. Если данный операнд не кодируется, то возврат управления производится к команде, следующей за мак¬ рокомандой. Перед употреблением макрокоманды CALL необходимо обес¬ печить область сохранения и заслать ее адрес в регистр 13. В случае передачи управления без возврата в простой струк¬ туре необходимо выполнить следующие действия: а) обеспечить, чтобы регистр 14 содержал адрес возврата в вызывающую программу более старшего уровня (т. е. в вызываю¬ щую программу по отношению к рассматриваемой программе); б) восстановить содержимое регистров 2—12; в) восстановить в регистре 13 адрес области сохранения, ис¬ пользованной в текущей программе; она же будет использоваться в вызываемой программе; г) занести в регистр 15 адрес точки входа, по которому произ¬ водится передача управления; д) построить список параметров, адрес которого занести в регистр 1; е) передать управление по адресу, содержащемуся в реги¬ стре 15. При возврате управления в вызывающую программу, незави¬ симо от типа передачи управления, необходимо выполнить сле¬ дующие действия: т
а) обеспечить, чтобы в регистре 13 содержался адрес теку¬ щей области сохранения; f б) восстановить содержимое регистров 2—12 и 14; в) заслать код возврата, кратный 4, в регистр 15, либо восста¬ новить его содержимое из области сохранения, либо не предприни¬ мать ничего в отношении регистра 15; г) передать управление по адресу, содержащемуся в реги¬ стре 14. Перечисленные действия программист может выполнйть, пре¬ дусмотрев соответствующие команды в своей программе или ис¬ пользовав макрокоманду RETURN, рассмотренную ранее. Передача управления в динамической структуре обычно связа¬ на с поиском программы в библиотеке и загрузкой ее в оператив¬ ную память. Прежде чем обратиться к библиотеке, производят поиск требуемой программы в оперативной памяти. Если обнару¬ жена копия требуемой программы в оперативной памяти и уста¬ новлено, что она пригодна для использования, то обращение к биб¬ лиотеке не производится, что сокращает потери времени. Библиотека (или библиотечный набор данных) состоит из оглавления библиотеки и совокупности разделов, представляющих собой последовательно организованные наборы данных. Каждый раздел имеет одно основное имя. Кроме основного имени он может иметь ряд дополнительных имен, или псевдонимов. Оглавление библиотеки представляет собой список всех имен всех разделов, где для каждого имени указываются начальный адрес разделов в библиотеке, объем раздела, а также некоторая дополнительная информация. Библиотека может хранить любые данные, в том числе и программы в загрузочном виде. В последнем случае каждая программа библиотеки занимает один раздел. Программы могут иметь имена, хранящиеся в оглавлении. Имя программы может совпадать с именем точки входа. Если программа имеет несколько точек входа, то их имена могут быть указаны как псевдонимы программы, которые также хранятся в оглавлении. В связи с этим создается возможность осуществлять поиск программы по ее имени или по имени точки входа. Поиск программы в библиотеке по имени осуществляется в два приема: а) поиск элемента оглавления библиотеки по заданному имени и загрузка его в оперативную память; б) поиск раздела библиотеки на основании информации эле¬ мента оглавления и загрузка его в оперативную память. Первое действие (поиск и загрузка элемента оглавления) вы¬ полняет макрокоманда BLDL. Макрокоманды LINK, XCTL, LOAD и ATTACH в зависимости от операндов могут выполнять либо только второе действие (в этом случае программист должен предварительно использовать макрокоманду BLDL), либо оба перечисленные действия (программист не должен использовать макрокоманду BLDL: она неявно выдается программой суперви¬ зора, осуществляющей поиск).
В любом случае, прежде чем начать поиск в библиотеке, необ¬ ходимо осуществить ее логическую связь с программой, преду¬ смотрев для нее, как для любого набора данных, блок управления данными DCB и макрокоманду OPEN. Для некоторых библиотек это делает операционная система, для других библиотек эти дей¬ ствия должен предусмотреть программист. Любой загрузочный модуль, который может быть запрошен динамически, должен находиться в одной из следующих библиотек (библиотечных наборов данных): общей библиотеке, библиотеке задания, библиотеке пункта задания и личной библиотеке, не яв¬ ляющейся библиотекой задания или пункта задания. В качестве библиотеки задания или пункта задания обычно используются личные библиотеки. Однако личная библиотека может не быть библиотекой задания или пункта задания. Общая библиотека, имеющая имя SYS1.LINKLIB, всегда до¬ ступна для всех пунктов всех заданий. Управляющая программа обеспечивает необходимый блок управления ■ данными для этой библиотеки и выдает макрокоманду OPEN, логически связывая эту библиотеку с программой, так что разделы библиотеки стано¬ вятся доступными. Библиотекой задания может стать любая библиотека, если во входном потоке за оператором JOB непосредственно следует опе¬ ратор //JOBLIB DD, описывающий одну или несколько библиотек. Эта библиотека доступна для любого пункта в задании. Управ¬ ляющая программа обеспечивает необходимый блок управления данными для библиотеки и выдает макрокоманду OPEN, чтобы логически связать ее с программой. Библиотекой пункта задания может стать любая библиотека, если оператор //STEPLIB DD, описывающий одну или несколько библиотек, находится среди операторов DD некоторого пункта за¬ дания. Эта библиотека доступна только для данного пункта. Она заменяет библиотеку задания, если такая имеется, делая ее недо¬ ступной в данном пункте задания. Логическая связь библиотеки с программой также выполняется управляющей программой. Личная библиотека, не являющаяся библиотекой задания или пункта задания, становится доступной в пункте задания путем включения в пункт задания оператора DD, определяющего биб¬ лиотеку. Этот оператор может иметь произвольное имя, отличное от JOBLIB, STEPLIB и других специальных имен. Для указанной библиотеки программист должен обеспечить необходимый блок управления данными и выдать макрокоманду OPEN. Блок управ¬ ления данными должен содержать имя оператора DD, определяю¬ щего библиотеку. Можно использовать несколько личных библио¬ тек таким образом: написав для каждой оператор DD и определив соответствующие блоки управления данными. Следовательно, только в последнем случае программист обес¬ печивает логическую связь с программой. Во всех других случаях это делает система. 106
Передача управления с возвратом в динамической структуре осуществляется макрокомандой LINK. Допускается также приме¬ нение макрокоманды CALL в сочетании с макрокомандами LOAD и DELETE. Макрокоманда CALL осуществляет передачу управле¬ ния по заданному адресу или имени без поиска модуля в библио¬ теке. В этом случае поиск и загрузка происходят под действием макрокоманды LOAD. В однопрограммном режиме и в режиме мультипрограммирования с фиксированным числом задач без подзадач макрокоманда ATTACH выполняется как макрокоманда LINK, осуществляя передачу управления с возвратом. Макрокоманда LINK имеет следующий формат: [имя] LINK ( ЕР = имя точки входа ] [,ОСВ = адрес] < EPLOC = адрес имени точки входа) [ DE = адрес элемента списка j [, PARAM= (параметры)] [,VL=1] [,Ш = число] С помощью операнда ЕР можно указать имя точки входа непосредственно в макрокоманде, сформировать имя точки входа в некоторой области памяти из 8 байтов. При необходимости имя дополняется пробелами справа до 8 байтов. В этом случае адрес поля с именем точки входа указывается в операнде EPLOC. Если указывается один из отмеченных операндов, поиск в библиотеке состоит из поиска элемента оглавления и поиска самой програм¬ мы в библиотеке. Операнд DE используется в сочетании с макро¬ командой BLDL. Когда макрокоманда LINK вызывает модуль из общей библио¬ теки или из библиотек задания или пункта задания, то операнд DCB опускается. Если вызывается модуль из личной библиотеки, программист должен построить блок управления данными с по¬ мощью макрокоманды DCB, выдать макрокоманду OPEN и ука¬ зать адрес блока управления данными в операнде DCB макро¬ команды LINK. С помощью операндов PARAM и VL формируется список пара¬ метров для вызываемой программы. Значения указанных операн¬ дов задаются аналогично соответствующим операндам макро¬ команды CALL, хотя и имеются отличия в форме записи этих операндов. Операнд ID полностью аналогичен соответствующему операн¬ ду макрокоманды CALL. Перед использованием макрокоманды LINK необходимо обес¬ печить область сохранения для вызываемого модуля и ее адрес поместить в регистр 13. Регистры 2—12 не изменяются макро¬ командой LINK. Регистр 0 может изменить свое содержимое при передаче управления. В регистр 1 макрорасширение засылает ад¬ рес списка параметров, которые указаны в макрокоманде. Регистр 15 содержит адрес точки входа, а регистр 14—адрес точки воз¬ врата. Передача управления с помощью макрокоманды LINK, осу¬ ществляется посредством операционной системы. Содержимое регистров 15 и 14 устанавливается управляющей программой. Воз-
враг управления происходит также посредством операционной системы. При выполнении вызываемой программы регистр 14 со¬ держит адрес возврата в управляющую программу, которая пе¬ редает управление команде, следующей за LINK в вызывающей программе. Пусть в некоторой программе производится динамическая передача управления программам А и В, находящимся в общей библиотеке. Для общей библиотеки не надо строить блок управле¬ ния данными и предусматривать макрокоманду OPEN в програм¬ ме. В операторах языка управления заданиями не надо преду¬ сматривать оператор DD. Все необходимые действия * для связи этой библиотеки с программой делает управляющая программа. Ml 1 1 в LINK EP = A, PARAM= (X, Y, Z), VL=l М2* LINK EPLOCADDRS; PARAM=(X), VL М3 LINK EP = A,PARAM=(W, Y, Z), VL=l W DC . X DC . Y DC > « Z DC 4 , t ADDRS DC CLB’B* В приведенном примере управление дважды передается про¬ грамме А с разными значениями первого параметра. Передача управления программе. В производится с использованием операн¬ да EPLOC. Имя модуля формируется с помощью 8-байтовой сим¬ вольной константы, помеченной меткой ADDRS. Заданное значе¬ ние константы приведет к тому, что в первом байте будет записан код будвы В, а в остальных семи байтах — коды пробела. Если необходимо, чтобы поиск программ производился в биб¬ лиотеках задания или пункта задания, то вызывающая программа не меняется, а к операторам языка управления заданиями добав¬ ляются операторы DD с меткой //JOBLIB для библиотеки зада¬ ния или с меткой //STERLIB для библиотеки пункта задания, как было указано выше. Когда в некотором пункте задания до¬ ступны все три библиотеки (пункта, задания и общая), поиск программ производится сначала в библиотеке пункта задания. Предположим, что требуемой программы там не оказалось. Тогда производится поиск в общей библиотеке. Если программы не ока¬ залось и там, то пункт задания завершается аварийно. Таким образом, если поиск программ А и В должен осуществляться в библиотеках задания или пункта задания, это не отразится на программе в приведенном выше примере. Теперь предположим, что программа В находится в личнри библиотеке с именем DATA, которая не является ни библиотекой задания, ни библиотекой пункта задания. В этом случае выше¬ приведенная программа будет выглядеть следующим образом: 108
* • ‘ OPEN (M4) т LINK EP = A, PARAM = (X, Y, Z), VL = 1 № LINK EP = B, DCB = M4, PARAM= (X), VL=1 М3 LINK EP = A, PA RAM = (W, Y, Z), VL= 1 т W X Y Z DCB DC . . DC . . DC . . DC . . DDNAME = LIBR, DSORG = PO, MACRF % Таким образом, для личной библиотеки предусмотрены макро¬ команды DCB и OPEN. Строится блок управления данными смет¬ кой М4. В самой программе нигде не указано имя библиотеки. Поэтому программа может работать с любой личной библиотекой, в том числе с библиотекой DATA. Связь программы с личной библиотекой осуществляется при помощи указания в макрокоман¬ де DCB имени LIBR оператора DD, который должен содержать описание личной библиотеки. Следовательно, имя оператора DD фиксируется в программе. Имя конкретной библиотеки и ее харак¬ теристики должны быть указаны в операторе DD с именем LIBR: //LIBR DD D S N АМЕ = DAT Л, , . . Если необходимо заменить библиотеку DATA на библиотеку DT1273, то достаточно заменить оператор DD: //LIBR DD D S N А М Е = D Т1273, . . . Программа при этом не меняется. Так используется принцип независимости программ от обрабатываемых наборов данных, реализованный в операционной системе ОС ЕС. В приведенной программе поиск В будет производиться в лич¬ ной библиотеке, а поиск программы А — в библиотеках пункта задания, задания или общей библиотеке. Если программа В не будет найдена в личной библиотеке, то пункт задания будет завершен аварийно. Исключение составляет режим мультипрограммирова¬ ния с переменным числом задач, в котором после личной библио¬ теки осуществляется также поиск и в общей библиотеке. При многократном вызове одной и той же программы по мак¬ рокоманде LINK могут иметь место большие потери времени за счет того, что каждый вызов требует двух обращений к устрой¬ ству на каждую библиотеку. Чтобы сэкономить время, можно вос¬ пользоваться макрокомандой LOAD, которая осуществляет за¬ грузку программы в оперативную память без передачи управле¬ ния. В макрокоманде LOAD допускается употребление операндов ЕР, EPLOC, DE и DCB. Их структура и назначение аналогичны операндам макрокоманды LINK. Макрокоманда LOAD помещает адрес точки входа в регистр 0. Макрокоманда LOAD используется для того, чтобы копия соответствующего загрузочного модуля находилась в основной 109
памяти в области задания, если она ранее не была загружена в общую область. Когда выдается макрокоманда LOAD, управляю¬ щая программа ищет загрузочный модуль, как было описано вы¬ ше. При возврате управления управляющей программой регистр О содержит адрес точки входа соответствующего загрузочного мо¬ дуля. Макрокоманда LOAD применяется только для реентера¬ бельных или последовательно используемых модулей. Это связано с тем, что модуль, помещенный в основную память по макрокоман¬ де LOAD, остается в ней, даже если он не используется. Управляющая программа устанавливает счетчик обращений для копни и прибавляет к счетчику единицу каждый -раз, когда запрос макрокоманды LOAD удовлетворяется этой копией. Если счетчик обращения не равен нулю, то копия сохраняется в основ¬ ной памяти. Счетчик обращений для копии уменьшается на еди¬ ницу, если задача, выдавшая макрокоманду LOAD, выдает мак¬ рокоманду DELETE. Когда задача заканчивается, счетчик умень¬ шается на число макрокоманд LOAD, выданных для копии при выполнении задачи, минус число выданных макрокоманд DELETE. Когда счетчик обращений для копии в области задания станет равен нулю, область основной памяти, содержащая копию, счи¬ тается свободной, а копия — недоступной для использования. Формат макрокоманды DELETE аналогичен формату макро¬ команды LOAD, за исключением того, что не требуется употреб¬ лять операнд DCB. Рассмотрим пример: МО LOAD EP = A Ml LINK EP = A, PARAM = (X, Y, Z), VL= I М2 LINK EP = A, PARAM= (W, Y, Z), VL= I т DELETE EP = A w * DC . , X DC , . Y DC . . . Z DC . . , Макрокоманда МО загружает программу А в оперативную па¬ мять в раздел пункта задания. Копия этой программы остается в памяти и доступна для использования до тех пор, пока макро¬ команда М4 не удалит ее из памяти. При выполнении макро¬ команд Ml и М2 обращение к библиотеке не происходит, так как копия программы находится в памяти, а производится передача управления. В результате макрокоманды LINK выполняются очень быстро. После макрокоманды М4 память, занятая программой А, считается свободной. Если в этом месте произойдет передача управления программе А, то потребуется повторная загрузка ее в память. на
При использовании макрокоманды LOAD передача управления с возвратом может осуществляться макрокомандой CALL. Рас¬ смотренную выше программу можно записать следующим обра¬ зом: МО LOAD EP = A LR 15,0 Ml* CALL (15), (X, Y, Z), VL М2 CALL (15), (W, Y, Z), VL М4 DELETE EP=A * t W DC . , X DC . . Y DC . . Z DC . . Макрокоманда LOAD выдает адрес точки входа в регистре 0. Макрокоманда CALL требует, чтобы адрес точки входа находился в регистре 15. Производится пересылка содержимого регистра О в регистр 15. Программа с использованиеАм макрокоманды CALL будет выполняться быстрее, так как в этом случае передача и возврат управления осуществляются без участия управляющей программы, как это делается при использовании макрокоманды LINK. Использование макрокоманды LOAD экономит время, но ведет к расходу оперативной памяти. Использование операнда DE в макрокоманде LINK в сочетании с использованием макрокоманды BLDL является компромиссным вариантом, который не требует большого расхода памяти и экономит время при загрузке про¬ граммы. Вариант заключается в том, что с помощью макро¬ команды BLDL в память загружается один раз элемент оглавле¬ ния библиотеки для требуемой программы и затем при каждом обращении к программе в операнде DE указывается адрес этого элемента. В результате загрузка программы из библиотеки произ¬ водится за одно обращение к устройству. Поиск элемента оглав¬ ления не производится, так как он уже находится в оперативной памяти. Макрокоманда BLDL может одновременно загрузить элементы оглавления для нескольких разделов библиотеки. Для этого в основной памяти резервируется память для будущих элементов оглавления и в зарезервированные области для каждого элемента записывается имя соответствующего раздела библиотеки. Для каждого элемента необходимо 58 байтов. Кроме того, в начале списка элементов два байта отводятся для указания числа эле¬ ментов и два байта для указания длины каждого элемента. Спи¬ сок должен начинаться на границе полуслова. а 11
а осмотр! [!М пример: * . M* МО BLDL 0,M5 мГ LINK DE = NAMEI, PARAM= (X, Y, Z), VL=L М2 LINK DE = NAME2, PARAM= (X), VL=l М3 LINK DE = NAMEl, PARAM=(W, Y, Z), VL=1 М4 LINK DE = NAME2, PARAM= (VV), VL=I М5 DC H’2’ - чал* DC И’58’ - NAMEI DC CL8’A’ DS CL50 NAME 2 DC CL8’B’ DS CL 50 V DC , . . X DC . « . Y DC . . . Z DC . „ . Макрокоманда МО строит список элементов оглавления. Пер¬ вый операнд, равный нулю, говорит о том, что используется биб¬ лиотека пункта задания, библиотека задания или общая библио¬ тека. Если необходимо использовать личную библиотеку, то пер¬ вым операндом должен быть адрес блока управления данными. Второй операнд определяет адрес списка элементов оглавления М5. В начале списка указывается, что он состоит из двух элемен¬ тов, каждый из которых занимает 58 байтов. Далее размещаются два поля для элементов оглавления. Первые 8 байтов каждого элемента содержат имя раздела библиотеки или альтернативное имя. Остальные 50 байтов заполняются макрокомандой BLDL информацией из оглавления, необходимой для последующей за¬ грузки программы, являющейся разделом библиотеки. Макрокоманды Ml, М2, М3 и М4 осуществляют загрузку про¬ грамм за одно обращение к библиотеке, так как элементы оглав¬ ления уже загружены в память макрокомандой BLDL. До сих пор рассматривались макрокоманды, представленные в стандартной форме. Ряд макрокоманд можег иметь описатель¬ ную и исполнительные формы. Описательная форма применяется для того, чтобы обеспечить список параметров, который должен быть передан либо управляющей программе, либо другой про¬ блемной программе. Макрорасширение описательной формы не содержит выполняемых кодов. Это значит, что в описательной форме нельзя использовать регистры. Исполнительная форма используется с одним или двумя спи¬ сками параметров, полученными описательными формами. Мак¬ рорасширение исполнительной формы представляет собой выпол¬ няемые коды команд, необходимые для изменения списков пара¬ метров и передачи управления требуемой программе* U2
Наличие описательной и исполнительной форм макрокоманд связано с тем, что не псе макрокоманды являются реентерабель¬ ными, а нереентерабельные макрокоманды нельзя использовать при разработке реентерабельных программ. Макрокоманды, в которых параметры передаются списком, имеют исполнительную и описательную формы. Расширение стан¬ дартной формы этих макрокоманд имеет своим результатом список параметров, и выполняемые команды, которые обходят список, загружают адрес списка и передают управление на нужную под¬ программу управляющей программы. Расширения описательной и исполнительной форм макрокоманд разграничивают функции, объединенные в расширение стандартной формы:, описательная форма обеспечивает только список параметров, а исполнительная форма обеспечивает выполняемые команды для изменения списка и передачи управления. Команды загрузки адреса списка в регистр обеспечивает программист. В реентерабельной программе необхо¬ димо применять описательную и исполнительную формы макро¬ команд. Описательная и исполнительная формы макрокоманд использу¬ ются совхместно, что обеспечивает возможности, доступные в случае применения стандартной формы макрокоманды. Преимущества использования описательной и исполнительной форм заключаются в том, что операнды, которые остаются постоянными при каждом использовании макрокоманды, могут кодироваться в описательной форме. Эти операнды могут быть затем опущены в каждой из исполнительных форм макрокоманды, которая использует описа¬ ние. В результате можно заметно сократить время кодирования и области основной памяти, когда макрокоманда используется не¬ сколько раз. Исполнительная форма макрокоманды, как правило, может изменять любой из ранее определенных операндов. Описа¬ ние, используемое исполнительной формой макрокоманды, может быть перенесено в часть основной памяти, которая была выделена по макрокоманде GETMAIN, что гарантирует реентерабельность программы. Рассмотрим пример использования описательной и исполни¬ тельной формы макрокоманды LINK. Эта макрокоманда использу¬ ет два списка: список параметров управляющей программы (ЕР, EPLOC, DE, DCB), адрес которого помещается в регистр 15, и спи¬ сок параметров вызываемой программы (PARAM, VL), адрес которого помещается в регистр 1. Существует исполнительная форма макрокоманды LINK и описательная форма для парамет¬ ров управляющей программы. Для параметров вызываемой про¬ граммы необходимо использовать описательную форму макро¬ команды CALL. Предположим, что очень часто в программе ис¬ пользуется следующая запись макрокоманды: LINK' ЕР = A, DCB = M5, PARAM=(X, Y, Z), VL=l Для формирования списка управляющей программы может быть использована описательная форма макрокоманды LINK: МК LINK ЕР = A, DCB = M5, SF = L 8. Заказ 3114. f[;j
Для формирования списка вызываемой программы может быть использована описательная форма макрокоманды CALL: Л1С CALL ,(Х, Y, Z), VL, MF=L Так как описательные формы макрокоманд не формируют ис¬ полнительных кодов команд, они должны быть расположены среди массива констант и рабочих полей. В случае, если они расположе¬ ны среди команд, необходимо предусмотреть команды обхода ©писательных форм, чтобы управление не попадало на них. Для передачи управления вызываемой программе используется исполнительная форма макрокоманды LINK, которая ссылается па две описательные формы: LINK MF= (Е, МС), SF=(E, МК) Возврат управления в динамической структуре происходит та¬ ким же образом, как и возврат управления между программами в одном и том же загрузочном модуле. Программа, осуществляю¬ щая возврат управления, восстанавливает регистры 2—14, уста¬ навливает в регистре 15 код возврата и передает управление с использованием регистра 14. Для программы, которой возвра¬ щается управление, содержимое регистров 2—13 не меняется, в регистре 14 находится адрес точки возврата, а регистр 15 содер¬ жит код возврата. Возврат управления может быть осуществлен либо с помощью команды перехода, либо макрокомандой RETURN. Если управление было передано без участия управляющей про¬ граммы, то это все, что происходит при возврате. Если управление в вызываемую программу было передано с помощью управляющей программы, то сначала происходит возврат к управляющей про¬ грамме, а потом уже к вызывающей программе. Рассмотрим передачу управления без возврата. Когда при пере¬ даче управления между загрузочными модулями не требуется воз¬ врата управления, применяется макрокоманда XCTL. Можно так¬ же передавать управление командой перехода. Для передачи управления без возврата с помощью команды перехода необходимо выполнять следующие действия. Для загруз¬ ки модуля в память должна быть выдана макрокоманда LOAD. Адрес точки входа, полученный в регистре 0, загружается в ре¬ гистр 15. Соглашения о связях при передаче управления между загрузочными модулями те же, что и при передаче управления между программами в случае простой структуры: в регистр 13 нужно снова загрузить адрес старой области сохранения; с помо¬ щью этой области восстанавливаются регистры 14 и 2—12. Ре¬ гистр 1 используется для передачи списка параметров. Для пере¬ дачи управления выдается команда перехода по адресу в реги¬ стре 15. Попеременное использование команд перехода и макрокоманд XCTL не рекомендуется. 114
Макрокоманда XCTL имеет следующий формат: [имя] XCTL [(регистр 1 [.регистр 2])3, /ЕР_ИМЯ Т0Чки входа |ЕРЬОС = адрес имени точки входа . |DE = адрес элемента списка [, DCB = адрес] Регистр 1 и регистр 2 — адреса регистров общего назначения з диапазоне от 2 до 12, которые должны быть восстановлены из об¬ ласти сохранения, адрес которой находится в регистре 13. Это означает, что перед использованием макрокоманды XCTL в реги¬ стре 13 необходимо восстановить адрес области сохранения. Назначение остальных операндов точно такое же, как для мак¬ рокоманды LINK. Макрокоманда XCTL, кроме передачи управле¬ ния, указывает управляющей программе, что использование за¬ грузочного модуля, содержащего макрокоманду XCTL, заверши¬ лось. Следовательно, адрес старой области сохранения должен быть вновь загружен в регистр 13. Адрес точки- возврата должен быть вновь загружен в регистр 14 из старой области сохранения. Восстановление регистров 2—12 может быть запрошено в самой макрокоманде XCTL или же может быть сделано предварительно. При использовании макрокоманды XCTL программист формирует список параметров, адрес которого засылается в регистр 1. Однако список параметров должен находиться в той части основной памя¬ ти, которая расположена вне загрузочного модуля, использующего макрокоманду XCTL. Это делается потому, что копия этого загру¬ зочного модуля может быть исключена до того, как вызываемый загрузочный модуль сможет использовать эти параметры. По способу передачи управления макрокоманда XCTL подобна макрокоманде LINK. Управление передается с помощью управ¬ ляющей программы. Управляющая программа загружает, если это необходимо, копию загрузочного модуля, устанавливает в регистре 15 адрес точки входа, запоминает адрес, переданный в регистр 14, помещает туда новый адрес точки возврата внутрь управляющей программы и передает управление по адресу в регистр 15. 4.6. РАСПРЕДЕЛЕНИЕ ОСНОВНОЙ ПАМЯТИ Для выполнения пункта задания выделяется некоторая область оперативной памяти фиксированного размера. В однопрограммном режиме это вся динамическая область памяти, не используемая управляющей программой. В мультипрограммном режиме с фикси¬ рованным числом задач это раздел памяти соответствующего клас¬ са, размер которого устанавливается при генерации и может быть переопределен оператором в процессе загрузки или работы систе¬ мы. В мультипрограмхмном режиме с переменным числом задач это раздел, размер которого определяется параметром REGION в операторах JOB или ЕХЕС. Во всех режимах память, выделенная пункту задания, резерви¬ руется за ним. Чтобы ее можно было использовать, необходимо 115
предварительно выдать запрос па область памяти требуемого раз¬ мера. Память, зарезервированная за пунктом задания, на которую не был выдан запрос, считается свободной. Если некоторая об¬ ласть памяти, на которую был выдан запрос, более не требуется, ее следует освободить, чтобы она могла быть использована для других запросов. Когда суммарный объем запрошенной памяти превышает размер раздела, пункт задания завершается аварийно. Исключение составляет режим с переменным числом задач, в ко¬ тором используется средство свертки. Оно позволяет получить до¬ полнительную область оперативной памяти за счет свободных уча¬ стков или за счет свертки заданий. Для запроса оперативной памяти используется макрокоманда GETMAIN. Освобождение оперативной памяти осуществляется макрокомандой FREEMAIN. С помощью этих макрокоманд произ¬ водится динамическое распределение оперативной памяти, зарезер¬ вированной за пунктом задания. Динамическое резервирование (распределение) оперативной памяти для пунктов заданий осуще¬ ствляется только в режиме с переменным числом задач. Во всех остальных режимах оно носит статический характер. Запросы на область оперативной памяти могут быть явными и неявными. Наиболее характерным примером явного запроса явля¬ ется применение макрокоманды GETMAIN. При этом пункту зада¬ ния выделяется область памяти, размер которой указывается в макрокоманде, из свободной зарезервированной за пунктом зада-, пия памяти. Выделенная память не очищается, потому не следует делать каких-либо предположений относительно ее начального со¬ держимого: оно может быть произвольным. Память, полученная с помощью явных запросов, используется для хранения данных, а также для хранения. некоторых управляющих блоков и таблиц, требуемых в процессе выполнения задачи. Освобождение запро¬ шенных ранее областей оперативной памяти осуществляется мак¬ рокомандой FREEMAIN, которая переводит область в состояние свободной памяти пункта задания. Неявные запросы на область оперативной памяти осуществля¬ ются макрокомандами, которые для выполнения своих функций требуют выделения области памяти. Например, в макрокоманде LINK нет явного упоминания каких-либо областей оперативной памяти. Одной из ее функций является загрузка программ в опе¬ ративную память, что требует выделения свободного участка памяти для загрузки программы из библиотеки. Таким образом осуществляется неявный запрос. В случае неявных запросов программист не должен указывать требуемого размера оперативной памяти. Управляющая программа определяет необходимый размер и выдает запрос на память с по¬ мощью макрокоманды GETMAIN. При динамическом распределении памяти в условиях мульти¬ программирования в рамках одного пункта задания возникает проблема фрагментации памяти. В процессе выделения и освобож¬ дения областей памяти, который осуществляется асинхронно раз- 116
личными задачами, вся свободная память может оказаться раз¬ дробленной на большое число мелких областей. При выдаче оче¬ редного запроса может возникнуть ситуация, при которой ни одна из этих областей не сможет удовлетворить запрос, хотя суммар¬ ный объем свободной памяти достаточно велик. Чтобы избежать фрагментации памяти, используется понятие подпула, которое дозволяет связать память с задачей. Подпул обозначается номером, который указывается в макрокомандах GETMAIN или ATTACH и образуется при первом употреблении номера данного подпула в этих макрокомандах. Макрокоманда ATTACH может создать подпул без выделения памяти. Подпул может включать память, полученную по запросам С одинаковым номеро?н подпула одной и той же задачей. Наращивание подпулов производится блоками оперативной памяти по 2К. Подпул может находиться как в монопольном использовании задачей, так и в совместном использовании несколькими задачами. Задача может передать подпул для использования своей подзадаче. Подпул с нулевым номером является общим для всех задач пункта задания. Рассмотрим функции макрокоманды GETMAIN, которая явля¬ ется основным средством получения областей памяти и использует¬ ся как в случае явных, так и в случае неявных запросов. Макро¬ команда GETMAIN позволяет осуществлять следующие четыре типа запросов (тип запроса отмечается буквой в качестве первого позиционного операнда макрокоманды): регистровый (R), элемент¬ ный (Е), списковый (L), переменный (V). Регистровый тип макрокоманды имеет следующий формат: [имя] GETMAIN R, LV= / число ) [,SP = число] 1 (0) / Операнд R указывает на регистровый тип макрокоманды. Опе¬ ранд LV задает размер запрашиваемой памяти либо в форме чис¬ ла в самой макрокоманде, либо в регистре 0. Операнд SP опреде¬ ляет номер подпула. Если он опущен, то предполагается нулевой подпул. Когда система удовлетворяет запрос, адрес выделенной обла¬ сти памяти помещается в регистр 1 и может быть использован в программе после макрокоманды GETMAIN регистрового типа. Если система не может выделить память требуемого размера, то это приводит к аварийному завершению пункта задания. Регкстг ровый запрос является безусловным (условные и безусловные запросы обсуждаются ниже). Регистровый тип запроса является реентерабельным, поскольку параметры передаются через регистры. Запросы остальных типов нереентерабельные и кроме стандартной формы имеют описатель¬ ную и исполнительную формы. Пусть необходимо получить область памяти размером в 320 байтов и ее адрес поместить з регистр 2. GETMAIN’ R,LV = 320 LR 2,1 « « * 117
Так как адрес выделенной области памяти находится в регист¬ ре 1, его необходимо переслать в регистр 2 командой LR. Тот же пример с использованием регистра 0 для указания объема памяти выглядит следующим образом: L O.VLM GETMAIN R, LV= (0) LR 2,1 VLM DC F* 320’ Элементный тип макрокоманды GETMAIN имеет следующий формат: [имя] GETMAIN Е | С LV=число, А=адрес [,5Р = число] Операнд Е указывает на элементный тип макрокоманды. Раз¬ мер запрашиваемой памяти, как и раньше, задается операндом LV. Второй операнд макрокоманды С или U определяет соответ¬ ственно условный или безусловный запрос. Операнд А указывает адрес слова, выравненный по границе полного слова, куда система должна поместить адрес выделенной области памяти. Параметр SP определяет номер подпула. Если в случае безусловного запроса система не может выде¬ лить область памяти требуемого размера, то это приводит к ава¬ рийному завершению пункта задания. Условный запрос не приво¬ дит к аварийному завершению. О реакции на запрос система сооб¬ щает с помощью кода возврата в регистре 15. Если код возврата равен нулю, это значит, что область памяти выделена. Если код возврата равен 4, область памяти требуемого размера не может быть выделена. Рассмотрим предыдущий пример запроса, выполнив его с по¬ мощью элементного типа макрокоманды: GETMAIN EU, LV = 320, A = ADDR L 2,ADDR ADDR DS F Выдается безусловный элементный запрос на область памяти 320 байтов. Адрес выделенной области система должна поместить в слово ADDR, которое выравнено по границе полного слова. Если система не найдет области свободной памяти размером не менее 320 байтов в разделе, отведенном пункту задания, то при выполнении макрокоманды GETMAIN возникнет аварийное завер¬ шение. Видоизменим предыдущий пример таким образом, что в слу¬ чае выделения области памяти необходимо продолжать выполне¬ ние программы, а в случае, если память выделить нельзя, необхо¬ димо перейти по имени MIN. Для этого используем условный элементный запрос: 118
GETMAIN EC, LV = 320, A=ADDR LTR 15,15 BNZ MIN L 2.ADDR ADDR DS F* sex MIN « . « Команда LTR проверяет содержимое регистра 15, в котором находится код возврата. Если он не равен нулю (т. е. равен четы¬ рем, так как других кодов возврата макрокоманда GETMAIN не выдает), то команда BNZ передает управление на MIN. Если же код возврата равен нулю, то это значит, что область памяти была выделена, и ее адрес загружается в регистр 2. Списковый тип запроса допускается только в режиме с пере¬ менным числом задач. Списковый тип позволяет выдать запрос сразу на несколько областей памяти. Перед выдачей запроса необ¬ ходимо сформировать два списка. В одном списке помещаются размеры каждой запрашиваемой области памяти. Список состоит из слов, выравненных по границе полного слова. Последний эле¬ мент в списке отмечается единицей в старшем бите. Второй список предназначен для того, чтобы управляющая программа поместила в него адреса выделенных областей памяти. Этот список также состоит из слов, выравненных по границе полного слова. Оба спи¬ ска имеют одинаковые размеры. Списковый тип макрокоманды имеет следующий формат: [имя] GETMAIN L | С| } ЕА = адрес, А = адрес [,SP = 4hcjio] Операнд L указывает на списковый тип макрокоманды. Второй операнд С или U определяет условный или безусловный запрос. Операнд LA определяет адрес списка размеров запрашиваемых областей. Операнд А определяет адрес списка для адресов выде¬ ленных областей. Запрос считается удовлетворенным, если систе¬ ма выделит все требуемые области памяти. Операнд SP опреде¬ ляет номер подпула. Пусть требуется получить три области памяти размером 320, 480 и 600 байтов. Адреса этих областей необходимо загрузить в регистры 2, 3 и 4 соответственно. Запрос безусловный. GETMAIN LU,LA = LIST1, A=LIST2 LM 2,4,LIST2 LIST1 DC F’320’ * DC F’480’ DC X’80' DCFL3W LIST2 DS3F Имя LIST1 обозначает список размеров запрашиваемых обла¬ стей. Последний элемент отмечается единицей в старшем бите 119
посредством команды DC XW. Имя LIST2 обозначает список адресов выделенных областей памяти. Для него резервируется память из трех полных слов. Переменный тип макрокоманды производит запрос на одну область памяти. При этом указываются максимальный и мини¬ мальный размеры запрашиваемой области. Система пытается удовлетворить запрос по максимальному значению. Если это ей не удается, то она выдает наибольшую область памяти, размер которой не меньше минимального. Если и это не удается, то за¬ прос считается неудовлетворенным. В случае выделения памяти система помешает адрес и размер выделенной области в два по¬ следовательных полных слова, зарезервированных программистом. Переменный тип имеет следующий формат: [имя] GETMAIN , LA = адрес, А—адрес [,SP = число] Операнд V указывает на переменный тип макрокоманды. Вто¬ рой операнд С или U определяет условный или безусловный за¬ прос. Операнд LA определяет адрес двух последовательных полных слов, выравненных по границе полного слова, первое из которых хранит минимальный размер области памяти, второе — максималь¬ ный. Операнд А определяет адрес двух последовательных слов, выравненных по границе полного слова, которые резервируются для ответа системы. В первое слово она помещает адрес отведен¬ ной области памяти, во второе — ее размер. Пусть требуется получить область памяти размером от 320 до 640 байтов. Адрес выделенной области поместить в регистр 2, а ее размер в регистр 5. Запрос должен быть безусловным. GETMAIN VU,LA = M1NMAX,A=ADDRSIZE L 2.ADDRSIZE L 5,ADDRSIZE + 4 MINMAX DC F'320’ DC F‘640’ ADDRSIZE DS 2F Освобождение ранее отведенной памяти осуществляется с по¬ мощью макрокоманды FREEMAIN, которая выполняет действия, обратные действиям макрокоманды GETMAIN. Для макрокоманды FREEMAIN также существуют четыре типа запросов: регистровый, элементный, списковый и переменный. Для освобождения памяти необходимо задать не только размер, но и адрес освобождаемой области памяти. Операнды макрокоманды FREEMAIN аналогичны операндам макрокоманды GETMAIN. Макрокоманда FREEMAIN регистрового типа имеет следующий формат: [имя] FREEMAIN R,[LV= f (0) \ , А= ( (1)1] [,5Р = число] [число J [адрес/ 120
Размер освобождаемой области памяти может быть задан как в макрокоманде, так и в регистре 0. Адрес освобождаемой области памяти может быть задан в макрокоманде и в регистре 1. Если за¬ дан номер подпула, то нельзя использовать регистр 0 для указания размера области. Если размер и адрес области не указаны, а ука¬ зан только номер подпула, то освобождается весь подпул. Элементный тип макрокоманды имеет следующий формат; [имя] FREEMAIN Е, LV = число, А = адрес [,SP = число] Для элементного типа макрокоманды необходимо указать раз¬ мер и адрес освобождаемой области памяти. Может быть указан также номер подпула. Списковый тип макрокоманды имеет следующий формат: [имя] FREEMAIN L, LA = адрес, А = адрес [,SP = 4ncao] Для спискового типа макрокоманды следует указать адреса двух списков, аналогичных спискам спискового типа макрокоман¬ ды GETMALN. Разница заключается в том, что стшсок адресов ос¬ вобождаемых областей должен заполнить программист перед вы¬ дачей макрокоманды FREEMAIN, в то время как для макрокоман¬ ды GETMAIN этот список заполняет система. Переменный тип макрокоманды FREEMAIN имеет следующий формат: [имя] FREEMAIN V,A = адрес [,SP = число] Операнд А определят адрес двух последовательных слов, вы¬ равненных по границе полного слова, первое из которых содержит адрес освобождаемой области памяти, а второе — ее размер. 4.7. ОБРАЗОВАНИЕ ПОДЗАДАЧ В процессе инициирования для каждого пункта задания созда¬ ется одна задача, которая называется задачей пункта задания. В однопрограммном режиме в любой момент времени существует только одна задача. В мультипрограммных режимах одновремен¬ но выполняются несколько задач. При этом в режиме без подзадач для одного пункта задания всегда существует только одна задача, а в режиме с подзадачами каждый пункт задания может образо¬ вать несколько задач, используя макрокоманду ATTACH. Для управления задачами управляющая программа строит для каждой задачи блок управления задачей — ТСВ, без которого за¬ дача не может существовать. Он содержит всю информацию, необ¬ ходимую для управления задачей. Блок управления задачей соз¬ дается либо при инициировании пункта задания (для задачи пункта задания), либо при выполнении макрокоманды ATTACH. После выполнения макрокоманды ATTACH адрес блока управления за¬ дачей находится в регистре 1. Макрокоманда ATTACH образует задачу только в мультипро¬ граммных режимах с подзадачами. Это режим с переменным чис¬ лом задач и вариант режима с фиксированным числом задач, до¬ пускающий образование подзадач. Во всех остальных режимах 321
макрокоманда ATTACH аналогична макрокоманде LINK и задач не образует. В дальнейшем будем рассматривать макрокоманду ATTACH в режимах с подзадачами. Задача, которая выдает макрокоманду ATTACH, называется порождающей задачей, а задача, которая образуется макрокоман¬ дой ATTACH, называется подзадачей порождающей задачи. Под¬ задача, в свою очередь, может быть порождающей задачей и об¬ разовывать свои подзадачи и т. д. Статус подзадач в процессе выполнения не отличается от статуса порождающей задачи. Поэто¬ му в дальнейшем будем применять термин подзадача только в тех случаях, когда требуется подчеркнуть соподчиненность задач в процессе образования. В остальных случаях будем пользоваться термином задача, подразумевая под ним подзадачи и порождающие задачи. Порожденные подзадачи могут быть уничтожены макро¬ командой DETACH. Все задачи, выполняемые в некоторый момент времени, незави¬ симо от того, какому заданию они принадлежат, имеют диспетчер¬ ский приоритет, определяемый числом от 0 до 255. В каждый мо¬ мент времени управление получает та задача, которая готова для выполнения и имеет наивысший приоритет. Такая задача называ¬ ется активной. Остальные задачи находятся в состоянии ожидания. Их можно разбить на два класса: а) задачи, находящиеся в состоянии ожидания какого-либо со¬ бытия и, следовательно, не готовые для выполнения; диспетчер-, ский приоритет этих задач может быть как выше, так и ниже дис¬ петчерского приоритета активной задачи; б) задачи, готовые для выполнения, но находящиеся в состоя¬ нии ожидания потому, что их диспетчерский приоритет ниже дис¬ петчерского приоритета активной задачи. Как только задача с более высоким диспетчерским приорите¬ том, чем приоритет текущей активной задачи, переходит в состоя¬ ние готовности, она получает управление и становится активной, а выполнявшаяся ранее задача переводится в состояние ожидания. В режиме мультипрограммирования с переменным числом за¬ дач диспетчерский приоритет задач пунктов задания определяете# параметром DPRTY оператора ЕХЕС или параметром PRTY опе¬ ратора JOB. В режиме мультипрограммирования с фиксированным числом задач диспетчерский приоритет задачи пункта задания за¬ висит от раздела памяти, в котором он выполняется. Чем больше начальный адрес раздела, тем выше приоритет. Кроме диспетчерского приоритета, существует понятие гранич¬ ного приоритета. Значение граничного приоритета задачи пункта задания равно начальному значению диспетчерского приоритета. Диспетчерский приоритет может изменяться в процессе выполне¬ ния, но не может превысить значение граничного приоритета. В момент образования подзадачи ей присваиваются значения граничного и диспетчерского приоритетов. Они могут быть равны¬ ми соответствующим приоритетам порождающей задачи, если в макрокоманде ATTACH опущены операнды LPMOD и DPiWOD. 122
В случае, если указанные операнды предусмотрены в макрокоман¬ де, они определяют разницу приоритетов подзадачи относительно приоритетов порождающей задачи. Граничный приоритет подзада¬ чи не может быть выше граничного приоритета порождающей за¬ дачи. В процессе выполнения подзадачи ее диспетчерский приори¬ тет может превысить граничный приоритет подзадачи, но не может превысить граничный приоритет порождающей задачи. При этом граничный приоритет подзадачи автоматически повышается до максимального значения диспетчерского приоритета. Таким образом, граничный приоритет подзадачи предназначен для ограничения диспетчерского приоритета подзадачи данной под¬ задачи. Граничный приоритет задачи пункта задания является максимальным значением любых приоритетов всех подзадач, об¬ разованных при выполнении пункта задания. Макрокоманда ATTACH имеет следующий формат: [ямя] ATTACH [ ЕР = имя точки входа '» [,DCB = адрес] < EPLOC = адрес имени точки входа > I DE = адрес элемента списка J ,PARAM= (параметры) [,VL=1]] ,LPMOD = число] [,DPMOD = число] ,ЕСВ= (адрес ЕСВ)] [,ЕТХР = адрес программы выхода] ,GSPV=4Hcno 1 Г ,SHSPV=4Hano j ,GSPL = адрес списка J [ ,SHSPL = aApec списка] После выполнения макрокоманды ATTACH в регистре 1 нахо¬ дится адрес блока управления, образованный подзадачей. Он может быть использован в дальнейшем в макрокомандах DETACH, CHAP или EXTRACT. Поэтому его необходимо сохранять, если использу¬ ются указанные макрокоманды. Первые четыре операнда макро¬ команды ATTACH аналогичны соответствующим операндам мак¬ рокоманды LINK. С помощью операнда LPMOD можно указать число, на кото¬ рое граничный приоритет подзадачи должен быть меньше гранич¬ ного приоритета порождающей задачи. Это число обязательно дол¬ жно быть положительным. Следовательно, граничный приоритет при образовании подзадачи можно уменьшить или оставить рав¬ ным граничному приоритету порождающей задачи. Последнее име¬ ет место тогда, когда операнд LPMOD не задан. Операнд DPMOD служит для указания числа, на которое дис¬ петчерский приоритет подзадачи должен отличаться от диспетчер¬ ского приоритета порождающей задачи. Это число может быть как положительным (в этом случае диспетчерский приоритет подзада¬ чи выше диспетчерского приоритета порождающей задачи), так и отрицательным (в этом случае диспетчерский приоритет подзадачи ниже диспетчерского приоритета порождающей задачи). Диспетчер¬ ский приоритет не должен превышать граничный приоритет. Если операнд DPMOD опущен, то в качестве диспетчерского приоритета подзадачи используется диспетчерский приоритет порождающей задачи, если он не больше граничного приоритета подзадачи. В противном случае граничный приоритет подзадачи становится ее диспетчерским приоритетом.
Операнд EG3 предназначен для указания адреса блока управ¬ ления событием, с помощью которого производится синхронизация выполнения порождающей задачи и завершения ее подзадачи. Уп¬ равляющая программа делает отметку о завершении подзадачи в этом блоке, а также помещает в него код возврата при нормаль¬ ном завершении или код завершения при аварийном завершении. В порождающей задаче можно выдать макрокоманду WAIT, кото¬ рая переведет ее в состояние ожидания до завершения подзадачи. После завершения подзадачи можно проанализировать код, нахо¬ дящийся в блоке управления событием. Если в макрокоманде ATTACH задан операнд ЕСВ, то для уни¬ чтожения подзадачи после ее завершения необходимо использовать макрокоманду DETACH. Операнд ETXR предназначен для указания адреса программы выхода, получающей управление после завершения подзадачи. К этому времени программа выхода должна находиться в опера¬ тивной памяти. Операнд GSPV предназначен для указания номера подпула, который передается подзадаче в монопольное использование. Опе¬ ранд SHSPV указывает номера подпула, который может быть сов¬ местно использован как порождающей задачей, так и подзадачей. Операнд GSPL предназначен для указания адреса списка но¬ меров подпулов, которые передаются подзадаче в монопольное ис¬ пользование. Операнд SHSPL предназначен для указания адреса списка но¬ меров подпулов, которые могут быть совместно использованы как порождающей задачей, так и подзадачей. Если в макрокоманде ATTACH задан операнд ETXR, то для уничтожения подзадачи после ее завершения необходимо использо¬ вать макрокоманду DETACH. Эту макрокоманду можно использо¬ вать в программе выхода. Если в макрокоманде ATTACH не заданы ни операнд ЕСВ, ни операнд ETXR, то не следует выдавать макрокоманду DETACH для уничтожения подзадачи. Это делает управляющая программа после завершения подзадачи. Порождающая задача не может за¬ вершиться, если не завершились ее подзадачи. Попытка заверше¬ ния порождающей задачи раньше ее подзадач приводит к аварий¬ ному завершению задачи и всех ее подзадач. Для синхронизации выполнения задач используются макрокоман¬ ды WAIT и POST, которые связаны через блок управления собы¬ тием. Макрокоманда WAIT предназначена для того, чтобы задер¬ жать выполнение задачи до тех пор, пока не случится одно или не¬ сколько событий. Макрокоманда POST сигнализирует о том, что некоторое событие произошло. Блок управления событием представляет собой полное слово, выравненное по границе полного слова, и имеет формат: номер разряда 0 1 31 код завершения 124
В начальном состоянии разряды 0 и 1 устанавливаются в нуле¬ вое состояние. При выполнении макрокоманды WAIT разряд 0 ус¬ танавливается в единицу. При выполнении макрокоманды POST разряд 1 устанавливается в единицу, а разряд 0 в нуль. Макро¬ команда POST заносит код завершения в блок управления собы¬ тием. Макрокоманда POST имеет следующий формат: [имя] POST адрес блока управления событием [, код завершения] Если код завершения не указан, то предполагается нуль. Макрокоманда WAIT имеет следующий формат: Если задан операнд ЕСВ, то это указывает на ожидание одно¬ го события. С помощью операнда ECBLIST можно указать адрес поля основной памяти, содержащего список адресов нескольких блоков управления событием. Каждый адрес занимает полное сло¬ во, выравненное по границе полного слова, последний адрес отме¬ чается единицей в старшем разряде. Число событий не должно превышать число блоков управления событиями. Оно может быть меньше или равно числу блоков управления событиями. Макрокоманда DETACH имеет следующий формат: Изменение диспетчерского приоритета задачи или любой ее подзадачи производится макрокомандой CHAP. Макрокоманда имеет следующий формат: [имя] CHAP величина изменения г ес адреса блока управления задачей ] Величина изменения может быть как положительной, так и от¬ рицательной. Второй операнд указывает адрес поля, содержащего адрес блока управления подзадачей, диопетчер-ский приоритет ко¬ торой должен быть изменен. Если указано ’S’ или второй операнд опущен, то изменяется диспетчерский приоритет задачи. Для опре¬ деления текущего значения диспетчерского' приоритета необходи¬ мо пользоваться макрокомандой EXTRACT. Указанная макро¬ команда производит извлечение информации (в том числе и зна¬ чения приоритетов) из некоторых полей блока управления зада¬ чей. Пусть программа А порождает две подзадачи В и С. Диспет¬ черские приоритеты этих подзадач соответственно больше и мень¬ ше приоритета порождающей задачи на единицу. Граничные при¬ оритеты всех трех задач совпадают. Выполнение задачи А должно быть приостановлено в точке Е до тех пор, пока выполнение зада¬ чи В не дойдет до точки Е1, а выполнение задачи С не дойдет до точки Е2. Кроме того, выполнение задачи А должно быть приоста¬ новлено в точке Е4 до тех пор, пока не завершатся задачи В и С. В качестве параметров программе В передаются блок управления [имя] WAIT [число событий,] ЕСВ = адрес ECBL1ST = адрес [имя] DETACH адрес адреса блока управления задачей 125
событием ЕСВ1 и некоторые величины Р1 и Р2, а программе С пе¬ редаются блок управления ЕСВ2 и некоторые величины Р2 и РЗ. Блок управления событием ЕСВ1 используется для фиксации выполнения задачи В в точке Е1. Блок управления событием ЕСВ2 используется для отметки о выполнении задачи С в точке Е2. Блок управления событием EVENT1 используется для отметки о завер¬ шении задачи В, блок управления событием EVENT2 — для отмет¬ ки о завершении задачи С. Адреса последних двух блоков управ¬ ления событием, служащие для отметки о завершении задач, пере¬ даются с помощью операнда ЕСВ макрокоманды ATTACH. Адре¬ са первых двух блоков управления событием, которые служат для отметки о некоторых промежуточных событиях, передаются через список параметров операндом PARAM. После завершения выполнения задач В и С необходимо прове¬ сти анализ кодов завершения. Если код завершения хотя бы одной из этих задач отличен от нуля, необходимо перейти на ERROR, где производится дополнительный анализ завершения указанных за¬ дач. Анализ должен быть произведен до уничтожения подзадач В и С. Программа А имеет следующую структуру: ATTACH ЕР = В, PARAM= (ЕСВ I, PI, Р2), VL= 1, DPMOD = 1, ЕСВ = EVENT I ST 1,TB ATTACH EP = C, PARAM= (ECB2, P2, P3), VL=i, DPMOD = — 1 ,ECB = E VENT2 ST i,TC E WAIT 2,ECBLIST=LISTl E4 WAIT 2,ECBLIST = LIST2 L 5,EVENTl 01 5,EVENT2 LA 5,0(5) LTR 5,5 BNZ ERROR DTB DETACH ТВ DTC DETACH TC RETURN ERROR ТВ DS F TC DS F EVENT1 DC FT)’ EVENT2 DC F’O’ ECBl DC F’O* ECB2 DC F’O’ LIST! DC A(ECB1) DC X’80’ DC AL3 (ECB2) UST2 DC A (EVENTI) DC XW 126
DC AL3 (EVENT2) PI DS . P2 DS « P3 DS Программа В имеет следующую структуру; El L 2,0(1) POST (2) RETURN ". ! ". * #. *. 1 ; ; 1 1 1 Программа С имеет следующую структуру: Е2 L 12,0(1) POST (12) * RETURN 1 ’ 1 1 1 1 * 1 ‘ 1 1■ ! 1 В программе А выдаются две макрокоманды ATTACH, которые образуют две подзадачи. Адрес блока управления первой подза¬ дачей запоминается в поле ТВ. Адрес блока управления второй подзадачей запоминается в поле ТС. Позже адреса блоков управ¬ ления подзадачами используются в макрокомандах DETACH для уничтожения подзадач. Макрокоманда WAIT, помеченная именем Е, предусматривает ожидание двух событий, адреса блоков управления которых поме¬ щены в список LIST!. Это — ЕСВ1 и ЕСВ2. Адрес блока ЕСВ2 в списке помечен единицей в старшем разряде (DC Х’8СГ), что явля¬ ется признаком конца списка. Адреса блоков управления событиями ЕСВ1 и ЕСВ2 были пе¬ реданы в списке параметров макрокоманд ATTACH программам В и С соответственно. Структура списков параметров рассматри¬ валась в разделе 4.3. Пример списка изображен на рис. 18. Рассмотрим, каким образом программа В отмечает завершение события в блоке управления ЕСВ1 в точке программы, помеченной меткой Е1. Команда, помеченная меткой Е1, загружает адрес пер¬ вого параметра в списке (т. е. адрес ЕСВ1) в регистр 2. Затем вы¬ дается макрокоманда POST, где адрес блока управления событи¬ ем указан как содержимое регистра 2. В результате выполнения этой макрокоманды производится отметка о выполнении события в блоке управления ЕСВ1. Имя ЕСВ1 в программе В не употреб¬ ляется. Программа В производит отметку любого блока управле¬ ния событием, который передается ей как первый элемент списка параметров. Аналогично в задаче С производится отметка завер¬ шения события в блоке ЕСВ2 в точке программы, помеченной мет¬ кой Е2. Таким образом, в качестве первого операнда макрокоманды POST можно указать как имя блока управления событием, так и адрес регистра, заключенный -в скобки, который содержит адрес блока управления событием. Чтобы узнать, в какой форме допу¬ скается кодирование того или иного операнда в какой-либо макро¬ команде, необходимо обратиться к свободной таблице операндов 127
и допустимых форм кодирования, приведенной в конце описания стандартных форм в руководстве «Макрокоманды супервизора и управления данными». Макрокоманда WAIT, помеченная именем Е4, предусматривает ожидание завершения выполнения подзадач В и С. Адреса блоков управления событием помещены в списке LIST2. Это — EVENTI и EVENT2. Так как эти блоки управления событием были указаны в операндах ЕСВ макрокоманды ATTACH, программист не дол¬ жен отмечать завершение подзадачи макрокомандой POST. Мак¬ рокоманда POST выдается автоматически управляющей програм¬ мой. После завершения выполнения подзадач В и С программа А загружает в регистр 5 логическую сумму кодов завершения двух подзадач. Чтобы установить в нуль старший байт регистра 5, ко¬ торый будет содержать отметки о завершении, используется коман¬ да LA 5,0(5). Так как эта команда производит действия по прави¬ лам адресной арифметики, разряды от 0 до 7 устанавливаются в нуль. Далее необходимо проверить, равна ли полученная логическая сумма нулю. Команда LA не вырабатывает признак результата, поэтому используем команду LTR 5,5. Эта команда не производит никаких действий, кроме выработки признака результата. Если со¬ держимое регистра 5 отлично от нуля, то происходит переход пэ метке ERROR. Это свидетельствует о том, что хотя бы один из ко¬ дов завершения отличен от нуля. Если же оба кода завершения равны нулю, то происходит уничтожение подзадач В и С и завер¬ шение выполнения програзимы А. 4.3. ОРГАНИЗАЦИЯ ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ РЕСУРСОВ Выше рассматривались повторно используемые программы, ко¬ торые допускают последовательное выполнение и в отличие от ре¬ ентерабельных программ не допускают параллельного выполнения» При появлении повторных запросов на выполнение такой програм¬ мы их необходимо задерживать до завершения выполнения по пре- дыдущему запросу. При использовании макрокоманд LINK, XCTL и ATTACH про¬ верка возможности повторного использования программы и орга¬ низация поочередного использования производятся управляющей программой. Если управление такой программе передается с по¬ мощью команд передачи управления или с помощью макрокоман¬ ды CALL (т. е. без участия управляющей программы), то про¬ граммист должен выполнять все эти действия для правильного ис¬ пользования такой программы. Повторно использоваться может не только программа, но и некоторое поле данных, которое используется и модифицируется несколькими задачами, выполняемыми одновременно. В таких 123
случаях часто бывает необходимо предусматривать, чтобы запрос на данные был задержан, если эти данные модифицируются дру¬ гим запросом и модификация не завершена. Для использования их ресурсов применяется макрокоманда ENQ, осуществляющая либо запрос на использование ресурса, ли¬ бо проверку возможности использования ресурса. Освобождение повторно используемого ресурса, запрошенного ранее, производит¬ ся макрокомандой DEQ. Макрокоманда ENQ имеет следующий формат: имя ENQ (адрес имени очереди, адрес имени ресурса, Е 1 г т I SYSTEM I v s I ,[размер имени ресурса], STEP I» •**). ',RET=TEST I ,RET=USE _,RET = HAVE J Каждый ресурс идентифицируется сочетанием имени очереди и имени ресурса. Указанные имена выбираются произвольно и могуг не совпадать с истинным именем или названием ресурса, если тако¬ вое имеется. Имя очереди представляет собой поле оперативной памяти из восьми символов. Адрес этого поля указывается в пер¬ вом операнде. Имя ресурса представляет собой поле основной па¬ мяти от 1 до 255 байтов и может быть составным. Адрес этого поля указывается во втором операнде, размер — в четвертом. Третий операнд допускает значения Е или S. Значение Е обоз¬ начает запрос на монопольное использование ресурса. Если ресурс используется в результате монопольного запроса, все следующие запросы на ресурс задерживаются до освобождения ресурса мак¬ рокомандой DEQ. Монопольный запрос необходимо использовать, если ресурс изменяется в процессе выполнения запроса. Значение S определяет запрос на совместное использование ресурса. Совме¬ стные запросы используются, если ресурс не изменяется в процес¬ се выполнения запроса. Такой запрос может быть удовлетворен вместе с другими запросами на совместное использование. Если поступил запрос на монопольное использование, в то время как ресурс используется совместно, то такой запрос, а также все после¬ дующие запросы задерживаются. Значение STEP пятого операнда говорит о том, что ресурс ис¬ пользуется только внутри пункта задания. Значение SYSTEM пя¬ того операнда указывает, что ресурс используется программами нескольких пунктов заданий. Ключевой параметр RET определяет условный запрос на ре¬ сурс. Если указано TEST, то проверяется состояние ресурса путем выдачи кода возврата (0 — ресурс доступен, 4 — ресурс не досту¬ пен, 8 — этой же задачей уже сделан запрос на ресурс). Если ука¬ зано USE, ресурс используется, если это возможно; если это не¬ возможно, то задача не задерживается, о чем свидетельствуют ко¬ ды возврата 4 и 8, обозначающие то же, что и в предыдущем слу¬ чае. Если указано HAVE, то это значит, что управление ресурсом 9. Заказ 3414. 129
“требуется, если данная задача не выдавала ранее запроса на ре¬ сурс. Макрокоманда DEQ имеет следующий формат: [имя] DEQ (адрес имени очереди, адрес имени ресурса, ISTFP 1 [размер имени ресурса], [sySTEM [,RET = HAVE] Назначение операндов то же, что и в макрокоманде ENQ. Пусть программа А производит загрузку в оперативную память повторно используемой программы REUSMOD. Адрес точки входа загружается в регистр 2. Затем образуется подзадача В. Как про¬ грамма А, так и программа В совместно используют программу REUSMOD, обращаясь к ней по макрокоманде CALL. Необхо¬ димо предотвратить совместное одновременное использование про¬ граммы REUSMOD. Программа А имеет следующую структуру: LOAD ЕР = REUSMOD LR 2,0 ATTACH ЕР-В, LR 15,2 ENQ (N, М, 7, STEP) CALL (15) анализ кода возврата CEQ’ ' ’ (*N,X 7, STEP)’ N DC ’ CL8’Q V M DC CL7’REUSMOD’ Программа В имеет следующую структуру: LR 15,2 ENQ (N, M, E, 7, STEP) CALL (15) анализ кода возврата DEQ’ " (N, M,*7, STEP) ’ N DC * * CLS’QP " M DC CL7’REUSMOD’ Перед обращением к модулю адрес точки входа загружается в регистр 15, чего требует макрокоманда CALL. Далее макрокоман¬ да ENQ выдает монопольный запрос на ресурс, определяемый име¬ нами Q1 и REUSMOD. В данном примере в качестве имени ресур¬ са используется имя точки входа. Однако это делать не обязатель¬ но
но. Если программа REUSMOD будет занята, то задача, выдавшая запрос, попадает в состояние ожидания. В противном случае зада¬ ча получает управление ресурсом и выдает макрокоманду CALL. После возврата управления и анализа кода возврата производит¬ ся освобождение ресурса макрокомандой DEQ. Рассмотрим второй пример, где в качестве ресурса будет исполь¬ зован блок данных, занимающий поле из 80 байтов оперативной памяти. Программа А запрашивает 80 байтов и формирует этот блок данных. Начальный адрес поля, занимаемого этим блоком, загружается в регистр 2. Далее создаются две подзадачи В и С. В процессе дальнейшего выполнения программа А модифици¬ рует первое и второе слова указанного поля путем увеличения со¬ держимого на единицу. В программе В первое и второе слова за¬ гружаются в регистры 5 и 6, а в программе С — в регистры 9 и 10. Таким образом, программы В и С не изменяют содержимого поля. Однако необходимо обеспечить, чтобы между загрузкой первого слова и загрузкой второго слова не произошло изменения поля программой А, т. е. чтобы первое и второе слова имели одинаковый уровень изменения. Программа А имеет следующую структуру: GETMAIN* ' 'r’lV^So’ LR 2,1 ATTACH ‘ ' ЕР —В, .’ .* .* .’ ATTACH ' * ЕР = С,’ .* ENQ (N1, N2, Е, 4, STEP) Ml L 3,0(2) LA 3,1(3) ST 3,0(2) М2 L 3,4(2) LA 3,1(3) ST 3,4(2) DEQ (N1, N2, 4, STEP) N1 DC CL8’QQl Г N2 DC CL4’RR1 Г Программа В имеет следующую струк ENQ (Ml, М2, S, 4, STEP) L 5,0(2) L 6,4(2) DEQ (Ml, М2, 4, STEP) Ml DC CL8’QQI Г М2 DC CL4’RRl 1' 9* 131
Программа С имеет следующую структуру: ENQ (NM* MN, S,*4, STEP) L 9,0(2) L 10,4(2) DEQ (NM, MN, 4, STEP) NM DC CL8QQ1T MN DC CL4RR1Г Память для данных размером 80 байтов запрашивается в про¬ грамме А макрокомандой GETMAIN. Адрес выделенного поля па¬ мяти загружается в регистр 2. Далее в программе А выдается мо¬ нопольный запрос на ресурс, определяемый именами QQ11 и RR11. После выдачи запроса производится модификация первого и второго слова. Содержимое первого слова (смещение 0) увеличивается на еди¬ ницу. Для этого используется группа из трех команд, помеченная меткой Ml. Затем содержимое второго слова (смещение 4) увели¬ чивается на единицу. Для этого используется группа из трех команд, помеченная меткой М2. Для сложения единицы использует¬ ся команда LA. После завершения модификации ресурс освобож¬ дается макрокомандой DEQ. В программе В и С перед использованием первого и второго слова выдаются запросы на совместное использование. Это позво¬ ляет одновременно использовать данные этими программами и предотвращает модификацию данных программой А до тех пор, пока использование не будет закончено. Имена, определяющие ре¬ сурс, должны быть одинаковыми во всех задачах (в примере QQ11 и RR11).
5. ОРГАНИЗАЦИЯ ДАННЫХ 5.1. ОСНОВНЫЕ ПОНЯТИЯ Одной из основных функций управляющей программы ОС ЕС является управление данными. Управляющая программа ОС ЕС обладает большим арсеналом стандартных программ, выполняющих управление данными и вы¬ зываемых либо с помощью специального языка, либо путем преры¬ ваний от ввода-вывода. Управление наборами данных обеспечива¬ ет работу с ними как на уровне логических записей, так и на уров¬ не физических записей (блоков). Набор данных понимается как группа логически связанных между собой данных, определенным образом организованная и по¬ именованная. Программа, обрабатывающая или порождающая на¬ бор данных, имеет дело с логическими записями, поэтому набор данных есть совокупность логических записей. Логическая за¬ пись— не что иное, как единица информации для программы, ра¬ ботающей с набором данных. Если рассматривать набор данных с точки зрения его размещения на физическом носителе информа¬ ции и работы с ним внешних устройств, то он представляет собой совокупность физических записей. Возможно совпадение логиче¬ ских и физических записей, но оно не всегда имеет место. При записи набора данных на тот или иной носитель стремятся обеспечить экономное использование носителя и эффективную об¬ работку набора данных. Физические записи на носителе разделя¬ ются промежутками, в связи с чем для уплотнения информации часто бывает полезно объединять несколько логических записей в один блок. Этот процесс называют блокированием. Он позволяет, с одной стороны, экономнее использовать носители, а с другой — повышает эффективность обработки наборов данных, благодаря уменьшению числа обращений к внешним устройствам. Организация наборов данных существенно зависит от носите¬ ля информации, который предполагается использовать для хране¬ ния этого набора. В Единой системе в качестве носителей инфор¬ мации могут использоваться перфокарты, перфоленты, магнитные ленты, пакеты магнитных дисков, магнитные барабаны, как уже упоминалось. Физическую единицу носителя информации называ¬ ют томом. Чаще всего этот термин используется по отношению к бобине магнитной ленты, пакету магнитных дисков, магнитному барабану, реже — к другим носителям: перфокарте или бобине 133
перфоленты. Кроме того, очень часто используется понятие «том прямого доступа», которое обобщает понятия «пакет магнитных дисков» и «магнитный барабан». 5.2. ФОРМАТЫ ЛОГИЧЕСКИХ ЗАПИСЕЙ Для организации набора данных нужно выбрать формат запи¬ сей. Выбор формата записей определяется природой самих данных и алгоритмом их последующей обработки. Внутри набора данных все записи должны иметь одинаковый формат. В ОС ЕС преду¬ смотрены три формата записей: записи фиксированной длины (формат F), записи переменной длины (формат V) и записи неоп¬ ределенной длины (формат U). Размер записей фиксированной длины—постоянная величина для всех записей набора данных, поэтому для управляющей про¬ граммы достаточно однократного задания длины записей. Первым байтом логической записи можете быть управляющий символ, ко¬ торый используется либо для выбора приемного кармана при перфорации набора данных, либо для управления форматом печа¬ ти при распечатке набора. Коды управляющих символов указаны в приложении 1. Управляющий символ опознается управляющей программой, если она получает от программиста указание об ис¬ пользовании управляющего символа, и применяется только при выводе данных на соответствующее устройство (т. е. карточный перфоратор или АЦПУ). Если управляющий символ использует¬ ся при выводе данных, он не перфорируется и не распечатывается. В противном случае он рассматривается как первый байт данных. Логические записи фиксированной длины могут объединяться в блоки. Блоки набора данных содержат одинаковое число логиче¬ ских записей (хотя допускается и наличие укороченных блоков), однако длина блока должна быть кратной длине логических запи¬ сей. Работа с записями фиксированной длины проста для програм¬ миста, ее целесообразно использовать во всех возможных случаях. Записи переменной длины характеризуются тем, что они сами несут в себе информацию о своей длине. Для задания длины запи¬ си используются первые два байта записи, следующие два байта записи обычно не несут информационной нагрузки и служат толь¬ ко для выравнивания последующей части записи в оперативной памяти по целочисленной границе. Таким образом, сами данные в записи переменной длины начинаются с пятого байта. Длина за¬ писи представляет собой длину данных в байтах, увеличенную на 4 байта. В таком виде запись должна быть создана до передачи ее управляющей программе. Как и записи фиксированной длины, записи переменной длины могут содержать управляющий символ, но здесь он помещается в пятый байт. Логические записи переменной длины могут объединяться в блоки. Так как длина блока записей переменной длины переменна, блок также должен содержать информацию о своей длине. Ин¬ формация о длине блока помещается в первые два байта блока, 1S4
последующие два байта блока обычно не используются (служат для выравнивания последующей части блока по целочисленной грани¬ це). Длина блока на 4 байта больше суммы длин логических запи¬ сей. Далее помещаются логические записи в описанном выше фор¬ мате. Блок в таком виде формируется управляющей программой, либо программой пользователя в зависимости от используемого метода доступа. Так как для носителей информации имеются ограничения на длину блока, для записей переменной длины вводится возможность сегментирования логических записей. Оно может выполняться дву¬ мя способами: без блокирования и с блокированием. Необходи¬ мость в сегментировании возникает в тех случаях, когда длина ло¬ гической записи превышает максимальный размер блока, допусти¬ мый на носителе информации. На рис. 22 и 23 показываются раз¬ личные случаи сегментирования двух логических записей. При сегментировании без блокирования каждый блок данных содержит один сегмент логической записи, все сегменты логической записи, кроме последнего, имеют одинаковую длину. Две логиче¬ ские записи представлены шестью блоками данных. При сегменти¬ ровании с блокированием допускается объединение в один блок данных последнего сегмента некоторой логической записи с пер¬ вым сегментом следующей за ней логической записи. Благодаря этому те же логические записи при тех же условиях сег¬ ментирования представляются пятью блоками данных, что обес¬ печивает более экономное использование носителя информации при сегментировании с блокированием. блок 1 блок 2 блок 3 блок 4 Блок 5 блок 6 - Сегмент 1 — Сегмент 2 — СегментЗ — Сегмент 1 — Сегмент 2 — Сегмент 3 - первой — первой первой второй второй второй логической логической логической логической логической логической - записи — записи — зйпйсй — записи — записи — записи U—г—J ^ U— г-Н ~+—1г Рис. 22. Сегментирование логических записей без блокирования = Каждый сегмент логической записи содержит управляющее поле длиной 4 байта. Первые 2 байта этого поля содержат длину сегхмента, третий байт содержит код начала сегмента, его продол¬ жения или конца, а четвертый байт не используется. Блок из сег¬ ментов оформляется так же, как и в случае без сегментирования. блок t блок 2 блок 3 блок 4 блок 5 - Сегмент 1 — Сегмент 2 — Сегмент J 1 Сегмент / — Сегмент 2 — Сегмент J первой первой первой | второй второй второй логической логической логической , погической логической логической - записи — записи — записи | записи — записи — записи 1 ► 1 —► 1 - Рис. 2-3. Сегментирование логических записей с блокированием 135
Первым символом сегмента может быть управляющий символ. Уп¬ равляющее поле сегмента создается и соответственно используется либо управляющей программой, либо программой пользователя’в зависимости от используемого метода доступа. При работе с томами прямого доступа управляющая програм¬ ма в некоторых случаях освобождает программиста от забот о свя¬ зи между задаваемым им программе размером блока и максималь¬ но допустимым размером блока на томе. Управляющая програ^ ма сама выполняет сегментирование блока переменной длины при его записи на том прямого доступа в соответствии с максимально допустимым размерам блока на нел^ а также сборку блока из сег¬ ментов при его восстановлении с тома прямого доступа. Записи неопределенной длины, так же как и записи фиксиро¬ ванной длины, не содержат в себе информацию о своей длине. По¬ этому обычно данные начинаются в записи либо с первого байта, либо со второго байта в зависимости от наличия управляющего символа. Управляющая программа ОС ЕС при работе с записями неоп¬ ределенной длины не обеспечивает объединения записей в блоки •или выделения их из блоков. В этом случае она работает с физи¬ ческими записями (блоками) неопределенной длины, которые либо идентичны логическим записям, либо представляют собой блоки логических записей, но обмен между программой пользователя и управляющей программой производится физическими записями. Таким образом, работа по блокированию логических записей и вы¬ делению их из блоков возлагается на программу пользователя. При работе с томами прямого доступа управляющая програм¬ ма может, как уже говорилось выше, освобождать программиста о т_об я з а н н ос ти еле ди ш. ля, jcqot но.ш.ен и ем между задаваемым им размером блока и максимально допустимым размером блока на томе, а также обеспечивать наиболее экономное использование то¬ мов даже при соблюдении указанного соотношения. Такая воз¬ можность имеет место для любого из описанных выше форматов записей, если она, с одной стороны, запрашивается программистом на уровне описания формата записей, а с другой стороны, обеспе¬ чивается устройствами управления накопителями прямого доступа. Если при выполнении этих двух условий либо длина блока данных превышает максимально допустимый размер блока (длину дорож¬ ки), либо блок данных не вмещается на оставшейся свободной ча¬ сти дорожки, управляющая программа сегментирует этот блок, причем отметка сегментов выполняется аппаратно^ Вследствие этого при восстановлении блока данных операция чтения на нако¬ пителе выполняется до тех пор, пока не будет достигнут конец пос¬ леднего сегмента блока данных. 5.3. ОРГАНИЗАЦИЯ ДАННЫХ НА ПЕРФОКАРТАХ Наиболее употребительны 80-колонные перфокарты. На такой перфокарте размещено 80 колонок, которые пронумерованы слева 136
направо от 1 до 80, и 12 строк, которым присвоены номера сверху вниз: 12, 11, 0, 1, 2, ..., 9. В любой из 960 позиций перфокарты можно отперфорировать прямоугольное отверстие. Информация на перфокарту может быть нанесена двумя способами. Первый способ кодирования информации состоит в том, что каждая колонка пер¬ фокарты представляет собой символ в перфокарточном коде ЕС ЭВМ (см. приложение 2). Информация поступает в оперативную память ЭВМ в коде ДКОИ. В этом случае максимальная длина физической записи равна 80 байтам. Второй способ кодирования предусмотрен для ввода в ЭВМ ин¬ формации, отперфорированной в двоичном коде. В этом случае каждая колонка перфокарты содержит 2 байта, представленных в двоичном виде. Первый байт занимает строки 12, 11, 0, 1, 2, 3; вто¬ рой байт — строки 4, 5, 6, 7, 8, 9. При передаче в оперативную па¬ мять данных таким образом подготовленной перфокарты у каждо¬ го из байтов разряды 0 и 1 нулевые, а далее следует комбинация из шести разрядов, считанная с перфокарты. При таком способе кодирования максимальная длина физической записи на перфо¬ карте составляет 160 байтов. Набор данных на перфокартах — это колода перфокарт. При организации набора данных на перфокартах можно использовать любой из трех возможных форматов записей. Управляющая про¬ грамма не предусматривает контроля начального и конечного бло¬ ков набора. За установку соответствующей колоды перфокарт от¬ вечает оператор, однако при необходимости контроль начального и конечного блоков набора данных может выполнять программа пользователя. Набор данных на перфокартах может иметь только последовательную организацию. 5.4. ОРГАНИЗАЦИЯ ДАННЫХ НА ПЕРФОЛЕНТЕ Информация на перфоленту наносится в виде непрерывной по¬ следовательности символов, каждый из которых закодирован в виде определенной комбинации пробивок в одной колонке. В ЕС ЭВМ предусмотрено использование 5-, 6-, 7- и 8-дорожечных пер¬ фолент. Практически информация может быть нанесена на перфо¬ ленту в любом коде, в этом коде она и будет введена в оператив¬ ную память ЭВМ. Кодопреобразование введенной информации производится, если это требуется, программным путем. Оно может выполняться управляющей программой или программой поль¬ зователя. Управляющая программа ОС ЕС стандартно преду¬ сматривает кодопреобразование из 7-разрядного кода ЕС ЭВМ (см. приложение 3) во внутримашинный код ДКОИ (см. приложе¬ ние 4) или обмен без кодопреобразования. Управляющая програм¬ ма имеет достаточно простой аппарат встраивания любых таблиц для кодопреобразования. При организации наборов данных на перфоленте используются два формата записей — формат F и формат U. Записи в формате F наносятся на перфоленту друг за другом и не разделяются между 137
собой. Записи в формате U отделяются друг от друга символом «Конец блока». Роль символа «Конец блока» может выполнять лю¬ бой символ из используемого набора символов. Один набор данных может размещаться на нескольких бобинах перфоленты. На одной бобине можно разместить несколько набо¬ ров данных. В последнем случае наборы отделяются друг от друга участками перфоленты без пробивок (обязательно наличие синхро¬ дорожки), длина которых не менее 25 см. Управляющая програм¬ ма ОЕ ЕС не предусматривает контроля начального и конечного блока набора данных, таким образом, оператор отвечает за уста¬ новку соответствующей бобины перфоленты. Однако при необхо¬ димости такой контроль может выполнять программа пользова¬ теля. Подобно наборам данных на перфокартах наборы данных на перфоленте имеют последовательную организацию. Устройства ввода и вывода информации на перфоленту ЕС ЭВМ допускают только последовательную обработку набора данных на перфо¬ ленте. 5.5. ОРГАНИЗАЦИЯ ДАННЫХ НА МАГНИТНОЙ ЛЕНТЕ В ЕС ЭВМ используются 9-дорожечные магнитные ленты, что позволяет записывать на них 8-разрядный байт и контрольный разряд. Информация записывается на магнитную ленту в коде ДКОИ и может иметь плотность записи 8 байтов на 1 мм или 32 байта на 1 мм..Информация на магнитной ленте начинается от точ¬ ки засрузки, которая отмечается специальным маркером начала ленты. Информационные блоки разделяются межблочными про¬ межутками. Минимальная длина блока равна 18 байтам. Емкость одной бо¬ бины магнитной ленты составляет примерно 23 Мбайта при плот¬ ности записи 32 байта на 1 мм. Информационные массивы на маг¬ нитной ленте разделяются специальным блоком, называемым ленточной маркой. На магнитной ленте имеется маркер конца лен¬ ты. Он индицирует, уместилась ли последующая запись на магнит¬ ную ленту. При организации наборов данных на магнитных лен¬ тах может использоваться любой из трех возможных форматов за¬ писей. В простейшем случае набор данных на магнитной ленте пред¬ ставляет собой совокупность блоков, расположенных между двумя ленточными марками или между точкой загрузки и ленточной мар¬ кой. Такой режим работы с магнитной лентой задается управляю¬ щей программе в параметре LABEL оператора DD как режим ра¬ боты без меток. При работе с такой магнитной лентой оператор и программист отвечают за установку нужной бобины и подвод на ней соответствующего набора данных. При этом достаточно вели¬ ка вероятность ошибок оператора и программиста, которые могут 138
привести к значительной потере машинного времени или к затира¬ нию информации на магнитной ленте. Рекомендуется другой режим работы с магнитной лентой — ра¬ бота с использованием стандартных меток. Стандартные метки представляют собой физические записи длиной 80 байтов. При ис¬ пользовании стандартных меток информация на магнитной ленте имеет следующую структуру: группа меток, идентифицирующая том, наборы данных, каждый из которых включает группу меток начала набора, собственно данные и группу меток конца набора данных (или конца тома). Группа меток, идентифицирующая том, записывается в начале каждой бобины магнитной ленты и может содержать от одной до восьми меток с идентификаторами VOL1—VOL8. Используется только одна метка VOL1. Управляющая программа с помощью этой метки контролирует правильность установки тома на накопи¬ теле. Группа меток начала набора данных может содержать от од¬ ной до восьми системных меток с идентификаторами HDR1 — HDR8, а также до восьми пользовательских меток с идентифика¬ торами UHL1 — UHL8. Чаще используются две метки: HDR1 и HDR2. HDR1 используется управляющей программой для контро¬ ля правильности подвода запрошенного набора данных. Метка HDR2 содержит характеристики набора данных: формат записи, длину блока, длину логической записи и пр. Группа меток начала набора данных отделяется от собственно данных ленточной мар¬ кой. Группа меток конца набора данных (конца тома) может содер¬ жать от одной до восьми системных меток с идентификаторами EOF1—EOF8(EOVl—EOV8),a также до восьми пользовательских меток с идентификаторами UTL1—UTL8. Обычно используются две метки: EOF1 и EOF2 (EOV1 и EOV2), их содержимое аналогично содержимому меток HDR1 и HDR2, что позволяет обрабатывать набор данных в обратном направлении от конца к началу. Метка EOF1 содержит число блоков в области данных набора. Управ¬ ляющая программа использует это число для контроля правильно-, сти считывания набора. Собственно данные отделяются от группы меток конца набора данных ленточной маркой. После группы меток конца набора данных следует одна ленточная марка, если вслед за этим набором данных размещен следующий, или две ленточные марки,если это последний набор данных на данном томе. После группы меток конца тома следует одна ленточная марка. Группа меток конца тома записывается в том случае, когда набор дан¬ ных не ухмещается на данную магнитную ленту, и его продолжение помещается на другую ленту. Метки пользователя обрабатываются специально идентифици¬ рованными подпрограммами, входящими в состав программы пользователя или вызываемыми ею. Управляющей программе со¬ общается об использовании меток пользователя в параметре LA¬ BEL оператора DD, описывающего набор данных. Возможен так- Г39
х(с третий режим работы с магнитной лентой — работа с исполь- зозанием нестандартных меток. Управляющая программа допуска¬ ет обработку нестандартных меток только в том случае, когда первая запись на томе отлична от стандартной метки тома VOLI. Для обработки нестандартных меток ОС ЕС предоставляет аппа¬ рат, обеспечивающий встраивание специально написанных для этого программ в управляющую программу. В любом из вышеописанных режимов работы с магнитной лен¬ той набор данных может занимать несколько томов. На одном то¬ ме может размещаться несколько наборов данных. Кроме того, в случае стандартной разметки магнитной ленты возможна запись совокупности наборов данных на нескольких томах со сквозной их нумерацией. Для защиты информации на магнитной ленте от затирания ис¬ пользуются как аппаратные, так и программные средства. Так, бобина магнитной ленты имеет съемное кольцо защиты тома, от¬ сутствие которого предотвращает выполнение записи на том. Про- граммные средства защиты информации применимы только для магнитных лент со стандартными метками. В этом случае можно, используя параметр LABEL оператора DD, установить срок сох¬ ранности набора данных. Тогда управляющая программа каждый раз при попытке затирания набора контролирует, истек ли срок его сохранности. Кроме того, управляющая программа ОС ЕС со¬ держит систему автоматического разграничения доступа к набо¬ рам данных на магнитны^ лентах со стандартными метками. До¬ ступ к набору данных, обслуживаемому этой системой, разрешает¬ ся лишь по предъявлению пароля (см. параметр LABEL операто¬ ра DD). Магнитные ленты, которые предназначаются для работы со стандартными метками, предварительно инициализируются. Ини¬ циализация тома магнитной ленты состоит в записи на нем стан¬ дартной метки тома (VOL1), фиктивной метки начала первого на¬ бора данных (HDR1) и ленточной марки. Эта операция выполняет¬ ся с помощью системной утилиты IEHINITT. Выполнение такой инициализации совершенно необходимо для любой ранее неис¬ пользованной магнитной ленты, если во время генерации опера¬ ционной системы в нее не включена возможность обхода обработ¬ ки метки тома. На магнитной ленте, как и на других ранее описанных носите¬ лях информации, возможна лишь последовательная организация наборов данных. Хотя на накопителях на магнитных лентах поми¬ мо операций чтения и записи возможно выполнение таких опе¬ раций, как подача на блок вперед или назад, а также подача на файл вперед или назад, практически невозможна эффективная вы¬ борочная обработка записей последовательных наборов данных. Это объясняется тем, что команды подачи мало отличаются по скорости выполнения от операций чтения. В связи с этим после¬ довательные наборы данных на магнитных лентах обычно исполь¬ зуются для последовательной обработки. 140
5.6. ОРГАНИЗАЦИЯ ДАННЫХ НА ТОМАХ ПРЯМОГО ДОСТУПА В ЕС ЭВМ предполагается большое разнообразие томов пря¬ мого доступа — это различные пакеты дисков и магнитные бара¬ баны. С точки зрения форматов физических записей и организации данных тома прямого доступа ЕС ЭВМ идентичны. Поэтому доста¬ точно ознакомиться с организацией данных на пакетах дисков для накопителей типа ЕС-5050. Пакет дисков для накопителей типа ЕС-5050 состоит из 6 дис¬ ков. Запоминающая поверхность каждого диска представляет со¬ бой совокупность дорожек, на которые записывается информация. Группа дорожек, доступных при фиксированном положении меха¬ низма доступа накопителя, называется цилиндром. Цилиндр рас¬ сматриваемого пакета дисков содержит 10 дорожек (на наружных поверхностях верхнего и нижнего дисков запись не производится). Число цилиндров определяется количеством дорожек на одной за¬ поминающей поверхности (в данном случае оно равно 203). Ци¬ линдры нумеруются от 0 до 202. Дорожки внутри цилиндра нуме¬ руются от 0 до 9. Данные на дорожку записываются в виде блоков и нумеруются с нуля. Таким образом, физический адрес блока на пакете задается в виде CCHHR, где СС — двоичное число, указывающее номер ци¬ линдра (два байта); НН — двоичное число, указывающее номер дорожки (два байта); R — двоичное число, указывающее номер блока на дорожке (один байт). Блоки записываются на дорожку в виде двух или трех отдельных областей, разделенных промежут¬ ками: области идентификатора, области ключа и области данных. Область ключа может отсутствовать, поэтому блоки могут быть с ключами или без них. метко нОнапа ойорото Промежуток Собственный адрес дорожки Рис. 24. Формат дорожки с блоками без ключей На рис. 24 и 25 изображены форматы дорожки с блоками, имеющими ключи, и с блоками без ключей. Для указания начальной точки записи на всех дорожках на па¬ кете имеется специальная метка начала оборота, которая опозна¬ ется при каждом полном обороте пакета. В начале каждой дорож¬ ки записывается собственный адрес дорожки, содержащий номер цилиндра и номер дорожки и отражающий состояние дорожки. Да¬ лее следует блок Ro, который обычно используется операционной системой для хранения информации о заполненности дорожки дан¬ ными. Вслед за блоком R0 идет адресный маркер, представляющий 141
Собственный адрес дорожки -ш ■х » с- собой специальную об¬ ласть, идентифицирую¬ щую начало блока. Ад¬ ресный маркер предшест¬ вует каждому блоку, за исключением блока R0. На рис. 24 и 25 пока¬ зана также структура блока. Идентификатор блока содержит физиче¬ ский адрес блока, а также информацию о длине клю¬ ча и данных. Ключ блока § содержит некоторый при- % знак блока (например, * имя блока), который мо- ! жет использоваться в ка- | честве аргумента при по- g иске блока, если неизве- стен его физический ад- S рес. Длина ключа может я составлять от 1 до 255 | байтов. Нулевая длина | ключа означает его отсут- 40 ствие. Максимальная дли- к на поля данных, опреде- | ленная в идентификаторе, а, равна 65 535 байтам. Од- S’ нако обычно длина блока Й не превышает длины од- о. ной дорожки (у пакетов е для накопителей ЕС-5050 ю- 3625 байтов) либо, если в ^ устройстве управления * накопителями реализова¬ на возможность сегменти¬ рования блоков, не пре¬ восходит длины цилинд¬ ра. Информационные мас¬ сивы на томе прямого до¬ ступа могут разделяться специальным блоком, представляющим одно¬ байтовый фиктивный блок с нулевой длиной ключа и нулевой длиной данных. Перед использованием тома прямого доступа 142
выполняется его инициализация, представляющая собой процесс подготовки тома к использованию. Она включает запись на каж¬ дой дорожке ее собственного адреса и блока Ro, проверку поверх¬ ности тома, формирование метки и оглавления тома. У большинства томов прямого доступа все дорожки делятся на две группы — группу основных дорожек и группу запасных до¬ рожек. Так, у пакетов для накопителей типа ЕС-5050 к группе ос¬ новных дорожек относятся дорожки цилиндров 0—199, а к группе запасных — дорожки цилиндров 200—202. Если при проверке по¬ верхности тома в группе основных дорожек обнаруживается де¬ фектная дорожка, то она подменяется запасной дорожкой. Авто¬ матический переход с дефектной дорожки на соответствующую запасную выполняется с помощью блока Ro- Идентификатор блока Ro дефектной дорожки содержит адрес запасной дорожки, которая ее подменяет, а идентификатор блока R0 этой запасной дорожки содержит адрес соответствующей дефектной дорожки. Так уста¬ навливается взаимосвязь между дефектной дорожкой и заменяю¬ щей ее запасной дорожкой. Во время инициализации тома на нулевой дорожке нулевого цилиндра формируется метка тома, которая представляет собой блок, содержащий идентификатор, ключ длиной 4 байта (VOL1) и собственно метку длиной 80 байтов. Эта метка по своему форма¬ ту и назначению аналогична метке тома VOL1 на магнитной ленте и отличается от нее только тем, что дополнительно содержит физический адрес оглавления тома. Вслед за меткой на этой же дорожке могут располагаться дополнительные метки тома с иден¬ тификаторами VOL2 — VOL8. Оглавление тома — это набор данных, который содержит метки всех наборов данных, находящихся в текущий момент времени на данном томе. Кроме того, оглавление содержит информацию о сво¬ бодных областях, имеющихся на томе. Оглавление тома состоит из блоков, имеющих 44-байтовую область ключа и 96-байтовую об¬ ласть данных. Каждый блок представляет собой метку определен¬ ного формата и назначения. В момент инициализации тома оглав¬ ление формируется в следующем виде. Первой в оглавлении тома стоит метка 4-го формата. Это метка самого оглавления. В ней со¬ держится информация обустройстве, на котором установлен том, информация оЭДзазмере самого оглавления, о*запасных дорожках на томе и т.д. Далее следует метка 5-го формата, в ней записывает¬ ся информация о свободных областях на томе (нижняя и верхняя границы непрерывной области в виде физических адресов). В одной метке 5-го формата могут быть описаны 26 непрерывных областей. При большем числе свободных областей на томе заводится еще одна метка 5-го формата. Метки 5-го формата, если их не¬ сколько, связываются между собой в цепочку. После инициализа¬ ции тома прямого доступа на нем находится только один набор данных — оглавление тома, поэтому вся остальная часть тома указана в метке 5-го формата как свободная. Вся остальная ласть оглавления__заполняется метками нулевого формата, которые не 143
содержат никакой полезной информации и записываются с целью форматирования оглавления тома. В дальнейшем при использова¬ нии тома на их место будут помещаться метки наборов данных, записанных на этот том. Инициализацию томов прямого доступа можно выполнить, используя либо независимую утилиту IBCDASDI, либо систем¬ ную утилиту IEHDASDR. Управляющая программа ОС ЕС обес¬ печивает автоматическое распределение памяти на томах прямого доступа. Для запроса памяти на томе прямого доступа использу¬ ется параметр SPACE оператора DD, описывающего набор дан¬ ных. В момент выделения памяти под набор данных на томе пря¬ мого доступа в оглавление тома помещаются метки, описывающие этот набор. Наборы данных, находящиеся на томе прямого доступа, могут описываться метками 1-го, 2-го и 3-го форматов. Метка 1-го фор¬ мата имеется в оглавлении для каждого набора данных. Она ис¬ пользуется управляющей программой ОС ЕС для определения физических границ областей тома, выделяемых под набор данных. В одной метке 1-го формата могут быть описаны границы только трех непрерывных областей тома. Если же при выделении памяти под набор данных число непрерывных областей превышает три, то в оглавлении тома заводится метка (или несколько меток) 3-гэ формата, в которой описываются последующие области тома. Мет¬ ки 1-го и 3-го форматов связываются между собой в цепочку. Одна метка 3-го формата может содержать описания до 13 областей, выделенных под набор данных. Для набора данных с индексно-последовательной организаци¬ ей, кроме метки 1-го формата, заводится метка 2-го форАмата. В этой метке описывается физическое расположение различных ча¬ стей этого набора. Метка 2-го формата сцепляется с меткой 1-го формата. При работе с несколькими наборами данных на одном томе прямого доступа для минимизации перемещений механизма досту¬ па накопителя можно разместить эти наборы данных на совокуп¬ ности нескольких цилиндров, причем так, что на каждом цилиндре из этой совокупности будет находиться часть каждого набора. Такой запрос на память под совокупность наборов данных можно сделать, используя параметр SPLIT в операторах DD, описываю¬ щих эти наборы. В этом случае в оглавлении тома появится также метка 6-го формата, описывающая совокупность цилиндров, ис¬ пользуемую под несколько наборов данных. Метки 6-го формата образуют цепочку с меткой 4-го формата. По окончании шага задания (нормальном или аварийном) уп¬ равляющая программа в зависимости от значения параметров DISP в операторе DD, описывающем набор данных, либо сохра¬ няет этот набор, либо освобождает занимаемое им место для по¬ следующего распределения под новые наборы данных. Освобожде¬ ние областей тома не означает уничтожения самого набора дан¬ ных, а сводится к замене меток этого набора метками нулевого Формата и коррекции метки 5-го формата для отражения текуще- 144
го состояния свободной памяти на томе. Для освобождения памя¬ ти из-под набора данных можно использовать также системную утилиту IEHPROGM. Оглавление тома может быть распечатано с помощью систем¬ ной утилиты IEHLIST. Если набор данных должен сохраняться на томе прямого досту¬ па в течение некоторого времени, то для защиты его от затирания или освобождения памяти из-под него можно использовать зада¬ ние в параметре LABEL оператора DD срока сохранения этого набора данных. Тогда управляющая программа будет учитывать этот срок при обращениях к набору данных. Управляющая программа ОС ЕС включает систему автомати¬ ческого разграничения доступа к наборам данных, хранящихся на томах прямого доступа. Доступ к набору данных, обслуживаемо¬ му этой системой (см. параметр LABEL оператора DD), разре¬ шается лишь по предъявлении пароля. На томах прямого доступа кроме рассмотренных выше меток наборов данных можно использовать метки пользователя начала и конца набора данных. Об их использовании управляющей про¬ грамме сообщается через параметр LABEL оператора DD, описы¬ вающего набор данных. Под метки пользователя отводится толь¬ ко одна, первая дорожка, отведенная под набор данных. На эту дорожку помещаются сначала метки начала набора данных с идентификаторами UHL1 — UHL8, а за ними метки конца набора данных с идентификаторами UTL1 — UTL8. Метки пользователя представляют собой блоки, содержащие 4-байтовое поле ключа и 80-байтовое поле данных. Эти метки об¬ рабатываются специальным образом идентифицируемыми подпро¬ граммами, входящими в состав программы пользователя или вы¬ зываемыми ею. На томах прямого доступа также возхможна последовательная организация наборов данных и последовательная обработка этих наборов. Однако описанная выше структура данных на томах прямого доступа и возможности накопителей на них (поиск запи¬ си по физическому адресу или 'ключу без просмотра всех записей набора данных) позволяют создавать наборы данных с другими типами организации и осуществлять выборочную обработку запи¬ сей этих набороз. Выборочная обработка данных возможна и при последователь¬ ной организации наборов данных, однако эффективность последней существенно зависит от организации данных в наборе. В связи с этим в ОС ЕС для томов прямого доступа предусмотрены помимо последовательной организации наборов данных еще три типа орга¬ низации наборов: библиотечная, индексно-последовательная и прямая. При библиотечной организации набор данных состоит из пои¬ менованных разделов, внутри 'которых данные организованы по¬ следовательно, и оглавления. В оглавлении набора содержатся имена всех разделов набора данных и их адреса, В результате 10. Заказ 3414. 145
доступ к любому разделу библиотеки осуществляется непосредст¬ венно по его имени. Библиотечная организация применяется чаще всего для хранения программ и таблиц. При индексно-последовательной организации набора данных каждая логическая запись набора содержит специальное поле- ключ. Записи в наборе данных располагаются в порядке возраста¬ ния ключей. Набор данных также включает несколько уровней индексов, с помощью которых обеспечивается более эффективный поиск записи в наборе. Возможна как последовательная, так и выборочная обработка записей набора данных. При прямой организации набора данных порядок расположе¬ ния записей в нем определяется программистом. На программи¬ ста возлагается задача минимизации поиска записей в наборе данных. Наборы данных с прямой организацией допускают как последовательную, так и выборочную обработку их записей.
6. УПРАВЛЕНИЕ НАБОРАМИ ДАННЫХ 6.1. ПОНЯТИЕ МЕТОДА ДОСТУПА Любой набор данных, используемый в программе, должен быть описан программистом непосредственно в программе, а также в задании на выполнение программы. Способ описания набора дан¬ ных как в программе, так и в задании зависит от организации набора данных и предусматриваемого способа доступа к нему. Опе¬ рационная система ЕС ЭВМ располагает четырьмя типами орга¬ низации наборов данных: последовательной, библиотечной, индекс¬ но-последовательной и прямой. В управляющей программе ОС ЕС реализованы два способа доступа к данным: способ с очередями и базисный способ. Прин¬ ципиальная разница между ними состоит в работе с буферами и в средствах синхронизации ввода-вывода с программой. При способе доступа с очередями программист в своей про¬ грамме предполагает обмен данными с управляющей программой на уровне логических записей. Объединение логических записей в блоки или выделение их из блоков выполняется управляющей про¬ граммой. Ввод данных выполняется раньше, чем на него поступит запрос из программы пользователя, а вывод данных — с задерж¬ кой по отношению к запросу. Управляющая программа обеспечи¬ вает автоматическую синхронизацию выполнения запросов на ввод-вывод с выполнением программы и автоматическое управле¬ ние буферами. При базисном способе доступа операционная система не вы¬ полняет предварительного планирования операций ввода-вывода, так как последовательность запросов ей неизвестна. Программист в своей программе осуществляет обмен данными с управляющей программой на уровне физических записей.^Объединение логиче¬ ских записей в блок и выделение их из блока,^контроль заверше¬ ния запроса на ввод-вывод,^анализ успешности его завершения, управление буферами предусматриваются программистом в его программе. Сочетание способа доступа к данным с определенным типом организации набора данных называется методом доступа. Базис¬ ный способ доступа применим ко всем типам организации набора данных, способ доступа с очередями ориентирован на последова¬ тельную и индексно-последовательную организацию. В табл. 2 при¬ ведены основные методы доступа операционной системы ЕС ЭВМ. Каждый метод доступа имеет свой набор 'макрокоманд (см. при¬ ложение 5). 10* 147
Таблица 2 Метод доступа Организация данных при базисном способе при способе с очередями Индексно-последова¬ тельная Последовательная Базисный последовательный (BSAM) Индексно-последовательный Последовательный с очередями (QSAM) Индексно-последова¬ тельный с очередями (QISAM) (BISAM) Библиотечная Прямая Библиотечный (ВРАМ) Прямой (BDAM) Помимо перечисленных выше методов доступа программист имеет возможность использовать так называемый элементарный способ доступа, т. е. программирование на уровне макрокоманды ЕХСР, которым обычно при использовании того или иного из ос¬ новных методов доступа программист непосредственно не пользу¬ ется. Применение этого способа требует от программиста свобод¬ ного владения навыками программного управления внешними устройствами на физическом уровне, от чего он освобождается, используя методы доступа, предоставляемые управляющей про¬ граммой ОС ЕС. Для управления набором данных управляющая программа ОС ЕС использует блок управления данными, который представ¬ ляет собой таблицу, отражающую характеристики набора данных, требования к его обработке и прочую информацию, необходимую для управления набором. Построение блока управления данными осуществляется с помощью макрокоманды DCB (см. приложе¬ ние 6) во время трансляции программы. Макрокоманда DCB имеет только два обязательных операн¬ да—DSORG и MACRF. Первый задает тип организации набора данных, а второй определяет метод доступа, используемый для ра¬ боты с набором данных. С помощью макрокоманды DCB выпол¬ няется первичное заполнение блока управления данными инфор¬ мацией, заданной в операндах этой макрокоманды. Чтобы можно было использовать блок управления данными, программист дол¬ жен предусмотреть в своей программе процедуру открытия блока управления данными. Эта процедура вызывается с помощью мак¬ рокоманды OPEN. Во время выполнения этой процедуры происхо¬ дит окончательное заполнение блока управления данными. При этом для заполнения блока управления данными используется информация из оператора DD, описывающего этот набор данных на языке управления заданиями, а также информация из меток набора данных (имеются в виду наборы данных со стандартными 6.2. БЛОК УПРАВЛЕНИЯ ДАННЫМИ 148
метками на магнитной ленте и наборы данных на томах прямого доступа) при обработке уже существующего набора. Информация из оператора DD хранится операционной системой в блоке управ¬ ления файлом, который размещается во внешней памяти на томе прямого доступа. Во время выполнения процедуры открытия блока управления данными сначала заполняются свободные поля блока управления файлом информацией из меток набора данных, и только после этого свободные поля блока управления данными заполняются информацией из блока управления файлом. В операторе DD можно задать следующие операнды макро¬ команды DCB: BFALN, BFTEK, BLKSIZE, BUFL, BUFNO, CODE, CYLOFL, DEN, DSORG, EROPT, KEYLEN, LIMCT, LRECL, MODE, NCP, NTM, OPTCD, PRTSP, RECFM, RKP, STACK. В метках наборов данных могут содержаться следующие пара¬ метры оператора DD: магнитная лента —RECFM, BLKSIZE, LRECL, BFALN; тома прямого доступа — RECFM, OPTCD, KEYLEN, DSORG, BLKSIZE, LRECL, RKP, BFALN. Таким образом, при формировании блока управления данными наивысший приоритет имеет информация из макрокоманды DCB, следующей по приоритету является информация из оператора DD, и самый меньший приоритет имеет информация из меток набора данных. Такой алгоритм формирования блока управления данными позволяет при соответствующем написании программы делать ее достаточно независимой от характеристик обрабатывае¬ мых наборов данных. При работе с последовательными наборами данных он дает возможность написания программ, в достаточной степени независимых от выбора того или иного носителя для раз¬ мещения наборов данных. Наконец, при работе с наборами данных со стандартными метками на магнитных лентах, а также с набора¬ ми данных на томах прямого доступа программисту не нужно за¬ поминать характеристики набора данных для кодирования их при последующей обработке в операторе DD. Эта информация автома¬ тически попадает в блок управления данными, если она не была задана в макрокоманде DCB и операторе DD. Наибольший эффект указанного алгоритма формирования бло¬ ка управления данными можно получить при минимальном зада¬ нии операндов в макрокоманде DCB. Связь между оператором DD и блоком управления данными устанавливается с помощью имени оператора DD. Оно указывает¬ ся либо в макрокоманде DCB, либо помещается программистом в блок управления данными перед выполнением процедуры OPEN. После того как блок управления данными заполнился инфор¬ мацией из макрокоманды DCB, оператора DD и меток набора данных, он может быть предоставлен программисту для выполне¬ ния его модификации, если она требуется. Программист, преду¬ сматривающий такую модификацию блока управления данными, должен в макрокоманде DCB задать операнд EXLST, указав в 149
нем адрес списка параметров, и построить этот список парамет¬ ров, указав в нем адрес своей подпрограммы, которая будет вы¬ полнять модификацию блока управления данными. Так как список параметров может содержать адреса нескольких подпрограмм, используемых с разными целями, то перед адресом подпрограммы указывается код функции, которая должна выполняться этой про¬ граммой. Например, код функции модификации блока управления данными — 05. Следующий пример иллюстрирует построение такого списка параметров: НАКОР ’ DCB . . . , EXLST = LIST LIST DC Х?02* DC AL3(BEGIN) DC X’05’ Код программы модификации DC AL3 (MOD) Адрес этой программы DC Х’84’ DC AL3 (END) Программисту предоставляется возможность модифицировать блок управления данными в момент выполнения программы в за¬ висимости от сложившейся ситуации. Рассмотрим пример. Имеется программа, которая пользуется базисным последовательным методом доступа и буферы заводит внутри себя с помощью команды DS. Пользователь программы этого не знает, поэтому он в операторе DD определяет число буфе¬ ров, равное 3, для большей совместимости работы ввода-вывода и процессора. Это приводит к тому, что управляющая программа выделит память под эти три буфера, но использоваться они не смогут. При выделении памяти под эти 'буферы может произойти аварийное завершение программы из-за недостатка памяти. Что¬ бы предотвратить такие случаи, в программу достаточно ввести подпрограмму модификации блока управления данными, которая всегда устанавливает количество буферов в нуль. Отдельные поля блока управления данными можно модифицировать после завер¬ шения процедуры его открытия. Обычно для каждого набора данных открывается один блок управления данными, но при работе с наборами данных на томах прямого доступа можно открыть сразу несколько блоков управле¬ ния данными для одного набора данных. В подобных случаях для программиста усложняется задача правильной организации рабо¬ ты с этим набором данных. С помощью одной макрокоманды OPEN можно открыть несколько блоков управления данными. Это экономит время выполнения открытия, но накладывает дополни¬ тельные требования на объем памяти, который будет необходим для выполнения программы. Помимо окончательного формирования блока управления дан¬ ными процедура OPEN выполняет ряд важных функций. Она контролирует правильность установки тома и поиск набора данных 150
на магнитных лентах и томах прямого доступа; формирует н запи* сывает на магнитную ленту стандартные и нестандартные метки наборов данных; строит ряд управляющих блоков, которые в даль¬ нейшем используются управляющей программой для управления операциями ввода-вывода; формирует программы канала, буфер¬ ные пулы (при запросах на автоматическое их построение); ини¬ циирует первое заполнение буферов для методов доступа с очере¬ дями; загружает в область памяти, отведенную задаче, программы методов доступа, которые будут использоваться при работе с набо¬ ром данных. По завершении своих функций процедура OPEN устанавливает в блоке управления данными признак успешного завершения <разряд 3 в поле DCBOFLGS). Для упрощения от¬ ладки программ рекомендуется выполнять контроль этого призна¬ ка после выдачи макрокоманды OPEN. Все последующие макрокоманды ввода-вывода в программе, относящиеся к набору данных, для которого был открыт блок уп¬ равления данными, ссылаются на этот блок управления данными. Во время выполнения операций ввода-вывода могут возникать ошибки ввода-вывода. Управляющая программа ОС ЕС анализи¬ рует эти ошибки и, если имеется возможность их коррекции, пред¬ принимает необходимые действия, обычно путем повторения опе¬ раций ввода-вывода. Если коррекция не удается, ошибка иденти¬ фицируется как постоянная ошибка ввода-вывода. При такой ошибке управляющая программа выполняет действия, которые по-разному управляются программистом в зависимости от исполь¬ зуемого метода доступа. Независимо от используемого метода до¬ ступа программист может предусмотреть в своей программе при обнаружении управляющей программой постоянных ошибок вво¬ да-вывода выход на некоторую подпрограмму для анализа этой ошибки. Адрес такой подпрограммы задается в операнде SYNAD макрокоманды DCB или непосредственно помещается в блок уп¬ равления данными. Управляющая программа предоставляет в рас¬ поряжение программиста для анализа ошибки специальную мак¬ рокоманду SYNADAF, результат анализа может быть сообщен в виде распечатки. Если во время обработки многотомного последовательного на¬ бора данных управляющая программа обнаруживает конец тома, она автоматически переключает тома. При этом предполагается, что набор данных корректно описан в операторе DD, т. е. либо за¬ дан регистрационный номер следующего тома, либо заданное чис¬ ло томов превышает порядковый номер обработанного тома. Уп¬ равляющая программа ОС ЕС предоставляет в распоряжение программиста макрокоманду FFOV, с помощью которой можно имитировать ситуацию конца тома в любом месте тома и, если это требуется, осуществить переключение томов. При последовательной обработке всего набора данных (имеет¬ ся в виду его считывание) (программисту не нужно дожидаться конца набора данных, эту функцию выполняет управляющая про¬ грамма. При обнаружении конца набора данных она автоматиче- 161
ски передает управление по адресу, указанному в поле DCBEODAD блока управления данными. Адрес может быть поме¬ щен в блок управления данными с помощью операнда EODAD макрокоманды DCB или непосредственно засылкой. Например: OPEN (INDCB) C1KL GET INDCB, AREA В * CIKL END CLOSE (INDCB) JNDCB i » > DCB DSORG-PS, MACRF*= (GM), DDNAME = HAKOP, EODAD=END AREA DS CL80 В этом примере предусмотрено открытие блока управления данными INDCB, считывание набора данных, описанного в операн¬ де DD с именем НАКОР и логически связанного с блоком управ¬ ления данными INDCB. Каждая логическая запись набора данных пересылается в область AREA и там обрабатывается, после чего запрашивается следующая запись и т. д. Цикл замкнут, выход из него осуществляется управляющей программой по окончании входного набора данных, при этом управление передается по мет¬ ке END. После завершения обработки набора данных программист вы¬ полняет процедуру закрытия блока управления данными с помо¬ щью макрокоманды CLOSE. При закрытии блок управления дан¬ ными принимает тот же вид, который он имел до открытия, т. е. разрушается его логическая связь с определенным набором данных. После закрытия он может использоваться для обслужи¬ вания другого набора данных. Во время выполнения процедуры закрытия блока управления данными, кроме восстановления его состояния, осуществляются следующие функции: формирование и запись меток конца набора данных со стандартными метками на магнитной ленте; выполне¬ ние действий в соответствии с параметром диспозиции; вывод на носитель информации последнего блока данных для методов досту¬ па с очередями; освобождение оперативной памяти из-под управ¬ ляющих блоков и программ методов доступа, если на последние не было более запросов. Если программист не выдает в своей программе макрокоман¬ ды CLOSE, она автоматически выдается управляющей програм¬ мой по завершении шага задания. Имеется специальный вариант закрытия блока управления данными, который выполняется только в том случае, когда в мак¬ рокоманде указан операнд TYPE = T. Этот вариант может быть за¬ прошен только при использовании базисного последовательного метода доступа. В этом варианте процедура закрытия блока уп¬ равления данными используется лишь для подвода начала перво¬ го или конца последнего блока набора данных на магнитной ленте 152
или для установки в блоке управления данными адреса начала первого или конца последнего блока набора данных на томе пря¬ мого доступа с тем, чтобы без повторного открытия блока управ¬ ления данными продолжить обработку набора данных. Выдав один раз макрокоманду CLOSE, можно закрыть не¬ сколько блоков управления данными одновременно, при этом преимущества и недостатки те же, что и при аналогичном исполь¬ зовании макрокоманды OPEN. Используя один блок управления данными, можно обслужить несколько последовательных или библиотечных наборов данных, рассматривая их как единый массив информации (только в режи¬ ме чтения). В этом случае говорят об обслуживании сцепления нескольких наборов данных. Сцепление наборов данных задается на языке управления заданиями следующим образом: оператор DD первого набора данных из сцепления поименован, а операторы DD всех остальных наборов сцепления не поименованы. Например: //МАК DD Если сцепленные наборы данных имеют одинаковые характери¬ стики, то управляющая программа при обнаружении конца одного из них переходит к обработке следующего, не выполняя промежу¬ точных процедур закрытия и открытия блока управления данны¬ ми. Когда наборы данных в сцеплении имеют разные характери¬ стики (находятся на разных носителях информации, имеют разные форматы записей, длины блоков и пр.), управляющая программа будет рассматривать совокупность этих наборов как единый ин¬ формационный массив только в том случае, если в поле DCBOFLGS блока управления данными установлен в единицу четвертый разряд. При обработке такого сцепления наборов дан¬ ных после макрокоманды GET или READ, обнаружившей конец одного из наборов данных, необходимо выдать еще раз макро¬ команду GET или READ перед обработкой следующей записи. Так как наборы данных имеют разные характеристики, управляю¬ щая программа при обнаружении конца одного из наборов данных сама выполняет закрытие блока управления данными для этого набора и затем открытие его для следующего набора данных. Если программист при написании программы обращается к полям блока управления данными, рекомендуется использовать символические наименования этих полей. Для этого следует ис¬ пользовать макрокоманду DCBD. Рассмотрим пример, поясняющий использование макрокоманд управления данными. Выполняются считывание записей из набо¬ ра данных МАК1, переформирование их и вывод результатов в набор данных МАК2. При обнаружении постоянной ошибки ввода во входном наборе данных анализируется эта ошибка и произво¬ дится запись результатов анализа в набор данных МАКЗ. Конец входного набора данных обнаруживается управляющей лрограм- 153
мой, после чего управление передается по метке END (см. EODAD в макрокоманде DCB) и выполняется закрытие всех блоков уп¬ равления данными. В примере содержится фиктивная секция SEKT для иллюстрации использования фиктивных секций. CIKL END A UAL INDCB OUTDCB ERRDCB AREA SAVE SEKT A Al A2 OPEN GET PUT USING MVC MVC в CLOSE SYNADAF ST LR PUT SYNADRLS L RETURiN DCB (INDCB,, OUTDCB, (OUTPUT), ERRDCB (OUTPUT)) INDCB, AREA OUTDCB SEKT, 1 Al, AREA+70 A2, AREA CIKL (INDCB,, OUTDCB,, ERRDCB) ACSMETH = QSAM 14, SAVE 0,1 ERRDCB, (0) 14, SAVE DSORG = PS, MACRF= (GM), DDNAME = MAK1, EODAD = END, SYNAD=AHAL, RECFM = F, BLKSIZE = 80 DCB DSORG = PS, MACRF= (PL), DDNAME = MAK2 DCB DSORG=PS, DDNAME = MAK3, MACRF= (PM) DS CL80 DS OF DS F DSECT DS 0CL80 DS CLIO DS CL70 6.3. БУФЕР И БУФЕРНЫЙ ПУЛ При выполнении операций ввода-вывода осуществляется обмен данными между внешней и оперативной памятью ЭВМ. Область оперативной памяти, которая используется при этом обмене дан¬ ными, называется буфером. Имеются два способа управления бу¬ ферами: управление буферами Ьли* управления буферу!» пулом Адрес первого Число Длина буфвРО буферов буфера Адоес. следующего буфера Адоес следующего буфера ^ Нупи Рис. 26. Структура буферного пула с привлечением для этого средств управляющей программы и уп¬ равление без привлечения средств управляющей программы. Пер¬ вый способ управления буферами предполагает описание их в бло¬ ке управления данными. Буфер¬ ный пул представляет собой сово¬ купность связанных в цепочку блока управления буферным пу¬ лом и буферов (рис. 26). Блок управления буферным пулом содержит информацию о 164
размере и числе буферов и указывает адрес первого буфера в це¬ почке буферов. Такая конструкция буферного пула дает возмож¬ ность управляющей программе или программисту запрашивать буферы из пула и затем возвращать их в пул, постоянно сохраняя информацию о состоянии буферного пула. 6.4. ПОСТРОЕНИЕ БУФЕРНОГО ПУЛА Построение буферного пула возможно одним из четырех спо¬ собов. Программист может сам построить в своей программе бу¬ ферный пул и заполнить соответствующие поля в блоке управле¬ ния данными. Это самый трудный путь, так как он может ослож¬ нить отладку программы. Управляющая программа ОС ЕС предусматривает набор средств для оказания помощи программи¬ сту при построении буферного пула. Программист может использовать три способа построения бу¬ ферного пула с помощью управляющей программы: 1. Если до трансляции программы известно число буферов и их размер, то можно зарезервировать области памяти соответст¬ вующего размера в области программы с тем, чтобы использовать ее в качестве буферного пула. Построение буферного пула можно осуществить с помощью макрокоманды BUILD. Буферный пул, построенный таким способом, может использоваться несколькими наборами данных. Однако программа может потерять свойство реентерабельности, если для резервирования области использовал¬ ся нереентерабельный запрос на память. 2. Если информация о числе и длине буферов для работы с не¬ которым набором данных есть результат работы программы, то для построения буферного пула можно использовать макрокоман¬ ду GETPOOL, которая сама осуществляет запрос на необходимый объем памяти и формирует буферный пул. Таким образом постро¬ енный буферный пул может использоваться только для одного набора данных. После закрытия блока управления данными этого набора для освобождения памяти из-под буферного пула необхо¬ димо выдать макрокоманду FREEPOOL. 3. Управляющая программа автоматически строит буферный пул во время выполнения процедуры открытия блока управления данными. Этот способ самый простой для программиста, потому что от него требуется только обеспечить в блоке управления данными число и размер буферов. Рассмотрим примеры построения буферного пула. Первый при¬ мер иллюстрирует построение буферного пула с помощью макро¬ команды BUILD. Макрокоманда BUILD строит буферный пул в области PUL. Пул содержит 10 буферов длиной 80 байтов каждый. Запрошенный буферный пул используется двумя наборами данных: входным (имя DCB—INDCB) и выходным (имя DCB—OUTDCB), причем первому требуются три буфера, а второму — семь буферов. В обе- 155
их макрокомандах DCB задан один и тот же адрес блока управ¬ ления буферным пулом. BUILD OPEN END CLOSE RETURN INDCB DCB OUTDCB DCB CNOP PUL DS PUL, 10, 80 (INDCB,,OUTDCB, (OUTPUT)) (INDCB,, OUTDCB) DSORG = PS, MACRF= (GL). BUFNO = 3, BUFCB-PUL, EODAD=END DSORG = PS, MACRF = (PM), BUFNO = 7, BUFCB = PUL 0,8 CL820 Второй пример иллюстрирует построение буферного пула с помощью макрокоманды GETPOOL. Две макрокоманды GET- POOL строят два буферных пула. Первая — для входного набора данных (имя DCB—INDCB), буферный пул содержит пять буфе¬ ров длиной 80 байтов. Вторая — для выходного набора данных (имя DCB—OUTDCB), буферный пул содержит три буфера дли¬ ной 120 байтов. После закрытия блоков управления данными на¬ мять из-под буферных пулов освобождается с помощью макро¬ команд FREEPOOL. GETPOOL INDCB, 5, 80 GETPOOL OUTDCB, 3,120 OPEN (INDCB,, OUTDCB, (OUTPUT)) END CLOSE (INDCB,, OUTDCB) FREEPOOL INDCB FREEPOOL OUTDCB RETURN INDCB DCB DSORG=PS, MACRF= (GL), BFALN = F, RECFM=F, EODAD = END, BLKSIZE = 80 OUTDCB DCB DSORG=PS, MACRF= (PM), LRECL = 40, BLKSIZE = 120, RECFM=FB 65. УПРАВЛЕНИЕ БУФЕРАМИ Существуют пять способов управления буферами, которые мо¬ гут использоваться программистом в его программе. Способ управ¬ ления буферами существенно зависит от используемого метода доступа. Методы доступа с очередями предусматривают два способа уп¬ равления буферами — простую и обменную буферизацию. Оба способа применимы только в последовательном методе доступа с очередями. При работе с индексно-последовательным методом доступа с очередями применима только простая буферизация. 156
Так как обмен данными между внешней и оперативной памя¬ тью ЭВМ ведется блоками, буфер используется для размещения блока данных. Блок данных может состоять из нескольких логиче¬ ских записей. Часть буфера, соответствующая одной логической записи, называется сегментом буфера. Простая и обменная буфе¬ ризация различаются взаимной связью между сегментами буфера. Буфер при простой буферизации представляет собой совокуп¬ ность смежных сегментов, т. е. некоторую непрерывную область оперативной памяти. В связи с этим управляющая программа формирует одну команду канала на каждый буфер в буферном пуле. Это означает, что каждая логическая запись должна физи¬ чески пересылаться из входного буфера в буфер для вывода. Обработка ее может выполняться в любом из буферов или в рабо¬ чей области. При обменной буферизации буфер может представлять собой совокупность несмежных сегментов. В связи с этим управляющая программа вынуждена формировать отдельную команду канала для каждого сегмента буфера. Если теперь выделить рабочую область размером в сегмент буфера и изменить роль сегмента входного буфера, рабочей области и сегмента выходного буфера путем подмены адресов, то можно исключить физические пере¬ сылки записи внутри оперативной памяти, существенно экономя время обработки. Базисные методы доступа предусматривают три способа управ¬ ления буферами. Программист может самостоятельно отвести бу¬ фер в своей программе и указать его адрес в макрокомандах READ или WRITE, тем самым освобождая управляющую про¬ грамму от управления буферами. Кроме этого, он может исполь¬ зовать либо непосредственное, либо динамическое управление бу¬ ферами. Непосредственное управление буферами осуществляется с помощью макрокоманд GETBUF и FREEBUF. С помощью пер¬ вой из них получается буфер из буферного пула, а с помощью -вто¬ рой — буфер возвращается в буферный пул. Динамическое управление буферами может применяться толь¬ ко при использовании базисного индексно-последовательного или базисного прямого метода доступа. Этот способ управления буфе¬ рами состоит в том, что управляющая программа сама выделяет буферы из буферного пула для макрокоманды READ. При запро¬ се динамической буферизации всегда предполагается автоматиче¬ ское построение буферного пула. Если с помощью последующей макрокоманды WRITE производится обновление записей того же набора данных, то после выполнения WRITE буфер автоматически возвращается в буферный пул. При работе с индексно-последова¬ тельными наборами данных каждая последующая макрокоманда READ вызывает возврат буфера в буферный пул. В остальных случаях для возврата буфера в буферный пул можно использовать макрокоманду FREEDBUF. Если в программе выдается только мак¬ рокоманда WRITE, динамическая буферизация не может быть ис¬ пользована. 157
6.6. РАБОТА С ПОСЛЕДОВАТЕЛЬНЫМИ НАБОРАМИ ДАННЫХ Для работы с последовательными наборами данных можно использовать последовательный метод доступа с очередями и ба¬ зисный последовательный метод доступа. Последовательный метод доступа с очередями предполагает последовательную обработку набора данных. Поэтому в режиме ввода уже во время выполнения процедуры открытия блока уп¬ равления данными осуществляется запуск операций ввода для первичного заполнения буферов. В этом случае нужно как можно раньше открывать блок управления данными, чтобы по макро¬ команде GET логическая запись сразу предоставлялась для обра¬ ботки без потери времени на ожидание заполнения буферов. Тем самым достигается совмещение выполнения программы и опера¬ ций ввода. Совмещение обработки записей набора данных с чте¬ нием последующих записей определяется обычно такими парамет¬ рами, как блокирование логических записей, числом буферов и наличием рабочей области для обработки записи. Даже если не анализировать эти параметры, управляющая программа обеспечит такое совещание, так как она всегда сама выделяет не менее двух буферов (если число буферов не задано). Использование последовательного метода доступа с очередями наиболее просто для программиста, так как этот метод предусмат¬ ривает небольшое число макрокоманд, автоматическое управление буферахми, автоматическое объединение логических записей в бло¬ ки и выделение их из блоков, автоматическую синхронизацию операций ввода-вывода с выполнением программы. Программист должен выбрать только режим обработки за¬ писей. Существуют четыре режима обработки записей: режим указа¬ ния, режим пересылки, режим подстановки и режим данных. В режиме указания запись не перемещается, после макрокоман¬ ды GET в регистре 1 выдается адрес этой логической записи во входном буфере, после макрокоманды PUT в регистре 1 выдается адрес в буфере для вывода, куда можно поместить логическую запись. При обработке сегментированных записей в режИхМе ука-* зания единицей обработки одной хмакрокоманды GET или PUT является сегмент логической записи. Если же программист обес¬ печит построение своей области для всей логической записи, задав в макрокоманде DCB или операторе DD параметр BFTEK=A или выдав в программе макрокоманду BUILDRCD, то единицей рабо¬ ты макрокоманды GET или PUT станет вся логическая запись. В режиме пересылки логическая запись пересылается либо из входного буфера в рабочую область, либо из рабочей области в буфер для вывода. В режиме подстановки логическая запись не пересылается. Вместо этого адрес входного буфера подменяется адресом рабочей области или адрес рабочей области подменяется адресом буфера для вывода. 158
Режим данных используется только для сегментированных за¬ писей. Он подобен режиму пересылки. Отличие состоит в том, что в рабочей области содержится вся логическая запись, но без ука¬ зателя ее длины. Длина передается через поле DCBLRECL блока управления данными. Базисный последовательный метод доступа обеспечивает боль¬ шую гибкость при работе с последовательным набором данных, но налагает на программиста больше обязанностей по программиро¬ ванию ввода-вывода. Этот метод доступа предусматривает обмен с программой пользователя физическими записями. При его ис¬ пользовании программист должен заниматься управлением буфе¬ рами, объединением логических записей в блоки или выделением их из блоков, сегментированием логических записей, добиваться совмещения обработки записей с их вводом или выводом, следить за завершением операций ввода-вывода. Макрокоманды READ и WRITE только инициируют операции ввода-вывода. Для осущест¬ вления контроля за завершением этих операций обычно использу¬ ется макрокоманда CHECK. Чтобы добиться совмещения обработки записей с их вводом, нужно иметь возможность выдавать подряд несколько макро¬ команд READ, не ожидая завершения операций ввода, инициируе¬ мых ими. Для этого программист должен использовать операнд NCP макрокоманды DCB или параметр NCP оператора DD. Этот параметр определяет число макрокоманд READ, которые можно выдать без промежуточных макрокоманд CHECK. При этом необходимо также следить за соотношением параметра NCP и числа буферов. Гибкость базисного последовательного метода доступа ощути¬ ма при работе с наборами данных на магнитной ленте и томах прямого доступа. С помощью макрокоманды NOTE программист может получить относительный адрес любого блока данных и за¬ тем, используя макрокоманду POINT, вернуться к обработке этого блока в любой момент времени в пределах одного тома. Один и тот же набор данных может использоваться для считывания дан. ных и для записи без промежуточных процедур закрытия и откры¬ тия блока управления данными. Кроме того, макрокоманды CNTRL и BSP позволяют непосредственно управлять внешними устройствами, минуя операции чтения и записи. Рассмотрим пример использования базисного последовательно¬ го метода доступа для построения последовательного набора дан¬ ных из 800 записей. Набор содержит записи фиксированной дли¬ ны, длина каждой записи 120 байтов. Описание набора данных содержится в макрокоманде DCB. Если во время создания набора данных обнаруживается постоян¬ ная ошибка вывода, управление получает подпрограмма ANAL, которая выдает макрокоманду ABEND для прекращения выпол¬ нения программы. При этом выдается дамп памяти. Формирова¬ ние набора данных осуществляется с помощью макрокоманды WRITE, которая ссылается на имя блока управления данными, 159
логически связанного с формируемым набором, и содержит адрес буфера, в котором находятся данные. Следующая за ней макро¬ команда CHECK используется для контроля за завершением опе¬ рации вывода. После того как набор данных записан на носитель информации, блок управления данными OUTDCB закрывается. OPEN (OUTDCB, (OUTPUT)) LA 5,800 C1KL WRITE BLOK, SF, OUTDCB, BUF CHECK BLOK BCT 5, CIKL CLOSE (OUTDCB) AMAL MVI * IND, X’li’ В DAMP DAMP SR 1. 1 IC 1, IND ABEND (I), DUMP IND DC XW BUF DC 20С’ДАННЫЕ’ OUTDCB DCB DSORG = PS, MACRF = W, DDNAME = HAKOP, BLKSIZE=120, RECFM = F, SYNAD = AHAL 6.7. СТРУКТУРА БИБЛИОТЕЧНОГО НАБОРА ДАННЫХ Набор данных с библиотечной организацией (или просто биб¬ лиотека) состоит из последовательно организованных разделов, каждый из которых имеет свое имя. Кроме того, библиотека содер¬ жит оглавление, которое размещается в начале набора данных. Оглавление библиотеки имеет последовательную структуру. Оно представляет собой совокупность блоков с ключами. Длина ключа 8 байтов, длина поля данных 256 байтов. Оглавление соз¬ дается в момент выделения внешней памяти под библиотеку. Ме¬ сто под оглавление запрашивается в параметре SPACE оператора DD, описывающего библиотеку, причем запрос делается путем указания числа блоков оглавления. Каждый блок оглавления содержит один или несколько эле¬ ментов разделов библиотеки. Максимальный размер элемента оглавления 74 байта, минимальный—12 байтов. Элемент каждого раздела библиотеки включает его имя и относительный адрес внутри библиотеки. Элемент раздела библиотеки может также со¬ держать относительные адреса некоторых внутренних точек разде¬ ла. Таким образом, через оглавление можно найти адрес любого раздела библиотеки и даже некоторой точки внутри определенно¬ го раздела, с которой можно начать обработку раздела. Элементы оглавления упорядочены в алфавитном порядке. Ключ каждого блока оглавления есть имя раздела из последнего элемента этого блока. Ключ последнего использованного блока оглавления равен FF. 160
Библиотека представляет собой перемещаемый набор данных, так как оглавление содержит относительные адреса ее внутренних точек. Структура библиотечного набора данных показана на рис. 27,. Оглавление библиотеки > Раздело> библиотеки Рис. 27. Структура библиотечного набора данных 6.8. МЕТОДЫ РАБОТЫ С БИБЛИОТЕКАМИ Удобство работы с библиотекой состоит в том, что, открыв для. нее блок управления данными, можно считать один или несколь¬ ко разделов библиотеки или всю библиотеку, добавить или заме¬ нить в ней один или несколько разделов. Так как каждый раздел библиотеки ИхМеет последовательную организацию, он может обрабатываться, как всякий последова¬ тельный набор данных. При этом можно использовать как после¬ довательный метод доступа с очередями, так и базисный последо¬ вательный метод доступа. В блоке управления данными при этом указывается последо¬ вательная организация набора, а в параметре DSNAME оператора DD кроме имени библиотеки в скобках указывается имя раздела. Тогда, используя последовательный метод доступа, можно считать указанный раздел библиотеки или записать его в библиотеку. Если таким же образом требуется обработать несколько разделов библиотеки, то для каждого раздела необходимо задать свой опе¬ ратор DD и в программе выполнить процедуры открытия и закры¬ тия соответствующего блока управления данными. Это не очень удобно. Но при работе с несколькими разделами можно также пользоваться одним оператором DD, если в блоке управления данными задать библиотечную организацию и использовать мак¬ рокоманды, специально введенные для работы с оглавлением. Тогда после записи каждого раздела библиотеки требуется выдать макрокоманду STOW для внесения в оглавление нового элемента. Перед считыванием разделов библиотеки можно либо выдавать макрокоманду FIND для отыскания в оглавлении биб¬ лиотеки адреса раздела по его имени, либо вначале выдать макрокоманду BLDL для заполнения таблицы адресов всех раз¬ делов библиотеки, которые будут считываться, а перед считыва¬ нием разделов выдавать макрокоманду FIND для настройки бло¬ Адрес раздела А Адрес Адрес Адрес раздела раздела раздела В г D Не исп ользованная память Раздел В Неиспользованная память Раздел А Раздел С Раздел D Неиспользованная память 11. Заказ 3414. 161
ка управления данными по адресу раздела из этой таблицы. Пре¬ имущество последнего способа состоит в экономии времени вы¬ полнения. Обновление раздела библиотеки на месте можно выполнять только в том случае, когда не производится изменение длин запи¬ сей, не добавляются новые записи и ни одна из записей не удаля¬ ется из раздела. В противном случае обновление раздела библио¬ теки сводится к его перезаписи на новое место. Если для этого недостаточно места, можно воспользоваться для реорганизации библиотеки утилитами IEBCOPY или IEBUPDTE. Если переза¬ пись раздела удалось произвести, то место, которое было ранее занято этим разделом, нельзя использовать для размещения новых разделов библиотеки до тех пор, пока она не будет реорганизо¬ вана. Библиотека может размещаться только на одном томе прямого доступа. Операционная система имеет большой набор утилит для вы¬ полнения различных манипуляций с библиотечными наборами данных: для создания и реорганизации библиотек могут использоваться утилиты IEBUPDTE, IEBGENER, IEHMOVE, IEBCOPY; для распечатки разделов библиотеки или библиотек может ис¬ пользоваться утилита IEBPTPCH; для распечатки оглавления библиотеки может использоваться утилита IEHLIST; для переименования разделов библиотек или библиотек, а так¬ же удаления разделов или библиотек может использоваться ути¬ лита IEHPROGM. Рассмотрим два примера работы с библиотечными наборами данных. Первый пример иллюстрирует считывание раздела биб¬ лиотеки с помощью последовательного метода доступа с очередя¬ ми. В операторе DD указывается имя библиотеки BIBLIO и имя раздела МЕМВ1. В программе для чтения этого раздела библио¬ теки открывается блок управления данными INDCB, после чего чтение записей раздела МЕМВ1 осуществляется с помощью мак¬ рокоманды GET в режиме пересылки. Считанная запись поме¬ щается в область AREA. Далее следуют обработка записи и счи¬ тывание следующей записи. По окончании входного набора дан¬ ных управление передается по метке END, где выполняется закры¬ тие блока управления данными INDCB. . . . ,DSN«=BIBLIO(MEMBl),DISP=OLD (INDCB) INDCB, AREA CIKL (INDCB) DSORG = PS, MACRF= (GM), DDNAME = CHOP, EODAD=END //CHOP DD OPEN CIKL' GET В ’ END CLOSE INDCB dcb‘ 162
Второй пример иллюстрирует считывание трех разделов биб лиотеки с помощью базисного библиотечного метода доступа. //CHOP DD . . . ,DSN = BIBLIO, DISP = OLD LA ' 3, LIST+54 ST 3, ETABL OPEN (INDCB) BLDL INDCB, LIST LA 3, LIST+12 BCIKL FIND INDCB, (3), С MCIKL READ BLOK, SF, INDCB, BUF,'S' CHECK BLOK В ’ * MCIKL END A 3, CONST CL 3, ETABL BNE BCIKL CLOSE (INDCB) RETURN INDCB DCB DSORG = PO, MACRF = R, DDNAME = CHOP> EODAD=END DS OH LIST DC X'0003' DC X'OOOE' DC C'MEMBEROl' DS CL6 DC CMEMBER02’ DS CL6 DC C’MEMBER03’ DS CL6 DS OD ETABL DS CL4 CONST DC X'OOOOOOOE' BUF DS CL80 В операторе DD описана библиотека BIBLIO. В программе для работы с библиотекой в макрокоманде DCB задана библиотечная организация. Работа с набором данных начинается с открытия блока управления данными INDCB. После этого выдается макро¬ команда BLDL для получения адресов трех разделов библиотеки: MEMBEROl, MEMBER02 и MEMBER03. Для этого в ней указы¬ вается адрес таблицы LIST, в которую будут помещены адреса указанных разделов. Таблица LIST содержит число элементов в. ней, длину каждого элемента, имена разделов и резервирует ме¬ сто для их адресов. Затем следует макрокоманда FIND, которая настраивает блок управления данными на начало указанного в ней раздела библио¬ теки. В данном случае в макрокоманде FIND указывается через регистр 3 адрес поля таблицы LIST, содержащего адрес соответ¬ ствующего раздела библиотеки. После этого можно выдать мак¬ рокоманды READ и CHECK для считывания записей раздела и контроля его завершения. Считывание выполняется в буфер BUF длиной 80 байтов. Длина считываемого блока берется из блока управления данными. 11*
После обработки первого раздела библиотеки весь цикл по об¬ работке, начиная с макрокоманды FIND, повторяется для следую¬ щего раздела и т. д. По окончании каждого раздела библиотеки управление получает подпрограмма END, которая либо подготавливает продолжение обработки (переход к обработке следующего раздела), либо за¬ крывает блок управления данными INDCB, когда все заказанные в программе разделы библиотеки обработаны. 6.9. СТРУКТУРА ИНДЕКСНО-ПОСЛЕДОВАТЕЛЬНОГО НАБОРА ДАННЫХ И МЕТОДЫ РАБОТЫ С НИМ Индексно-последовательный набор данных представляет собой совокупность логических записей формата F или V. Каждая логи¬ ческая запись имеет ключ. При записи на том прямого доступа логические записи могут объединяться в блоки. При этом на томе прямого доступа будем иметь блоки следующего вида. Если логические записи не объединяются в блоки, то ключ логической записи помещается в поле ключа блока, а вся осталь¬ ная часть логической записи — в область данных, если ключ пред¬ шествует данным. Если ключ содержится внутри записи, то вся логическая запись помещается в поле данных. Если логические записи объединяются в блоки, то в поле ключа блока помещается ключ последней логической записи блока, а поле данных блока содержит логические записи с их ключами. При создании индексно-последовательного набора данных все его записи помещаются в область, называемую основной областью набора. Работа с индексно-последовательным набором данных предпо¬ лагает поиск по ключу. Для сужения области поиска во время создания индексно-последовательного набора данных управляю* щей программой создается серия индексов: индекс дорожек на каждом цилиндре основной области, индекс цилиндров и до трех уровней главных индексов Когда основная область набора данных занимает более одного цилиндра, создается область индексов, которая содержит индекс цилиндров и главные индексы. Память на эту область может быть запрошена с помощью отдельного one* ратора DD, т. е. область индексов может быть независима ог остальных областей индексно-последовательного набора данных. Самым низшим уровнем индексов индексно-последовательного набора данных является индекс дорожек Он заводится на каждом цилиндре основной области для того, чтобы сократить поиск запи¬ си на цилиндре до поиска на одной дорожке. Индекс дорожек размещается на нулевой дорожке цилиндра и содержит для каж¬ дой дорожки цилиндра физический адрес первой записи данных и ключ последней записи на дорожке. На каждом цилиндре может быть заведена область переполнения цилиндра (путем задания полей DCBOPTCD и DCBCYLOFL в блоке управления данными). Эта область используется в тех случаях, когда на дорожку добав¬ ■164
ляется запись, а дорожка целиком заполнена. Тогда возможны две ситуации. Если добавляемая запись имеет ключ, превышающий ключи всех записей дорожки, то она попадает в область перепол¬ нения. В противном случае все записи дорожки с ключами, пре¬ вышающими ключ новой записи, сдвигаются, а последняя запись дорожки попадает в область переполнения. В обоих случаях с помощью индекса дорож'ек осуществляется «продление» дорожки в область переполнения цилиндра. Следующим по старшинству является индекс -цилиндров. Вве¬ дение индекса цилиндров позволяет вместо поиска на всех цилинд¬ рах основной области набора данных осуществлять его только на одном цилиндре. Для каждого цилиндра основной области индекс цилиндров содержит физический адрес индекса дорожек и ключ последней записи цилиндра. Если набор данных содержит большое количество цилиндров, то индекс цилиндров тоже достаточно велик. Чтобы сократить время просмотра индекса цилиндров, программист может запро¬ сить построение главных индексов (путем задания полей DCBOPTCD и DCBNTM блока управления данными). Предположим, что программист запросил построение главных индексов при условии, что индекс цилиндров занимает более четы¬ рех дорожек. Тогда для каждых четырех дорожек индекса цилинд¬ ров в главном индексе низшего уровня будет содержаться физи¬ ческий адрес первой из четырех дорожек и ключ последней записи последней из этих четырех дорожек индекса цилиндров. Если при ГлавнъЮ индекс Группа дорожек Группа дорожек Группа дорожек Рис, 28. Структура индексно-последовательного набора данных 165
этом окажется, что главный индекс низшего уровня занимает бо¬ лее четырех дорожек, то управляющая программа построит глав¬ ный индекс более высокого уровня для сокращения времени по¬ иска в главном индексе низшего уровня. Этот процесс может продолжаться до тех пор, пока не будут построены главные индек¬ сы трех уровней. Итак, описанная структура индексно-последовательного набо¬ ра данных (рис. 28) дает возможность свести поиск некоторой записи по ключу к поиску ее на одной дорожке тома прямого до¬ ступа без просмотра всех записей набора, основываясь на просмот¬ ре лишь индексов набора данных. При добавлении записей в набор данных может понадобиться наличие областей переполнения. Программист может предусмотреть на каждом цилиндре об¬ ласть переполнения цилиндра, он может организовать независи¬ мую область переполнения (путем задания поля DCBOPTCD блока управления данными). Память под независимую область переполнения может быть запрошена с помощью отдельного опе¬ ратора DD. Если память под индексно-последовательный набор данных запрашивается с помощью нескольких операторов DD, то только первый из них имеет имя, остальные не должны быть поименованы. //VIVOD DD DSN = SALUT(INDEX),. , . // DD DSN = SALUT(PRIME),. . . U DD DSN = SALUT(OVFLOW),. . . Слово INDEX в скобках означает запрос памяти под индекс¬ ную область, слово PRIME — под основную область, а слово OVFLOW — под независимую область переполнения. Если сравнивать работу с областью переполнения цилиндра и работу с независимой областью переполнения, то можно заметить, что использование области переполнения цилиндра ведет к выиг¬ рышу во времени поиска записи, но может привести к большим потерям внешней памяти, так как некоторые области переполне¬ ния могут вообще не использоваться. Использование независимой области переполнения ведет к проигрышу во времени поиска за¬ писи, который вызывается перемещением механизма доступа, но позволяет более экономно использовать внешнюю память. Целе¬ сообразно сочетать использование областей переполнения обоих видов. При работе с индексно-последовательным набором данных программист имеет возможность удалять некоторые записи из набора данных (задается поле DCBOPTCD блока управления данными). Чтобы управляющая программа знала, какие записи индексно-последовательного набора данных можно удалить, программист должен предусмотреть в своей программе возмож¬ ность метить такие записи кодом FF в первом байте логической записи фиксированной длины или пятом байте записи переменной длины. Однако простановка указанного кода не означает, что 166
соответствующая запись сразу будет удалена из набора данных. Эта запись будет содержаться в наборе данных до тех пор, пока в результате добавления новых записей не сложится такая ситуация, что она должна быть перемещена в область переполнения. В этот момент запись физически удаляется из набора данных. Если про¬ грамма выполняет последовательную обработку записей индексно¬ последовательного набора данных, то для нее записи с кодом FF не представляются. При выборочной обработке записей в про¬ грамме нужен контроль для вылавливания таких записей. При интенсивной работе с индексно-последовательным набо¬ ром данных через некоторое время области переполнения могут оказаться достаточно сильно заполненными, что приведет к пони¬ жению скорости поиска в наборе данных, либо целиком заполнен¬ ными, так что дальнейшее расширение набора данных станет не¬ возможным. В каждом из этих случаев требуется реорганизация индексно-последовательного набора данных, которую можно вы¬ полнить, используя утилиту IEBISAM. Управляющая программа может регистрировать некоторые статистические данные по обслуживанию индексно-последователь¬ ного набора данных и помещать их в блок управления данными (задается поле DCBOPTCD блока управления данными). При этом в распоряжение программиста предоставляются сведения о числе заполненных областей переполнения цилиндров, числе неис¬ пользованных дорожек в независимой области переполнения, чис¬ ле обращений к тем записям из областей переполнения, которые не являются первыми в цепочках. Индексно-последовательный набор данных создается путем ис¬ пользования режима загрузки индексно-последовательного метода доступа с очередями. Этот же режим может применяться для до¬ бавления записей в конец существующего индексно-последова¬ тельного набора данных. Макрокоманда PUT, используемая в этом случае для записи, может работать либо в режиме указания, либо в режиме пересылки. Индексно-последовательный метод доступа с очередями имеет еще один режим работы — режим сканирования. Этот режим может использоваться для последовательной обработки или обновления всего набора данных или его части. Макрокоманда GET, приме¬ няемая в этом случае для считывания набора данных, может ра¬ ботать либо в режиме указания, либо в режиме пересылки. Для задания начальной точки последовательной обработки набора данных предоставляется макрокоманда SETL. Если предпола¬ гается последовательная обработка нескольких участков индекс¬ но-последовательного набора данных, то между двумя соседними макрокомандами SETL нужно выдавать макрокоманду ESETL. В основных чертах индексно-последовательный метод доступа с очередями подобен последовательному методу доступа с очере¬ дями. Базисный индексно-последовательный метод доступа может использоваться для занесения новых записей данных между запи¬ 167
сями существующего индексно-последовательного набора данных, добавления записей в конец набора данных, а также для выбо¬ рочной обработки или обновления записей. С помощью макрокоманд READ или WRITE осуществляется поиск записи по указанному в ней ключу. В остальном базисный индексно-последовательный метод доступа подобен базисному последовательному методу доступа. При добавлении записей переменной длины к индексно-после¬ довательному набору данных с помощью базисного индексно¬ последовательного метода доступа программист должен обеспе¬ чить рабочую область. Размер этой области должен быть таков, чтобы она могла вместить данные с целой дорожки. Эта область описывается Ь полях DCBMSWA и DCBSMSW блока управления данными (адрес и размер). При работе с записями фиксированной длины такая область не требуется, однако выделение ее даст зна¬ чительный выигрыш во времени обработки. При использовании базисного индексно-последовательного ме¬ тода доступа для ускорения поиска записи имеется возможность помещения главного индекса высшего уровня в оперативную па¬ мять. Управляющая программа поместит главный индекс в опера¬ тивную память, если в полях DCBMSHI и DCBSMSI блока управ¬ ления данными определены адрес и размер соответствующей обла¬ сти. Для существующего индексно-последовательного набора дан¬ ных длина главного индекса высшего уровня может быть получе¬ на из поля DCBNCRHI в подпрограмме модификации блока уп¬ равления данными. Здесь же должна быть выделена область опе¬ ративной памяти соответствующего размера. Рассмотрим два примера работы с индексно-последователь¬ ным набором данных. В первом примере выполняется создание ин¬ дексно-последовательного набора данных путем использования в качестве входной информации последовательного набора данных на магнитной ленте. Последовательный набор данных состоит из записей фиксированной длины, расположенных в порядке возра¬ стания ключей. Длина записи 80 байтов, ключи находятся в 10— 29 байтах. При записи в индексно-последовательный набор данных логические записи объединяются в блок по 5 записей. Запросим на каждом цилиндре область переполнения в одну дорожку; построе¬ ние главных индексов, если индекс цилиндра превысит 4 дорожки; статистику о состоянии набора данных. //VIYOD DD DSN = SHAR (PRIME), DCB= (DSORG = IS, // OPTCD = MYR, CYLOFL= 1, NTM = 4, RKP = 9, KEYLEN = 20, // RECFM = FB, LRECL=80, BLKSIZE = 400), UNIT=5050, II SPACE= (CYL, 100,, CONTIG), DISP = (, KEEP) Для входного последовательного набора данных открывается блок управления данными PDCB, для выходного индексно-после¬ довательного набора — ISDCB. Ввод информации из последова¬ тельного набора данных осуществляется с помощью последова¬ тельного метода доступа с очередями. Макрокоманда GET, ис¬ пользуемая для этой цели, работает в режиме указания. После ее 168
выполнения в регистре 1 содержится адрес очередной логической записи. Для создания индексно-последовательного набора данных используется индексно-последовательный метод доступа с очередя¬ ми. Макрокоманда PUT при этом работает в режиме пересылки. После каждого выполнения этой макрокоманды логическая запись, полученная из выходного набора данных, помещается в буфер для вывода. Как только этот буфер будет заполнен, его содержимое записывается на том прямого доступа. Обработка завершается по окончании входного набора данных. OPEN (PDCB,, ISDCB, (OUTPUT)) C1KL GET PDCB LR 0,1 PUT ISDCB, (0) В CIKL PDCB DCB* DSORG-PS, MACRF = (GL), DDNAME-* VVOD, EODAD = END ISDCB DCB DSORG = IS, MACRF= (PM), DDNAME = VIVOD Второй пример иллюстрирует выборочное обновление индексно- последовательного набора данных. Обновление производится с по¬ мощью последовательного набора данных на магнитной ленте. Он представляет собой набор записей фиксированной длины, длина записи — 28 байтов, ключ занимает первые 20 байтов записи. По ключу из записи последовательного набора данных отыскивается запись в индексно-последовательном наборе данных, после чего в найденной записи первые 8 байтов замещаются информацией из записи последовательного набора данных. Для индексно-последо¬ вательного набора данных используется динамическая буфериза¬ ция. OPEN (VVOD,, VIVOD) CIKL GET VVOD, KEY READ BLOK, KU, MF = E CHECK BLOK, DSORG = IS L 5, BLOK+16 АДРЕС ЗА MVC 0(8, 5), REPLACE WRITE BLOK, K, MF = E CHECK BLOK,DSORG = IS В CIKL DS OF KEY DS CL 20 REPLACE DS CL8 READ BLOK, KU, VIVOD,’ S’,’ S’, KEY, MF = L VVOD DCB DSORG = PS, MACRF =(GM), DDNAME EODAD=END VIVOD DCB DSORG = IS, MACRF = (RUS, WU), DDNAME = MAPE Для входного последовательного набора данных открывается блок управления данными VVOD, а для индексно-последователь¬ ного — VIVOD. Считывание информации из входного набора дан¬ ных выполняется с помощью макрокоманды GET в режиме пере¬ 169
сылки (последовательный метод доступа с очередями). В резуль¬ тате очередная логическая запись помещается в область KEY (дли¬ на 28 байтов). Затем с помощью базисного индексно-последова¬ тельного метода доступа в индексно-последовательном наборе дан¬ ных отыскивается запись по ключу из области KEY. Эта запись модифицируется (модифицируются восемь первых ее байтов), пос¬ ле чего помещается в индексно-последовательный набор. Поиск за¬ писи по ключу и считывание ее осуществляется с помощью макро¬ команды READ, KU в ней обозначает режим обновления. Так как в данном случае используется динамическая буферизация, найден¬ ная запись индексно-последовательного набора данных помещает¬ ся в буфер, адрес которого находится в управляющем блоке BLOK. Обновленная запись помещается в индексно-последовательный набор данных с помощью макрокоманды WRITE, К в ней обозна¬ чает режим обновления. Вывод осуществляется из того буфера, который указан в предшествующей макрокоманде READ. Для син¬ хронизации операций ввода-вывода с работой программы исполь¬ зуется макрокоманда CHECK. В данном примере при обновлении применяется макрокоманда READ в описательной форме для построения управляющего блока BLOK, который затем используется макрокомандами READ и WRITE в исполнительной форме. Операнды макрокоманды, со¬ держащиеся в исполнительной их форме, модифицируют управ¬ ляющий блок BLOK. При открытии блока управления данными VIVOD не требуется указания режима обработки в макрокоманде OPEN. Обновление индексно-последовательного набора данных завершается по окончании входного набора данных. 6.10. СТРУКТУРА НАБОРОВ ДАННЫХ С ПРЯМОЙ ОРГАНИЗАЦИЕЙ И МЕТОДЫ РАБОТЫ С НИМИ Если индексно-последовательные методы доступа опираются на вполне определенную структуру индексно-последовательного набо¬ ра данных, то базисный прямой метод доступа предоставляет про¬ граммисту возможность самому определить структуру набора дан¬ ных. Прямая организация характеризуется наличием определенной связи между некоторым идентификатором блока данных и его ад¬ ресом, обычно идентификатор является ключом блока. Если набор данных хорошо организован, то обеспечивается быстрый доступ к любому блоку набора. Прямая организация наборов данных может основываться на прямой адресации. При использовании прямой адресации известно местоположение каждой записи в наборе данных. Типичным при¬ мером использования прямой адресации является введение относи¬ тельной адресации блоков данных. Пусть набор данных состоит из записей фиксированной длины. В этом случае на каждой дорожке тома прямого доступа содер¬ жится одинаковое число блоков. Если каждому блоку поставить в 170
соответствие номер этого блока от начала набора, то по этому номеру управляющая программа легко вычислит относительный адрес дорожки и номер блока на этой дорожке. Недостатком такой организации набора данных является то, что место под набор дан¬ ных приходится выделять не по числу блоков в нем, а по диапазо¬ ну номеров, что ведет к значительным потерям памяти, если доста¬ точно большое число номеров не используется. Этот недостаток можно обойти, если использовать таблицу адресов блоков. При за¬ писи блока данных в набор можно получить физический или отно¬ сительный адрес блока и поместить его в таблицу адресов вместе с идентификатором этого блока с тем, чтобы поиск в таблице по идентификатору блока давал ее адрес. Чем больше набор данных, тем менее эффективна такая орга¬ низация набора данных, ибо таблица адресов становится велика, занимает достаточно большой объем памяти (оперативной или внешней), соответственно увеличивается время поиска в таблице. Кроме прямой адресации, при прямой организации наборов данных можно использовать косвенную адресацию. В таком слу¬ чае обычно имеем более общий, но зато более сложный способ ор¬ ганизации набора данных. При косвенной адресации адрес каждо¬ го блока набора данных получается как результат некоторых ма¬ тематических преобразований ключа этого блока. Такие преобра¬ зования носят название рандомизации. Косвенная адресация при¬ меняется, когда диапазон изменения ключей блоков данных зна¬ чительно превышает диапазон числа блоков и, следовательно, диапазон изменения адресов блоков. Поэтому возникает необходи¬ мость в алгоритме, с помощью которого можно осуществить отобра¬ жение диапазона ключей блоков на диапазон их адресов. Избранный способ должен обеспечивать, во-первых, преобра¬ зование любого допустимого ключа в адрес заданного диапазона и, во-вторых, небольшой процент синонимов, т. е. таких блоков, пре¬ образование ключей которых приводит к получению одного и того же адреса. Эффективное средство борьбы с синонимами — отведе¬ ние под набор данных большего объема памяти, чем требуется. Блок, который записывается по адресу, полученному путем преоб¬ разования его ключа в адрес, называется основным. Все другие блоки, при преобразовании ключей которых получается тот же ад¬ рес и которые не могут быть записаны по этому адресу, называют¬ ся блоками переполнения. Число блоков переполнения можно зна¬ чительно снизить, если преобразовывать значение ключа в адрес дорожки, а не в адрес блока. Если рандомизация ведется до уровня адреса блока, то каж¬ дый синоним порождает блок переполнения. Если же рандомиза¬ ция выполняется до уровня адреса дорожки, то синонимы не по¬ рождают блоков переполнения до тех пор, пока дорожка не будет заполнена. Существуют различные способы рандомизации, напри¬ мер деление с остатком, свертка, переход к другой системе счисле¬ ния и т. д. Выбор определенного способа производится опытным путем. 371
Базисный прямой метод доступа допускает следующие способы идентификации блока данных. 1. Относительный адрес блока (3-байтовое двоичное число). Используется только для записей фиксированного формата. Управ¬ ляющая программа преобразует относительный адрес в физиче¬ ский адрес блока. 2. Относительный адрес дорожки (2-байтозый двоичный номер дорожки и однобайтовый двоичный номер блока). Относительный адрес дорожки преобразуется управляющей программой в физиче¬ ский адрес блока. 3. Относительный адрес дорожки и ключ. Управляющая про¬ грамма вычисляет физический адрес дорожки и осуществляет по¬ иск блока на этой дорожке по ключу. 4. Физический адрес блока. Использование физических адресов приводит к тому, что набор данных становится неперемещаемым. При использовании для идентификации блока данных относи¬ тельного адреса дорожки и ключа можно запросить расширенный поиск (задание полей DCBOPTCD и DCBLIMGT блока управле¬ ния данными), который состоит в том, что поиск блока по ключу ограничивается просмотром не одной дорожки, а некоторого коли¬ чества дорожек или блоков, заданного программистом в блоке уп¬ равления данными. Расширенный поиск можно использовать также при добавлении блоков для поиска свободного места в наборе дан¬ ных. Базисный прямой метод доступа позволяет во,время чтения или записи блока данных получать в определенной области, указанной в соответствующей макрокоманде, адрес этого блока данных в форме, определенной в поле DCBOPTCD блока управления дан¬ ными. Если несколько подзадач выполняют одновременно обновление некоторого блока данных одного и того же набора данных, ссыла¬ ясь при этом на один блок управления данными, то базисный пря¬ мой метод доступа дает возможность подзадаче, первой выдавшей макрокоманду READ, предотвратить обновление этого блока дру¬ гими подзадачами (если в макрокоманде READ указан соответст¬ вующий операнд). Остальные подзадачи начнут работу с этим бло¬ ком данных только после выполнения в данной подзадаче макро¬ команды WRITE или RELEX. Набор данных с прямой организацией создается с помощью специального режима базисного последовательного метода досту¬ па — режима создания набора данных с прямой организацией. Последовательная обработка набора данных с прямой организаци¬ ей может выполняться с помощью базисного последовательного метода доступа, а выборочная обработка — с помощью базисного прямого метода доступа. Рассмотрим два примера, иллюстрирующие создание и обра¬ ботку набора данных с прямой организацией. В первом примере создается набор данных с прямой организацией. Создание набора данных выполняется на базе последовательного набора данных, 172
находящегося на магнитной ленте. Создаваемый набор данных име¬ ет следующие характеристики: формат записи F, записи имеют 4-байтовые ключи, диапазон изменения которых 1050—6050. За¬ прос памяти под набор данных делается на 5000 записей. Если за¬ пись с некоторым ключом из указанного диапазона отсутствует, записывается фиктивная запись. L 10, = F'l050' OPEN (VIVOD,(OUTPUT), VVOD) LA 5, SPAVN CIKL GET VVOD LR 3, 1 SPAVN С 10,0(3) BNE FIKT WRITE BLOKl,SF, VIVOD, (3) CHECK BLOK1 AH 10, = HT В CIKL FI КТ ' С 10, = F'6049' вн KONEC WRITE BLOK2.SD, VIVOD, OBL CHECK BLOK2 AH 10, = HT BR 5 END LA 5, FIKT BR 5 КО NEC CLOSE (VVOD,, VIVOD) OBL DS* CL50 VVOD DCB DSORG = PS, MACRF= (GL), EODAD=»END, DDNAME = HAB VIVOD DCB DSORG = PS, MACRF— (WL), DDNAME = HAB2 Для входного последовательного набора данных открывается блок управления данными VVOD в режиме ввода (INPUT), а для выходного—блок управления данными VIVOD в режиме вывода (OUPUT). Считывание входного последовательного набора данных осуществляется с помощью, макрокоманды GET в режиме указа¬ ния. После выполнения этой макрокоманды адрес очередной логи¬ ческой записи находится в регистре 1. Если это следующая запись формируемого набора данных с прямой организацией, то используется макрокоманда WRITE для ее записи на том прямого доступа. Если же запись с некоторым ключом из вышеуказанного диа¬ пазона отсутствует во входном наборе данных, то в формируемый набор помещается фиктивная запись (режим SD макрокоманды WRITE). Формирование набора данных с прямой организацией заверша¬ ется после записи в него 5000 блоков данных, после чего выпол¬ няется закрытие всех блоков управления данными. Во втором примере осуществляется добавление блоков данных в только что созданный набор данных с прямой организацией. До¬ полнительные блоки вводятся с магнитной ленты. 173
OPEN (VIVOD, (OUTPUT), VVOD) CIKL GET VVOD, KLUCH L 3, KLUCH SH 3, = HT050' ST 3, OSTATOK WRITE BLOK, DA, VIVOD, DANN,'S', KLUCH, OSTATOK+1 WAIT ECB=BLOK CLC BLOK+1 (2),=X/0000/ BE CIKL VVOD DCB * DSORG = PS, MACRF= (GM),*EODAD = NNN, DDNAME = HAB1 VIVOD DCB DSORG = DA, MACRF= (WA), DDNAME = HAB2 KLUCH DS F DANN DS CL100 OSTATOK DS Для входного последовательного набора данных открыва¬ ется блок управления данными VVOD в режиме ввода (INPUT), а для набора данных с прямой организацией — VIVOD в режиме вывода (OUTPUT). Считывание входного набора данных осуществ¬ ляется с помощью макрокоманды GET в режиме пересылки (пос¬ ледовательный метод доступа с очередями). В результате очеред¬ ная логическая запись помещается в область KLUCH. После это¬ го, используя ключ, вычисляют относительный номер блока, кото¬ рый запоминается в области OSTATOK. Последующая макрокоманда WRITE помещает данную логиче¬ скую запись как блок данных в набор данных с прямой организа¬ цией. В данном примере синхронизация операции вывода с выполне¬ нием программы осуществляется с помощью макрокоманды WAIT. Анализ ошибочных ситуаций при выводе возлагается на програм¬ миста.
7. ОСОБЕННОСТИ РЕАЛИЗАЦИИ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ АЛГОЛА-60, ФОРТРАНА IV, КОБОЛА И ПЛ/1 ДЛЯ ОС ЕС ЭВМ 7.1. СТРУКТУРА СИСТЕМЫ ПРОГРАММИРОВАНИЯ Каждая из систем программирования ОС ЕС рассчитана на оп¬ ределенный класс проблемных программистов (пользователей) и дает им возможность записывать алгоритмы и запросы на предо¬ ставление услуг из определенного подмножества полного набора услуг ОС ЕС таким образом, что становится необязательным зна¬ комство ни с внутренним устройством системы и ОС ЕС, ни с пол¬ ным набором возможностей и услуг ОС ЕС. Принято считать составными частями системы программиро¬ вания исходный язык, языковый транслятор, системные библиоте¬ ки, и, если необходимо, службу ведения личных библиотек. Трансляторы обсуждаемых систем программирования относят¬ ся к типу компилирующих программ и называются в дальнейшем компиляторами. Порцией исходного текста для каждого процесса компиляции служит так называемый исходный модуль: для Алго¬ ла-60 и ПЛ/1 это программа или процедура, для Кобола — про¬ грамма, для Фортрана IV — главная программа, подпрограмма или подпрограмма-функция. Результат компиляции, называемый объектным модулем, теряет, с точки зрения редактора связей, ис¬ ходную языковую индивидуальность и обрабатывается затем на общих основаниях. 7.2. ФОРТРАН IV ОС ЕС В систему программирования Фортран IV входят два компи¬ лятора: отладочный компилятор G и оптимизирующий компилятор Н. Общая часть языковых версий для этих компиляторов содер¬ жит в виде правильного подмножества ANS-Фортран, известный ранее как ASA-Фортран. Общие для G и Н расширения языка ANS-Фортран представляют собой, с одной стороны, элементы Фортрана V, ставшие традиционными для современных реализа¬ ций, с другой — средства совместимости с ранними версиями язы¬ ка, в частности, с Фортраном II. Кроме того, как и при любой реа¬ лизации, существуют машинозависимые уточнения стандартного языка и элементы, зависимые от конкретной операционной систе¬ мы. Ниже приведена схема состава языка Фортран IV ОС ЕС.
ANS-Фортран^Промежуточный ФортрашэБазисный Фортран Машинозависимые уточнения Фортран __ G — расширения — только IV ОС ЕС—| Н — расширения — только G&H — расширения* Элементы Фортрана V Элементы Фортрана II ОС ЕС — зависимые элементы 7.2.1. Машинозависимые уточнения языка Для величин типа INTEGER максимум равен 231—1, т. е. 2147483647. Для величин типа REAL: максимум равен 1663, т. е. около 1075; минимум, отличный от нуля, равен 16~65, т. е. около 10~78; количество значащих шестнадцатеричных цифр в зависи¬ мости от объявления (TYPE DECLARATION) равно 6 или 14, т. е. около 7.2 или 16.8 десятичных цифр. 7.2.2. Элементы Фортрана V Литерный набор для записи исходных программ расширен символом денежной единицы, относящимся к классу букв (см. приложение 2), а также двумя специальными литерами: ’-апост¬ роф, & — логическое «И». Литеральные константы разрешается специфицировать заключением в одиночные апострофы. Вводится понятие шестнадцатеричной константы для инициа¬ лизации значений переменных. Шестнадцатеричная константа ог¬ раничивается слева буквой Z, справа — ограничителем. Цифры шестнадцатеричной константы помещаются по две на каждый байт в правой части участка памяти, отведенного для соответствующей переменной, и дополняются слева нулями. При нехватке места в памяти обрезаются левые цифры константы. Символическое имя может содержать символ денежной едини¬ цы и, в частности, начинаться с этого символа. Размерность мас¬ сивов может достигать 7. Разрешаются смешанные арифметиче¬ ские выражения, т. е. операнды арифметических операций могут не совпадать по типу и по длине. Перед выполнением операции производится выравнивание типов и длин по старшему операнду согласно следующей схеме старшинства: * С(8)—>-С(16) 1(2)—Л (4)—*R(4) С 1 ' N R(8) —v С(16) , где I, R и С обозначают соответственно INTEGER, REAL и COMP¬ LEX; цифрами обозначены длины в байтах. Окончательный результат вычислений выравнивается по типу и длине левой части высказывания (statement) присваивания или по типу и длине, определяемым местом арифметического выраже¬ ния: имеются в виду такие случаи, как индексное выражение или фактический параметр-выражение. 176
Индексное выражение может иметь вид произвольного смешан¬ ного арифметического выражения с целыми и действительными операндами. Выражение может содержать элементы массивов и обращения к функциям. Результат приводится к целому типу. В операциях отношения могут участвовать смешанные целые и действительные выражения. При неодназначной записи более чем двух операций возведения в степень подряд подразумевающиеся скобки расставляются, на¬ чиная справа. При возведении в степень показатель не может быть комплекс¬ ным, а при комплексном основании — и действительным выраже¬ нием. При выравнивании действительной величины по комплексной мнимая часть принимается равной нулю. При выравнивании комп¬ лексной величины по действительной мнимая часть игнорируется. Под расширенной областью цикла понимается часть програм¬ мы, выполняемая между выходом по прямой передаче управления из незавершенного самого внутреннего из гнезда вложенных друг в друга циклов и между возвратом управления в область действия этого же цикла; расширенная область должна находиться вне об¬ ласти действия самого внешнего из гнезда вложенных циклов и не должна содержать других гнезд циклов, имеющих свои расширен¬ ные области. Высказывание PAUSE может иметь, кроме стандартных, сле¬ дующий формат: PAUSE’ литеральная константа’ Выполнение этого высказывания состоит в передаче его текста оператору и переходе программы в состояние ожидания до вмеша¬ тельства оператора. Выполнение высказывания STOP в форме: STOP а где а — не более чем пятизначное целое, влечет прекращение ра¬ боты программы с передачей текста этого высказывания оператору. Высказывание чтения может иметь, кроме стандартного, сле¬ дующий формат: READ (а 1, а2, ERR = a3, END = a4) список где а!-- целая переменная или константа длины 4, представляю¬ щая собой ссылочный номер набора данных, получающий реальное содержание в dd-картах определения данных, внешних по отношению к фортрановской программе вы¬ сказываниях языка управления заданиями ОС ЕС; а2 — метка или массив с форматными данными, или NA- MELIST-имя; а8 — метка высказывания, получающего управление при ошиб¬ ке ввода-вывода; а4 — метка высказывания, получающего управление при попыт¬ ке прочитать запись конца файла. J2. Заказ 3414. 177
Отсутствие одного из двух последних параметров или обоих сразу влечет в соответствующих ситуациях прекращение работы программы. Порядок записи параметров END и ERR несуществен. Параметры высказывания WRITE(aI,a2) список аналогичны первым двум параметрам высказывания READ. Введено новое высказывание NAMELIST/xl/список 1/х2/список 2 ... где xl, х2,... — NAMELIST-имена, указываемые в высказываниях чтения и записи и связывающие эти высказывания с соответствую¬ щими NAMELIST-именам списками. Данные для ввода и вывода по NAMELIST имеют формат пробел & NAMELIST —имя с11=список И, с 12 = список 12, пробел с21=еписок 21, с22 = список 22, .., END где cij — имя простой или индексированной переменной, или имя массива; список ij — список целых и действительных констант, разде¬ ленных запятыми. Повторяющиеся группы констант могут быть изображены в со¬ кращающей записи аналогично группам повторения в форматах к*{(список констант)|константа} где к — коэффициент повторения. Введены дополнительные спецификации форматов: Z — для шестнадцатеричных полей данных, которые обрабаты¬ ваются подобно шестнадцатеричным литералам, дополняясь при вводе слева нулями, а при выводе — пробелами; Q — обобщенная спецификация для целых, действительных, двойной точности и логических данных, играющая роль специфи¬ каций I, F,D,L в соответствии с объявленным или умалчиваемым типом переменных в списке ввода-вывода; ’литерал’ — используется наряду с обычным обозначением ли¬ тералов: wH литерал; Т—для указания номера той позиции в записи, начиная с ко¬ рой производится передача данных. Первая литера в записи, предназначенной для вывода на пе¬ чать, действует как литера управления кареткой и на печать не выводится. Укажем рекомендуемые программисту значения первой литеры: пробел — передвинуть каретку на одну строку (к началу сле¬ дующей строки); О — передвинуть каретку на две строки; —■ — передвинуть каретку на три строки; 178
1 — передвинуть каретку к первой строке следующей стра¬ ницы; +' — подавить переход к следующей строке. Если запись передается не на печать или если первая литера не специфицирована как wH или то первая литера представ¬ ляет собой обычные данные. Если при печати числа по спецификациям I, D, Е, F или G ши¬ рина поля указана недостаточной для выдачи старших значащих цифр, то все поле заполняется звездочками. В стандартной записи высказываний ввода-вывода READ (al, а2) список READ (а) список WRITE (а) список ENDFILE а REWIND а BACKSPACE а первый параметр везде специфицируется и трактуется так же, как ссылочный номер набора данных в высказывании чтения. В Фортране IV ЕС для ввода-вывода с прямым доступом к на¬ борам данных введены следующие высказывания: DEFINE FILE, READ, WRITE, FIND. DEFINE FILE al(k1, cl, bl, pi), а2(к2, c2, b2, p2),... где al, a2,...—беззнаковые целые константы, определяющие ссы¬ лочные номера наборов данных; к1, к2,...— беззнаковые целые константы, определяющие ко¬ личество записей в соответствующих наборах дан¬ ных; cl, с2,...— максимальная длина записи (целая константа без знака) в наборах данных al, а2,...; Ы, Ь2,...— принимают значения L, Е и U; U обозначает, что записи измеряются в словах и предназначены для бесформатных данных; Е обозначает, что записи измеряются в байтах и предназначены для фор¬ матных данных; L обозначает, что записи измеря¬ ются в байтах и могут содержать как форматные, так и бесформатные данные; р 1, р2,...— имена простых целых переменных, играющих роль указателей записи при операциях ввода-вывода. Высказывание DEFINE FILE используется для декларирова¬ ния описания наборов данных с прямым доступом и должно пред¬ шествовать первому упоминанию этих наборов в операциях READ, WRITE и FIND: READ (а’р, х, ERR = c) список где а — ссылочный номер набора данных; р — целое выражение, определяющее относительный номер за¬ писи в наборе данных, начиная с которой выполняется чтение; 12* 179
х— метка формата или имя массива с форматными данными; при бесформатном чтении этот параметр опускается; с—метка, по которой передается управление при возникно¬ вении состояния ошибки устройства ввода-вывода; WRITE (а’р, х) список где параметры а, р и х имеют тот же смысл, что и соответствую¬ щие параметры высказывания прямого READ. FIND (а’р) где параметры а и р по смыслу подобны соответствующим пара¬ метрам прямых READ и WRITE. Это высказывание позволяет совмещать во времени операции поиска указанной записи и ввода-вывода предыдущей записи. Высказывание DATA записывается в форме: DATA а 1 /с 1 /, а2/с2/, ... где а — список имен, простых переменных, массивов и элементов массивов, при этом в качестве индексов используются це¬ лые беззнаковые константы; с — список констант, в котором повторяющиеся группы кон¬ стант могут быть записаны с коэффициентом повторения к* аналогично группам констант высказывания NAME¬ LIST. Программист имеет возможность управлять правилами умол¬ чания с помощью следующего высказывания: IMPLICIT тип 1*к1 (al), тип 2*к2 (а2) ... где тип i — тип (INTEGER, REAL, COMPLEX или LOGICAL), который в данной программной единице будет припи¬ сываться по умолчанию всем именам, идентификато¬ ры которых начинаются с одной из указанных в спис¬ ке ai литер; ai— список литер, разделенных запятыми; при этом груп¬ па алфавитноупорядоченных литер an, an+i. an+j может быть записана в сокращенной форме аЛ—ап-н; *ki—опция1, где k определяет умалчиваемую длину для имен i-ro списка: Длина, приписываемая именам системой в от* Тип Длина сутствие опции *к INTEGER 2 или 4 4 REAL 4 или 8 4 COMPLEX 8 или 16 8 LOGICAL 1 или 4 4 1 Под опцией понимается указание программиста о выбранной им услуге или возможности системы программирования из определяемого для каждого кон¬ кретного случая списка услуг или возможностей; отсутствие такого указания обычно влечет применение некоторых, определенных для данного случая, пра¬ вил умолчания. 130
Двойная точность в IMPLICIT указывается не как DOUBLE PRECISION, а как REAL *8. В объявлениях типов возможны некоторые дополнительные по сравнению со стандартом указания Тип *к а1 *к1 (размерность 1) [/cl/], а2*к2 (размерность 2) [/с2/],. • # где а — имя простой переменной, массива или функции; размерность — обычные указания о размерах массива, количество измерений может достигать семи; — опция длины, подобная введенной для высказывания IMPLICIT, причем *ki (i¥=0) относится только к имени af, тогда как *к относится ко всем остальным именам; сi — список констант, форма записи и смысл которого подоб-- ны списку констант высказывания DATA. Указание /ci/ может отсутствовать; Тип —одно из слов: INTEGER, REAL, LOGICAL или COMPLEX. Тип DOUBLE PRECISION эквивалентен REALMS. Ини¬ циализация данных списком констант в этом объявлении запрещена. При взаимодействии COMMON и EQUIVALENCE разрешает¬ ся увеличение общих областей в сторону больших, но не меньших адресов. Имя функции в высказывании FUNCTION может быть снаб¬ жено приставкой указания длины *к. В списке фиктивных аргументов высказывания SUBROUTINE разрешается указывать фиктивные метки в форме звездочки *. В списке фактических параметров высказывания CALL разре¬ шаются указания в форме & Ь, где b — метка высказывания, при¬ надлежащего той программной единице, к которой принадлежит данное CALL. Высказывание RETURN может иметь вид: RETURN х где х — целая константа (простая целая переменная)' длины 4, рав¬ ная порядковому номеру метки в перечне фиктивных меток списка формальных параметров высказывания SUBROUTINE, принадле¬ жащего той же программной единице, что и данное RETURN. Фак¬ тическое значение метки, определяющее точку возврата по RE¬ TURN х, должно быть указано в соответствующем высказывании CALL. Если фиктивный аргумент заключен в разрезы (ограничен спра¬ ва и слева знаками косой черты), то данная подпрограмма не от¬ водит для такого аргумента специального места в памяти, а ис¬ пользует каждый раз память, которая выделяется в вызывающих подпрограммах соответствующим действительным параметрам. Разрешается передавать переменные размерности массивов в объектное время во время работы программы чеиез блоки COM¬ MON. Дополнительные точки входа в программную единицу опреде¬ 181
ляются с помощью высказывания ENTRY, записываемого в сле¬ дующей форме: ENTRY имя входа (список параметров) где имя входа — внешнее имя, употребляемое при вызовах, на¬ ряду с именем программной единицы SUBROUTINE или FUN¬ CTION; список параметров записывается и используется по правилам, существующим в языке для списка формальных параметров про¬ цедуры или функции. В качестве фактического параметра могут использоваться ли¬ тералы; литеры спецификации ’и’ или wH при этом опускаются. В подпрограмме BLOCK DATA разрешается использование вы¬ сказывания IMPLICIT. 7.2.3. Элементы Фортрана II Для совместимости с Фортраном II в Фортране IV ОС ЕС раз¬ решается использование высказываний ввода-вывода в форме: READ х, список PUNCH х, список PRINT х, список для соответственно ввода с перфокарт, вывода на перфокарты и вывода на печать списка данных под управлением форматных дан¬ ных, содержащихся в высказывании FORMAT с меткой х или в массиве с именем х. Функции некоторых высказываний ранних версий языка Форт¬ ран выполняются или имитируются библиотечными подпрограм¬ мами, вызов которых осуществляется посредством высказывания CALL. Для установки псевдорегистров LIGHT используется подпро¬ грамма LIGHT (к), где при к= 1,2,3 или 4 включается k-й псевдорегистр, а при к = 0 все четыре псевдорегистра выключаются (к — целое выражение). Для проверки состояния псевдорегистров используется подпро¬ грамма SLITET (к, х) в результате выполнения которой по заданному целым выражени¬ ем к номеру псевдорегистра SLITE целая переменная х устанав¬ ливается в 1 или 2 соответственно тому, включен или выключен псевдорегистр. Сброс памяти осуществляется подпрограммами: DUMP (al, el, xl, a2, e2, x2,...) И PDUMP (al, el, xl, a2, e2, x2,...) из которых первая прекращает после сброса выполнение програм¬ мы, а из второй происходит выход на продолжение выполнения 182
программы и где ai и ei задают начало и конец i-и области памя¬ ти, подлежащей сбросу по формату xi. Существует следующее соот¬ ветствие между целой константой xi и форматами: 1 — LOGICAU1, 2 —LOGICAU4, 3 —INTEGERS, 4 — INTEGERS, 5— REAL*4, О — шестнадцатеричный, 6 — REAL*8 7 —COMPLEX*8, 8 — COMPLEX* 16, 9 — литеральный, 10 — REAL*16, 11 — COMPLEX*32. Подпрограмма DVCHK (k) устанавливает k равным 2, если состояние деления на нуль имеет место, и равным 1 в противном случае. Подпрограмма устанавливает к равным 1, если имеет место состояние переполне¬ ния порядка; равным 3 при состоянии исчезновения порядка и рав¬ ным 2 в отсутствие этих состояний. Подпрограмма Важнейшая системозависимая особенность языка Фортран IV ОС ЕС заключается в том, что фортранные программы пользовате¬ ля не содержат элементов, зависящих от операционной системы непосредственно. Такая зависимость может проявляться в програм¬ мах лишь косвенно — через ограничения на доступные программи¬ сту размеры внешней и внутренней памяти, через эксплуатацион¬ ные характеристики внешних устройств, через соглашения об орга¬ низации оверлейных программ с запланированным перекрытием и т. д. Прямая зависимость от операционной системы вынесена из фортранных программ в сопровождающие их программы, написан¬ ные на языке управления заданиями. При использовании компилятора G в фортранные программы могут быть включены следующие отладочные высказывания. Объявление о подключении отладочного пакета: DEBUGG опция 1, опция 2,... OVERFL (к) EXIT прекращает выполнение программы. 7.2.4. ОС ЕС — зависимые элементы языка Фортран ЕС 7.2.5. G-расширения Фортрана ОС ЕС 183
где ( UNIT (х) SUBCHK (al, а2,.,.)' опция i= i TRACE INIT (к 1, k2,...) SUBTRACE целая константа x — ссылочный номер набора данных для вы¬ вода отладочной информации; а — имя массива, для которого в объектное время проверяется соответствие текущих индексных значений объявлению массива; TRACE — заказ на трассирование меток; к—имя переменной или массива, все изменения значений ко¬ торых прослеживаются и передаются в набор данных х; SUBTRACE— заказ на трассирование имени данной программ¬ ной единицы. Высказывание АТ метка определяет начало того участка программной единицы, где акти¬ визирован отладочный пакет. Включение и отключение трассирования меток производится высказываниями TRACE ON и TRACE OFF 7.2.6. Н-расширения Фортрана IV ОС ЕС Оптимизирующий компилятор Н предоставляет гибкие средства планирования ввода-вывода с помощью высказываний асинхрон¬ ного ввода-вывода: READ, WRITE и WAIT. Асинхронное чтение; READ (a, ID*к) список имен массивов где а —ссылочный номер набора данных; к — целое выражение, идентифицирующее своим значением данное высказывание. Асинхронная запись: WRITE (a, ID*к) список имен массивов где а и к трактуются так же, как при описании асинхронного чте¬ ния. Асинхронное ожидание: WAIT (a, ID = k, COND*p, NUM = c) список имен массивов где а — ссылочный номер набора данных; к — целое выражение, идентифицирующее своим значением одно из высказываний асинхронного чтения или записи, не обяза¬ тельно принадлежащее той же программной единице, что и WAIT; данное высказывание WAIT относится к тому высказыванию READ или WRITE, которое еще не завершено другим WAIT, имеет тот 184
же идентифицирующий номер и сообщается с тем же набором дан¬ ных; по высказыванию WAIT производится приостановка выпол¬ нения программы пользователя вплоть до момента завершения операции ввода-вывода соответствующим высказыванием READ или WRITE; р — имя переменной, значение которой после выполнения WAIT устанавливается равным 1 при успешном завершении операции ввода-вывода; равным 2 при возникновении состояния ошибки устройства и равным 3 при обращении к записи END OF FILE; р должно быть целым; с — имя целой переменной, значение которой по завершении WAIT равно числу байтов переданной информации. Повышенная точность: во всех вышеописанных декларациях типов, позволяющих ука¬ зывать точность, для компилятора Н допускаются указания вида REAU16 и COMPLEX*32 Ввод-вызод данных с повышенной точностью производится под контролем спецификации формата Q. 7.3. АЛГОЛ-60 ОС ЕС Язык Алгол-60 ЕС является представлением реализации под¬ множества, рекомендованного ИСО в качестве стандарта языка Алгол-601, расширенным введением декларатора (описателя) CODE. Ниже приводятся ограничения и особенности реализации. Особенности представления основных символов эталонного язы¬ ка связаны с ограниченностью литерного набора стандартных уст¬ ройств подготовки данных: Символы эталонного 48-литерпын 59-литерный языка набор набор а . . . Z А . . . Z О ... 9 0 ... 9 -| */'!'**— ^ *YY’**=; LESS < NOTGREATER < = NOTLESS > = GREATER > NOT EQUAL i = EQUiV EQUIV IMPL IMPL OR AND NOT |& ,(),(/•io/) ,(),(/•io/) = ’POWER’ I** a . . . z 0 ... 9 + -X/-M = < < > VA1 (U'lio: t Остальные символы эталонного языка, изображаемые жирным шрифтом или подчеркиванием, в Алголе-60 ЕС представляются со- 1 Programming Language ALGOL-60, ISO, Ref. N: ISO/R 1538—1971 (E). 135
ответствуюхцими прописными буквами и заключаются в апостро¬ фы: ’GO ТО’, ’BEGIN’ и т. п. Исключен декларатор own. В качестве меток нельзя использо¬ вать целые константы. Формальные параметры должны быть пол¬ ностью описаны и совпадать по виду и типу с фактическими пара¬ метрами в случае вызова по имени. Идентификаторы различаются по первым шести литерам, ос¬ тальные литеры компилятор игнорирует. Если тип арифметического выражения нельзя определить ина¬ че, как вычислив это выражение или установив тип или значение фактического параметра, то тип принимается REAL. Высказывание (оператор) GO ТО с неопределенным указате¬ лем переключателя имеет неопределенный результат. Алгольный компилятор и ОС ЕС дают возможность сепа¬ ратной трансляции отдельных процедур, которые могут быть затем объединены в единую рабочую программу. Процедура, предназна¬ ченная для сепаратной трансляции, не должна заключаться в скобки BEGIN и END. В вызывающей программе предварительно оттранслированная процедура должна быть декларирована заголовком процедуры и подставленным вместо тела процедуры декларатором CODE. В дополнение к процедурам ввода-вывода: INSYMBOL, OUTSYMBOL, 1NREAL, OUTREAL, IN ARRAY, OUTARRAY, в Алголе-60 ЕС введены дополнительно следующие процедуры ввода-вывода: JNINTEGER, —для целых величин; OUTINTEGER INBOOLEAN, —для булевых величин; OUTBOOLEAN 1NTARRAY, —для целых массивов; OUTARRAY 3NBARRAY, —для булевых массивов; OUTBARRAY OUTSTRING —для вывода строк, в результате чего устраняется необходимость в процедуре IENCTH. Параметры этих процедур декларируются в стиле реко¬ мендаций ИСО. По умолчании принимается соглашение о том, что «номер канала», равный нулю, соответствует вводу с перфокарт, а «номер канала», равный 1, соответствует выводу на печать. В Алголе-60 ЕС введены три дополнительных высказывания: SYSACT, PUT и GET, — позволяющие программисту с повышенной гибкостью и эффективностью управлять потоками данных.
7.4. КОБОЛ ЕС Язык программирования Кобол ЕС представляет собой расши¬ рение CODASYL COBOL уровня 1965 г. Основные отличия состо¬ ят в следующем. В секции ввода-вывода раздела среды ENVIRONMENT DIVI¬ SION введена статья ORGANISATION IS k где k — одно из резервированных слов: INDEXED, DIRECT или RELATIVE, определяющих прямую, индексированную или относи¬ тельную организацию данных в соответствующем файле. Введены операции над числами с плавающей точкой, не превы¬ шающими 0,72*1076. В связи с этим в числовых литералах и статье PICTURE используются знаки: . (точка) и Е (указатель поля по¬ рядка числа). В раздел процедур включена новая секция — секция связей, с помощью высказываний которой (CALL и ENTER) программист может организовать связь объектной кобольной программы с дру¬ гими, независимо компилированными и необязательно кобольными программами. Кобольная программа, предназначенная для сепа¬ ратной компиляции и последующего вызова из другой программы, должна содержать описание точки входа ENTER LINKAGE. ENTER имя входа [USING список аргументов]. ENTER COBOL. и описание точки выхода ENTER LINKAGE. RETURN. ENTER COBOL. Вызов из основной программы записывается в форме: ENTER LINKAGE. CALL имя входа USING список аргументов. ENTER COBOL. В высказывании IF хможет быть указано тестирование состоя¬ ния переполнения страницы при выводе на печать: IF имя — переполнения ... где имя — переполнения должно быть специфицировано в статье APPLY параграфа ввода-вывода: APPLY имя — переполнения ТО FOPM — OVERFLOW ON имя файла В разделе, процедур введено высказывание REWRITE:* REWRITE имя —записи FROM имя данных INVALID KEY повелительное — высказывание для обновления записи на устройстве ввода-вывода с прямым до¬ ступом. 187
Введена возможность редактирования данных под управлением высказывания TRANSFORM в разделе процедур: [фигуративная — константа — 1] TRANSFORM имя-данных CHARACTER FROMjHe— числовой — литерал—1 | (имя — данных—1 ) {фигуративная — константа —2 не — числовой — литерал — 2 имя — данных — 2 где FROM-лараметр и ТО-параметр определяют способ редакти¬ рования данных имя — данных; результат редактирования остает¬ ся в имя—данных. Представление об использовании TRANSFORM можно получить из следующего примера: если имя — данных со¬ держит AIBICI то в результате выполнения TRANSFORM имя —данных CHARACTER FROM ’АВСГ ТО Ч23Х’ имя — данных будет содержать IX2X3X Введена статья RECORD KEY в параграфе FILE — CONTROL для спецификации ключа записи при индексной организации файла. Для повышения эффективности использования случайного до¬ ступа к индексно организованному файлу в параграфе FILE — CONTROL вводится статья TRACK. ARE A IS { ™*7дашшх } CHARACTER для спецификации размера необходимой области памяти, который не может быть меньше, чем размер трека плюс одна логическая запись. Отладочные средства Кобол ЕС позволяют свободно разме¬ щать в кобольной программе отладочные высказывания TRACE, EXHIBIT и ON или группировать последние в отладочные пакеты. Трассирование программы включается высказыванием READY TRACE и отключается высказыванием RESET TRACE Вывод отладочных данных производится по высказыванию [ NAMED EXHIBIT { CHANGED NAMED ( CHANGED Это высказывание в предложениях должно быть последним. Форма CHANGED указывает, что выводиться должны лишь те данные, значения которых изменились после момента последнего из предыдущих случаев выполнения EXHIBIT CHANGED. Гимя — данных 1 \литерал / 188
Для отладочного исполнения отдельных частей программы предназначается высказывание ON kl AND EVERY k2 UNTIL k3 { n E XT^E ГШ1^выказывание | / ELSE 1 / высказывание 1 \ OTHERWISE / I NEXT SENTENCE / Параметры высказывания к1,к2икЗ играют роль, аналогичную роли параметров подразумевающихся циклов в Фортране. Параграфы исходной машины и объектной машины записыва¬ ются в форме: SOURCE — COMPUTER. ЕС номер — модели. OBJECT —COMPUTER. ЕС номер — модели. 7.5. ПЛ/1 ЕС В спецификациях языка ПЛ/1 ЕС введено более 600 изменений, уточнений, добавлений и удалений по сравнению со спецификация¬ ми 1966 г.1. Из особенностей, отличающих язык ПЛ/1 ЕС, наиболее харак¬ терными ir заслуживающими внимания являются, на наш взгляд, следующие. Понятие переменной обобщается на случай файла. Имя — файла — переменной должно быть декларировано явно указаниям атрибута VARIABLE вместе с атрибутом FILE, при этом не допускаются атрибуты описания файла, т. е. INPUT, OUT¬ PUT, UPDATE, DIRECT, BUFFERED и т. п. Эти атрибуты исполь¬ зуются для декларирования имени — файла — константы. Напри¬ мер, если декларирован файл А, а файл В имеет атрибут VARIABLE, то после выполнения высказывания В = А; результат выполнения высказываний ON ENDFILE В; И ON ENDFILE А; будет одинаковым. Программист имеет возможность локально в пределах блока управлять применением правил умолчания. Для этого использует¬ ся высказывание DEFAULT в одной из следующих двух форм: DEFAULT ALL [спецификация — атрибутов] ИЛИ DEFAULT список спецификаций — умолчания; где спецификация — атрибутов имеет вид: (список атрибутов [VALUE (список спецификаций — значений)] 1 [VALUE (список спецификаций — значений) j 1 Универсальный язык программирования. Пер. под ред. В. М. Курочкина. М., «Мир», 1968. 189
в качестве элемента списка спецификаций — умолчания могут быть указаны либо гсдмгр //идентификатор \Г /идентификатор П v [спецификация — KAiNub ц^уква 1 • буква 2 J [Дбуква 1 : буква 2 JJ"*' атрибутов] либо RANGE (*) [спецификация — атрибутов] либо DESCRIPTOR [спецификация — атрибутов] либо CONSTANT [спецификация — атрибутов] под спецификацией — значений здесь понимаются специфика¬ ции точности, CHARACTER выражение, BIT выражение, AREA выражение; знак * означает ссылку на все идентификаторы, находящиеся в области действия DEFAULT; указание DESCRIPTOR обозначает распространение влияния DEFAULT на все непустые дескрипторы в явно декларированных атрибутах ENTRY; указание CONSTANT распространяет влияние DEFAULT на константы. Высказывание DEFAULT представляет собой естественное обоб¬ щение фортранного IMPLICIT. Введены высказывания FLOW и NOFLOW для включения и со¬ ответственно выключения отладочных средств, подобных отладоч¬ ным средствам в Фортране. Определено содержание понятия физического файла — набора данных. 76. ОСОБЕННОСТИ КОМПИЛЯЦИИ Устройство компиляторов с языков Ассемблера, Фортрана, Ко¬ бола, Алгола и ПЛ/1 позволяет оценить время работы каждого из них с помощью единой формулы T=K+R*n-}- D*s+M*m, где К — константа, не зависящая от длины обрабатываемой про¬ граммы и включающая время процессора и системы для всех ша¬ гов задания; R — коэффициент, определяющий дополнительное время обра¬ ботки одной карты исходной программы в среднем; п — количество карт исходной программы; для Ассемблера в их число следует включить карты, выработанные макрогенерато¬ ром; D — коэффициент, определяющий дополнительное время обра¬ ботки одного высказывания в макроопределениях; для Фортрана — среднее время обработки одной подпрограммы, затрачиваемое до¬ полнительно; 190
s — количество высказываний в макроопределениях, включая системные; каждое макроопределение учитывается один раз; учи¬ тываются только те высказывания, которые вырабатываются в про¬ цессе макрогенерации в зависимости от обращения; М—дополнительное время обработки одной макроинструкции; m — количество макроинструкций. Для Фортрана последнее слагаемое обращается в нуль, для Ко¬ бола и ПЛ/1 обращаются в нуль последние два слагаемых фор¬ мулы. Ь случае Ассемблера для приближенного подсчета времени компиляции могут быть сделаны следующие усредненные допуще¬ ния: при каждом вхождении макрокоманды DCB генерируется око¬ ло 50 строчек; при каждом вхождении макрокоманды DCBD генерируется око¬ ло 100 строчек; для остальных системных макрокоманд генерируется около 6 строчек. В табл. 3 даются более точные верхние оценки количества строчек в макроопределениях системных макрокоманд. Таблица 3 Верхние оценки в формуле для системных макрокоманд Количестзо ^строчек 2000-2200 1000-1500 600-1000 300-600 Меньше 300 Имена систем¬ ных макроко¬ манд READ WRITE ATTACH CALL CAMLST DCB DCBD CLOSE LINK DUMP EXTRACT XCTL TEST FREEMAIN GETMAIN GO OPEN PRTOV SET SPIE TRACE WTOR XDAP Остальные макроипст- рукции Быстродействие трансляторов на модели ЕС-1030 и методы до¬ ступа к памяти, используемые компиляторами, приведены в табл. 4 и 5. В таблицах приведены дополнительные данные, сведения о которых даются в технической документации. 191
Т а б л и ц я 4 Быстродействие трансляторов на модели ЕС-1030 Инд работы Коэф¬ фици¬ ент Ассемблер (И Фортра! ОРТ=0 п IV (Н) ОРТ-2 Фортран IV (G) Кобол (Е) ПЛ/1 (F) К 2.42 1.65 3.45 1.12 3.45 1.7 р 0.0052 0.0142 0.032 0.017 0.0054 0.027 Компиляция I 0.0022 0.71 1.5 0.0037 — м 0.022 — — — — — к 1.81 2.28 2.25 2.3 2.06 3.75 Загрузка, р 0.00001 0.0018 0.0001 0.0008 0.0009 0.0022 запуск I 0. 0. 0. 0. — — м 0. — — к 0.97 0.97 0.98 1.0 0.97 1.02 р 0.00001 0.0001 0.0003 0.00004 0.000015 0.00001 Запуск I 0. 0. 0. 0. — — м 0. ~~ к 3.97 3.97 5.4 3.15 5.25 5.15 Компиляция, р 0.0052 0.015 0,033 0.017 0.0064 0.029 загрузка, I 0.0022 0.725 1.5 0.0037 запуск м 0.0225 — — — — Таблица 5 Методы доступа и память, используемые компиляторами Компиляторы Методы досту¬ па (AM) Оперативная память (байтов) Дисковая память Библиотеки на дисках (байтов) Рабочее про¬ странство SYSUT1/2/3/4 (треков) 00 СО О- PQ оп О О 00 MFT MVT байтов треков Алгол-60 (62) + + 45 056 48К 133К 38 49 К 9 8 2 0 Ассемблер + + -L — — 49 152 50К 147К 40 Кобол (Е) + + — — 17 504 22 К 336К 96 — 4 9 9 0 Кобол (F) + -L — — 81 920 86 К 315К 90 28 К 6 5 6 5 Кобол (ANS) + J- — — 81 920 86 К 430К 123 38.5К 8 116 3 Кобол (F) с GSP J- + + — 4-35 318 + 71К + 73К + 21 Фортран IV (Е) + — — 15 360 42 К 112К 32 59.5К 3 0 0 0 Фортран IV (G) + — — 81 920 100К 84 К 2'4 91К Фортран IV (Н) + — — 155 648 160К 446К 127 91К 10 1 0 0 Фортран IV (G) с GSP _L + — + 35 318 + 71К + 73К + 21 ПЛ/1 (F) 4- — + 45 056 50 К 1263К 361 276.5 К '5 0 18 0 ПЛ/1 (F) с GSP + 4- 4- + 35 318 + 71К +-73К + 21 РПГ + — — — 15 360 со 175К 50 4 4 4 0 Сортировка-объе - динение 1 16 000 18К 80.5К 23 210К Тсстран-редактор + — — — — 18 000 50 К 46К 15 224 К 10 0 0 ПЛ /1-контроллер 35 К 10 192
7.7. КАТАЛОГИЗИРОВАННЫЕ ПРОЦЕДУРЫ КОМПИЛЯТОРОВ Язык управления заданиями обладает многими чертами языков программирования высокого уровня. В частности, программы, на¬ писанные на этом языке, отлаженные и заслуживающие многократ¬ ного использования, могут быть помещены в библиотеку каталоги¬ зированных процедур и получить статус каталогизированной про¬ цедуры. Большинство процессов, связанных с компиляцией, особенно на этапе отладки проблемных программ, типичны. Для каждого компилятора в системной библиотеке каталогизированных про¬ цедур имеется по четыре процедуры, реализующих следующие ти¬ повые процессы: компиляция; компиляция и редактирование свя¬ зей; редактирование связей и выполнение; компиляция, редакти¬ рование связей и выполнение. Вызов процедур производится предложением ЕХЕС языка уп¬ равления заданиями. Имена процедур приведены в табл. 6. Таблица 6 Имена каталогизированных процедур Режим работы Компилятор КОМПИЛЯЦИЯ КОМПИЛЯЦИЯ, редактирование редактирование, выполнение компиляция, редактирование, выполнение Ассеглблер FORTRAN (G) FORTRAN (Н) ALGOL COBOL PL/1 ASMFC FORTGC FORTHC ALGC СОБЕС PL1LFC ASMFCL FORTGCL FORTHCL ALGCL COBECL PL1LFCL ASMFLG FORTGLG FORTHLG ALGLG COBELG PL1LFLG ASMFCLG FORTGCLG FORTHCLG ALGCLG COBECLG PL1LFCLG На шаге редактирования каталогизированные процедуры под¬ ключают библиотеки стандартных подпрограмм и встроенных функций соответствующих компиляторов, а на шаге выполнения определяют основные потоки ввода-вывода: ввод с перфокарт, вы¬ вод на построчную печать, вывод на перфокарты. С помощью приведенных ниже некоторых ключевых парамет¬ ров программист может уточнить в предложении ЕХЕС условия обработки своих программ: DECK — выдача объектного модуля на перфокарты; LOAD —передача объектного модуля во временную библиотеку для его последующей обработки в текущем задании редакто¬ ром связей; SOURCE —печать исходной фортраниой или ПЛ/1 программы; LIST —то же для Кобола, Алгола и Ассемблера; L!NECNT = x — указание о числе строк х на странице; МАР —печать плана памяти для Фортрана; XREF —печать таблицы перекрестных ссылок для ПЛ/1 и Ассемб¬ лера; ОРТ = к —указание об уровне оптимизации для Фортрана (Н) и ПЛ/1; к может принимать значения 0, 1 или 2. 13 Закг.з 3'Л4. 193
Используя каталогизированные процедуры, программист может подключать дополнительные операторы определения данных. Ука¬ заниям этих предложений в течение хода данного шага задания дается приоритет перед указаниями каталогизированных процедур. Благодаря этому становится возможным локальное корректирова¬ ние текста каталогизированных процедур. Приведем несколько примеров. 1. Компиляция фортранной подпрограммы с максимальной оп¬ тимизацией и выдачей объектной колоды перфокарт: //имя — задания JOB //ЕХЕС FORTHC, PARM = 'DECK, ОРТ=2' //FORT.SYSIN DD* Колода перфокарт с текстом исходной подпрограммы /* 2. Компиляция главной фортранной программы, несколько под¬ программ и функций с последующей переработкой редактором свя¬ зей полученных объектных модулей в единый загрузочный модуль, а затем выполнение этого модуля; при выполнении программа тре¬ бует ввода с перфокарт исходных данных: //имя — задания JOB //ЕХЕС FORTGCLG //FORT.SYSIN DD * С MAIN PROGRAM END SUBROUTINE Al . . . END FUNCTIONBI . \ . END END j /* //GO.SYSIN DD* Колода перфокарт с исходными данными /* 3. Выполнить операции предыдущего примера, на шаге редак¬ тирования определить дополнительный ввод из библиотеки MYLIB и конкатенировать первичный ввод библиотечными модулями А, В и С: //имя — задания JOB //ABC ЕХЕС FORTGCLG //FORT.SYSIN DD* Исходные модули //LKED.ADDLIB DD D S N AME = MY LIВ //LKED.SYSIN DD* LIBRARY ADDLIB (А, В, C) //GO.SYDIN DD * Исходные данные /* ( Колода перфокарт с I исходной программой 194
7.8. СОГЛАШЕНИЯ ОБ ОБЪЕКТНОМ МОДУЛЕ Для компиляторов ОС ЕС установлены единые требования к форме результата компиляции—к формату объектного модуля. Соблюдение этих требований позволяет освободить компиляторы от нескольких завершающих этапов изготовления рабочей про¬ граммы и сосредоточить выполнение этих этапов в одном месте — в программе редактора связей. Для проблемного программиста бо¬ лее важным является не само разделение труда между компонен¬ тами операционной системы, а следствие такого разделения — воз¬ можность применения модульного, принципа при создании больших проблемных программ. Границы-между компиляторами и редактором связей проходят там, где еще не установлены связи между отдельными модулями пользователя, не определены конкретные адреса и т. п., но уже можно отвлечься от языка программирования, который был ис¬ пользован при написании исходного модуля. В связи с этим при обсуждении обработки объектных и загрузочных модулей полезно перейти к независящим от исходных языков терминам редактора связей и установить соответствие с терминами обсуждаемых здесь языков (табл. 7). В последующем обсуждении редактора связей будут употреб¬ ляться следующие сокращения: CESD — составной словарь внешних символов СМ — общий (COMMON) ENTAB — таблица входов ER — внешняя ссылка ESD — словарь внешних ссылок ESDID — ESD — идентификатор LD — определение метки NE — не — редактируемый — атрибут OL — только — загружаемый — атрибут Р — указатель PC — частный код PR — псевдорегистр RLD — словарь перемещений SD — определение секции SYM — символьная запись Тестрана TXT — текстовая запись WX — слабая внешняя ссылка Формат объектной записи Тестрана Байты I 12—9—2 (0000 0010) 2_4 SYM 5—10 пробелы II —12 число байтов тестрановых данных 13—72 тестрановые данные 73—80 не используются 195
Соответствие между понятиями редактора связей и понятиями языков программирования со с 03 Он с_ О Q- а Sw ■0.0 си s|lw С15-8 о о. С о> * О 'Г-Н tj t*<! % X кО О «X х « - | sQ ^ я >—■ я я о >ч 3 Он «Н я ^ Щ S as К U о ^ Он — рн О) 1—1 о « О о. ищ с я ся яи— в Й ё< я Н я ся я я я я я я я. и >* я X я н цИ § 5 12; я я [У н н ьСЯ п Я я m о о ш я к я о О ш я я « I I CJ ш КО |§*В <=( ^эю о о 5— ^ Он М с; С С »s I £ я к I 2 •©* gX «« ^ ЭГ к Э < я я и <■ Н я u s — CM 00 ^ я V |S s s Я ~ о с ’£ Cu « n 2 5 « К I О м к о 5 о. _ С &.р К £ Я я Я нн ^ К К О 03 я 2 О ^ jD д Он £ S <м ж ю ^ В <о О. Я ч s с u й ж 5 °- Он » ,д с >* я . г—S .Qh I CL) со 1 я ^ к я о g S о ^ т- с к s к§£= *S“*. Ш я •. -К 2 3 о. о> я §.>- ЕС* I 12 •=«“ О О) К я я —< *3 о -*■ н >. S О Я s я я я ! я< X о £Х aw Я £—* а я>< м шШ о О я Он я 3 е я о S S 3 s^T я я Я '—' Он ‘ -Ч Щ S-sSS §§<5и g >> •9- я 2 Я £ — а й Я я ч Он я - см а> я я ■'■—VO С 00 X 4 а> W ^ О-, я но; я V а кН Кш я Л —1 щ S^d 3 а?_б и ЯС* — 5 ssps д Г~п ос cj X я я X W й я з a >, Я Я •е* я 3 Э х 3 * 4 Я 3 ^ ас д S ^ я m § § 3 вд 3^ Я * Г 1 * л U М О А <и я Я я <и 3 Я 03 о Я н. о ^ 3 ^ ."С я к я S • ^ § ' u g ! я а я* я О Я нО я < °5 к < яО §§ •я о я ш <=! 1“ X о о Он н я о _ я 5 Я Я S « к а я о X я я я а я я со я я я I sis
Редактор связей Фортран IV ПЛ/1 Ассемблер | Кобол | Алгол £ X х X К В X " э ° Ф R ^ 03 CQ х О) £ ?! § * к ►2 О К £ X я £ а «•X га 2 § 33 3 X 55 ад * и s и со я X Ч Ч Я оз X :Я Я X я ас 2 =1 О 03 X X ' X х X х 5 = ■ о к : О- о.) ; g * о СМ со Я н -2 О 4 ^ х X 33 X _ х £ 5 оЗ я щ ф ± х а QJ Я О 33 X X :S £ О X ^ ^ X ^ о X 33 л 03 О m t-i ° X я а ГО Ф X X S «8. §S к Sf »я ад ^ ад аз 4 5 р- U -р* X" х* J3 п X X CL Q, >1 О t( С( £_■ (О О) 2 3 ^ я с о х аа “II! я о : о х : см о Cl q3 X • t« о . С Ю X *Х X х S х * ф s Tf - ф D-CO Ф >—- ад LQ 5-з~ — £ *? —• S ф —* х X фц_ ?со х—ч 4“ »=t X I £ X tt о ч ХО 03 а VD О я 2 §° о° Си gz оО с:> х^ SO SU ф х s ад х я г2о С о »я ф а \о X S S 3 CL *- Он о et « ф о X с X S S g я »я 3 я Й ад С S97 Примечание. При генерации имен внутренней статической памяти и ON-единицы звездочки дополняют имя до восьмили¬ терного; если в имени внешней процедуры программистом указано более семи литер, то для имени программной секции удерживаются только первые четыре и последние три литеры.
Формат записи ESD (объектный модуль) Байты I 12—9—2 (0000 0010) 2—4 ESD 5—10 пробелы 11—12 число байтов данных ESD 13—14 пробелы 15—16 ESDID — ESD-идентификатор (относительная позиция) первого отличного от LD пункта ESD пробелы — если все пункты ESD суть LD 17—72 пункты данных ESD 73—80 не используются Формат пункта ESD — данных (объектный модуль) Байты 1—8 имя, если пункт имеет тип SD, LD, ER, CM, PR или WX пробелы, если пункт имеет тип PC или непоименованный СМ 9 тип: 00-SD 04-РС 01-LD 05-СМ 02-ER 06 —PR OA-WX 10—12 адрес, для SD, PC и LD 13 пробел 14—16 нули — для END-запнси длина контрольной секции — для SD, PC, СМ идентификатор — для SD пробелы — для ER, WX длина псевдорегистра — для PR Формат текстовой записи (объектный модуль) Байты I 12—9—2 (0000 0010) 2—4 TXT 5 пробел 6—8 адрес первого байта текстовых данных 9—10 пробелы II —12 число байтов текстовых данных 13—14 пробелы 15—16 ESDID 17—72 текстовые данные в машинном коде 73—80 не используются Формат RLD-записи (объектный модуль) Байты 1 12—9—2 (0000 0010) 2—4 RLD 5--10 пробелы 19*
11 — 12 число данных RLD-данных 13—16 пробелы 17—72 пункты RLD-данных 73—80 не используются Формат пункта RLD-данных Байты 1—2 указатель смещения — ESDID CESD-входа для симво¬ ла, к которому имеется ссылка 3—4 указатель позиции — ESDID контрольной секции, содер¬ жащей адресную константу 5 флаги: биты 5-го байта -2 нули I ,00 нет ветвления 4 = 01 ветвление 1 111 длина псевдорегистра I I01 адресная константа длиной 2 байта -е= j 10 адресная константа длиной 3 байта 1 ill адресная константа длиной 4 байта 7= \ \ 0 положительное смещение 1 1 11 отрицательное смещение I (0 R- или P-указатели имеют силу для 8 = следующего RLD-пункта 1 1 1 — в противном случае 6—8 адресная константа Формат END-записи Байты 1 12—9—2 (0000 0010) 2—4 END 5 пробел 6—8 опционный 24-битовый адрес точки входа 9—14 пробелы 15—16 ESDID SD-пункта контрольной секции, содержащей ад¬ рес, определенный в байтах 6—8 17—28 пробелы 29—32 длина контрольной секции, если она не была определена в SD ESD — пункта; в противном случае 29-й байт ра¬ вен нулю 33—80 не используются В байтах 17—24 может быть указана символическая точка вхо¬ да— опционное имя точки входа. В этом случае в байтах 6—8, 15—16 и 25—28 помещаются пробелы. 199
7.9. РЕДАКТОР СВЯЗЕЙ Основные функции редактора связей и потоки информации при его работе иллюстрируются рис. 29 и табл. 8. В ОС ЕС имеется также облегченный вариант редактора связей — загрузчик, осо¬ бенности которого по сравнению с редактором связей приведены в табл. 9. Базисные понятия обработки объектных модулей будет удобнее обсудить на примере редактора связей. Исходные I * /лодули • • 'HZJ Объектнь'е' модули Рис. 29. Редактор связей и потоки информации Для работы редактора связей требуются четыре набора данных со стандартными dd-именами: SYSLIN, SYSLMOD, SYSUTI и SYSPRINT. Пятый набор данных — SYSLIB не является необходи¬ мым. 200
Таблица 8 Источники ввода в редактор связей Источники ввода Характеристика источников ввода первичный ввод дополнительный ввод автовызол Язык определения ис¬ точника (Средство определения источника Исходные модули Возможность включе¬ ния управляющих вы¬ сказываний редактора связей Наборы данных Язык управления заданиями //SYSLIN DD Объектные модули Имеется Последователь¬ ные и (или) рас¬ члененные Высказывания ре¬ дактора связен INCLUDE Объектные и за¬ грузочные модули Имеется Последователь¬ ные и (или) рас¬ члененные Язык управления заданиями //SYSLIB DD* Объектные и за¬ грузочные модули Нет Расчлененные * См. также управляющее высказывание радактора связей LIBRARY. Таблица 9 Редактор связей и загрузчик Характеристм ка Редактор связей Загрузчик Количество шагоз задания для редактирования, загрузки и вы¬ полнения Не менее двух Один Место, куда помещается выходной Библиотека Глазная па¬ загрузочный модуль SYSLMOD мять Инициирование выполнения вы¬ ходного загрузочного модуля Нет Да Количество выходных загрузочных модулей Один или более Один Возможность использования вы¬ ходного загрузочного модуля в дальнейшем Имеется Нет Возможность подключения допол¬ нительных источников ввода Имеется Нет Возможность создания оверлейной структуры выходного модуля Имеется Нет Модификация существующих за¬ грузочных модулей Да Нет Обработка специальных управ¬ ляющих высказываний Да Нет Наличие в SYSLIN модулей двух типов (объектные и * загрузоч¬ ные) Относительное время работы (для загрузчика принято за I) Не допускается Допускается 2 1 Относительное время выполнения выходного модуля 1 I Вспомогательная память Требуется Не требуется 201
Источником первичного ввода должен быть последовательный набор данных SYSLIN, содержащий один или более объектных мо¬ дулей и, возможно, управляющие высказывания редактора связей. Загрузочные модули не могут присутствовать в первичном вводе. В каталогизированных процедурах редактора связей и систем про¬ граммирования шаг выполнения редактора связей имеет имя LKED и включает высказывание //SYSLIN DD DDNAME-SYSIN. Редактор связей всегда помещает выработанные загрузочные модули в библиотеку, определенную dd-высказыванием с именем SYSLMOD. В каталогизированных процедурах эта библиотека оп¬ ределяется шагом LKED как временный набор данных. Промежуточный набор данных, используемый во время работы редактора связей, имеет имя SYSUT1. При использовании катало¬ гизированных процедур обычно не возникает необходимости моди¬ фицировать dd-высказывание SYSUT1. Листинг, генерируемый редактором связей, помещается в по¬ следовательный набор данных с именем SYSPRINT. Высказыванием определения данных с именем SYSLIB может быть подключена библиотека, в которой редактором связей произ¬ водится автоматический поиск с целью разрешения внешних ссы¬ лок, не получивших разрешения ни через первичный, ни через до¬ полнительный ввод. Если программист обращается к редактору связей непосредст¬ венно, т. е. минуя каталогизированные процедуры систем програм¬ мирования, то в источнике автовызова должны быть определены системные библиотеки в соответствии с тем, какими системами программирования были выработаны объектные модули, участ¬ вующие в редактировании: Система Имя программирования библиотеки ALGOL-60 SYS1.ALGLIB COBOL SYS1.COBLIB FORTRAN (G) \ FORTRAN (Н) / SYS1.FORTLIB PL/1 SYS1.PL1LIB Инициирование редактора связей производится оператором языка управления заданиями // ЕХЕС либо по имени уже упоми¬ навшейся каталогизированной процедуры LKED, либо непосред¬ ственно— по именам IEWLF440, IEWL или LINKEDIT. При этом в поле ключевого параметра PARM (в случае использования ката¬ логизированной процедуры — в поле параметра PARM. LKED) мо¬ гут быть указаны следующие опциональные возможности: LIST — передача в SYSPRINT обработанных высказываний ре¬ дактора связей; МАР — запрос на план выработанного загрузочного модуля; XREF — запрос на план и список внешних перекрестных ссы¬ лок; LET — присвоение загрузочному модулю статуса «выполни¬ 202
мый», несмотря на возможное наличие некоторых специально ого¬ воренных ошибок, обнаруженных при редактировании; NCAL — запрет на разрешение внешних ссылок из SYSLIB, при этом модуль помечается как «выполнимый»; SIZE-(vl, v2)—количество байтов главной памяти для разме¬ щения редактора связей (vl) и буферов загрузочного модуля (v2)j OVLY — оверлейная структура загрузочного модуля; NE — выходной загрузочный модуль не подлежит дальней¬ шей обработке редактором связей (в этом случае для уменьшения размеров загрузочного модуля не сохра¬ няется таблица внешних ссылок); RENT — модуль помечается как реентерабельный; REUS — модуль помечается как повторно используемый; REFR — модуль помечается как обновляемый; TEST — модуль подлежит проверке Тестраном и содержит тс- страновые таблицы. Сообщения редактора связей об ошибках, обнаруженных при редактировании, сопровождаются комментирующими текстами и имеют код IEWOxxC, где двузначное целое хх представляет собой номер сообщения, а С — код серьезности ошибки: С = 0 —условие, которое не вызовет ошибки при выполнении модуля; С = 1 —условие, которое может привести к ошибке при выпол¬ нении модуля, однако последний помечается как «вы¬ полнимый»; С = 2 — ошибка может повлечь невозможность выполнения мо¬ дуля; модуль помечается в этом случае как «невыпол¬ нимый» при условии отсутствия опции LET; С = 3 — модуль не может быть выполнен и помечается как «не¬ выполнимый»; С = 4 — ошибка, при которой дальнейшая обработка редакто¬ ром связей невозможна, загрузочный модуль не выра¬ батывается. Управляющие высказывания редактора связей записываются в формате, несколько отличном от формата операторов языка управ¬ ления заданиями: вместо литер // и поля имени ставится один или более пробелов. Если операторы языка управления заданиями об¬ рабатываются планировщиком заданий до начала работы редакто¬ ра связей, то управляющие высказывания редактора связей раз¬ мещаются программистом свободно (за некоторыми исключения¬ ми) в смеси с модулями первичного и дополнительного вводов и обрабатываются во время выполнения редактора связей. Если создается единственный загрузочный модуль, то имя ему может быть присвоено посредством параметра DSNAME в опера¬ торе //SYSLMOD DD. При создании более одного загрузочного модуля за один шаг выполнения редактора связей каждая группа входных модулей, подлежащих слиянию в один загрузочный мо¬ 203
дуль, отделяется от следующей за ней группы высказыванием ре¬ дактора связей NAME имя — модуля [(R)] где опция (R) обозначает, что данный вновь созданный модуль должен заменить собой уже существующий модуль с тем же име¬ нем в наборе данных, определенном в высказывании //SYSLMOD DD. Альтернативные имена выходному загрузочному модулю при¬ сваиваются высказыванием ALIAS список — имен помещаемым в области действия соответствующего высказывания NAME. В списке не должно быть более 16 имен. Высказывание CHANGE а 1 (Ь!),... влечет замену внешнего символа а* символом Ь{. Точка входа, если она не определена инструкцией Ассемблера END, должна быть указана внешним именем в управляющем вы¬ сказывании редактора связей ENTRY внешнее — имя которое помещается в сфере действия высказывания NAME (при отсутствии высказывания NAME будем считать сферой действия пустого NAME весь ввод редактора связей). Источники дополнительного ввода указываются с помощью вы¬ сказываний INCLUDE имя — набора — данных — 1 [(список — имен — членов — 1)],..« Все управляющие высказывания редактора связей, помещенные в дополнительном вводе, имеют силу, за исключением высказыва¬ ния NAME. Высказывание (имя — контрольной — секции — 1 [(имя — замещающей — секции — REPLACE [имя — входа влечет вычеркивание имен входа и (или) замену контрольных сек¬ ций; если имя — замещающей — секции — i опущено, то контроль¬ ная — секция — i вычеркивается. Оверлейная структура загрузочного модуля определяется сов¬ местным использованием высказываний OVERLAY имя — точки —загрузки и INSERT список — имен — контрольных —секций Контрольные секции, перечисленные вслед за высказыванием OVERLAY в высказывании INSERT, образуют сегмент. Секции корневого сегмента перечисляются в INSERT перед первым вхож- 204
дением OVERLAY. Указаниями в разных вхождениях высказь»*^ ния OVERLAY одного и того же имени-точки-загрузки определяют¬ ся сегменты одного уровня. Например, последовательность INSERT А OVERLAY X INSERT АХ1, ВХ1 OVERLAY Y INSERT AY I OVERLAY Y INSERT AY2, BY2 OVERLAY X INSERT ЛХ2, BX2, CX2 определяет следующую оверлейную структуру: AYl AY2 BY2 Режим автоматического разрешения внешних ссылок определя¬ ется высказыванием {имя — набора — данных (список — имен — членов) (список — внешних — ссылок) * (список — внешних — ссылок) где вторая из указанных альтернатив задает список тех внешних ссылок, которые не следует разрешать в текущем шаге задания редактора связей; третья альтернатива — * (список — внешних — ссылок) — задает список тех внешних ссылок, которые не следует разрешать во время всех шагов редактора связей.
ПРИЛОЖЕНИЯ ПРИЛОЖЕН ИЕ 1 Коды управляющих символов для АЦПУ пробел (40) — интервал между печатными строками в одну строку 0 (F0) —интервал между печатными строками в две строки .— (60) — интервал между печатными строками в три строки 4- (4Е) —печать без интервала между печатными строками 1 (F1) —прогон бумаги до пробивки на дорожке 1 2 (F2) — прогон бумаги до пробивки на дорожке 2 3 (F3) — прогон бумаги до пробивки на дорожке 3 4 (F4) — прогон бумаги до пробивки на дорожке 4 5 (F5) — прогон бумаги до пробивки на дорожке 5 6 (F6) — прогон бумаги до пробивки на дорожке 6 7 (F7) —прогон бумаги до пробивки на дорожке 7 8 (F8) —прогон бумаги до пробивки на дорожке 8 9 (F9) — прогон бумаги до пробивки на дорожке 9 А (С1) —прогон бумаги до пробивки на дорожке 10 В (С2) —прогон бумаги до пробивки на дорожке 11 С (СЗ) —прогон бумаги до пробивки на дорожке 12 Примечания: 3. В скобках указаны представления управляющих символов во внутреннем машинном коде ДКОИ. 2. Если управляющий символ представлен некоторым кодом, отличным от перечисленных, то операционная система считает, что стоит код пробела. Коды управляющих символов для карточных перфораторов V (Е5) — выбор приемного кармана 1 W (Е6)—выбор приемного кармана 2 Примечание. Если управляющий символ представлен некоторым кодом, от¬ личным от перечисленных, то операционная система считает, что стоит код буквы V. Примечания к приложению 2: 1. Нижняя строка в колонке «Цифровая группа» содержит 8—7, 2 Символ с кодом 0—8—5 есть символ подчеркивания. 3. Символ с кодом 12—11—0—8 — прописная буква «Ю». Примечания к приложению 3: 1. Символ с кодом 50 — буква «п» строчная. 2 Символ с кодом 70 — буква «П» прописная. 3. Символы с кодами 58 и 78 — соответственно строчной и прописной мягкий знак. 4. Символ с кодом 2D — знак «минус». Примечания к приложению 4: 1. Символ с кодом 60 — знак «минус». 2. Символ с кодом 6D — знак подчеркивания.
ПРИЛОЖпмИр 2 Перфокарточный код ЕС ЭВМ Зональная группа 12 11 О 12 0 12 11 11 0 12 11 О 12 11 0 12 О 12 И 11 0 12 11 О | Цисрровая группа | \с - 0 Про¬ бел { 1 } Ч и я ь 8-1 ; А о / 1 а j — ы НЗ СУ1 Д01 Д17 Д31 9-1 ' 2 В к 6* г • О к S 3 НТ СУ2 дог Снн 9-2 в С L Т 3 с 1 t ш НТ СУЗ доз Д19 9-3 4 V М и 4 d т и Э Д28 Д29 Д04 Д20 9-4 5 Е N V 5 е п / ГТ Д05 ПС Д21 9-5 6 F О W 6 / о W ч Д06 ВШ Кб Д22 Ю 9-6 7 G Р X 7 9 Р X ь2> 36 Д07 АР2 НП 9-7 в Н Q У в h Я У ш дгз АН Д08 Д24 6 9-8 9 I R Z 9 i Г 2 9 Д13 КН Д09 Д25 ПУС API доо Д16 9-3-1 8-2 С ] \ д к Б Д14 Д18 ДЮ Д26 3 9-з-г 8-3 • п > # л Ц ВТ Д15 Д11 Д27 и У ш 9-8-3 8-4 < % (§> Ф м /77 Д ПФ РФ Д12 СТП Й П ж э 9-8-4 8-5 ( ) — Г г н вн РГ ктм НЕТ Я УХ 9-8-5 8-6 + ; > = Ж ф РУС РЗ ДА дзо л ь ч 9-8-6 I Л’> ? л и п в Г ЛАТ РЭ ЗВ ЗМ ы 35' 9-8-7 ^Допускается знак (логическое,, НЕ ") ^ Допускается прописная буква Ъ ” П Р И ЛОЖЕ Н II Е 3 Семиразрядный код ЕС ЭВМ Латинский регистр Русский регистр I б? 0 0 0 0 / 1 1 1 0 10 0 0 7 1 1 1 бб О 0 1 1 0 0 1 1 0 О 1 1 0 О 1 1 бЕ 0 1 0 1 0 1 0 1 0 1 0 1 О 1 О 1 ь\б6\б5 6* бз ъ б; О 1 2 3 4 c 6 7 0 1 2 3 4 6 6 7 0 О 0 0 0 NUL OLE SP 0 (Й) P P ПУС АР1 Про¬ бел 0 ю п ю л 0 О О 1 1 ЗОН VC1 \ 1 A Q a Я нз (СУЙ J 1 а я А. я 0 О 1 О 2 STX VC 2 >> 2 В R b r НТ (СУ2) >> 2 6 р 5 р 0 О 1 1 3 ЕТХ DC3 # 3 С S с s НТ (СУЗ) # 3 ц с Ц С 0 1 0 О 4 EOT STOP a 4 V T d t НП СТП XX 4 д т Д т 0 1 О 1 5 ENQ NAK % 5 E U e и НТМ НЕТ % 5 е У Е У 0 1 1 О 6 ACM SYN & 6 F V f 1/ ДА СИН А 6 Ф ж Ф ж 0 1 1 1 7 BEL ETB V 7 G w 9 IV ЗВ НБ г 7 г 6 Г в 1 О 0 О 8 BS CAN ( 8 H'- X h X ВШ АН с 8 X ь X ъ 1 О с 1 9 НТ EM > 9 I Y i 8 ГТ НИ ) 9 U ы И ы 1 О 1 О Ю LF SUB * J Z j 2 ПС ЗМ * 0 ■3 и 3 1 О 1 4 / 11 VT ESC + j К Г к { ВТ АР2 + ; к ш н ш 1 1 0 0 12 FF IS4(fS) » < L \ I 1 ПФ РИ4(РФ) > < л э л 3 1 1 О 1 13 CR IS3(GS) - = M J /7? 1 вн РИЗ(РГ) - = м щ м их 1 1 1 0 14 SO IS2(R5) • > N n - РУС PU2(fO) > н ч н V 1 1 1 1 15 SI [SI Ш / ? 0 - 0 DEL ЛАТ РИКРЭ) / ? О ъ*> О 3-5 ^Допускается ,,—> ” (логическое .. НЕ '7 Z) Допускается прописная буква „ Ъ " 207
ПРИЛОЖЕНИЕ 4 Внутримашинный код ДКОИ Зон слъмао группа — - ■ 0 2 '~о о\ 0 О о" (/ 0 0 0 0 0 / JL_. _ о 7 JJ 1 1 JL. 1 1 / 7 1 ~7 0 4 О 1 1 / 7 7 _о_ 7? 1 О 1 0 1 7 ~0 7 , 0 0 0 7 7 0 1 0 7 0 О / 0 1 77 1 1 "~в~1 7| | V 3 4 5 6 7 и 1 У м 4 5 6 7 8 ! ~'з~ ~/Г! ’ ~С В Е Г 0 0 ь О 0 ПУС АР1 ДбЬ \Д1б ■Ъо(ел — Ц й я \ ь { } \ О 0 0 О 1 1 нз СУ1 Д01 дп / а j — ы А J Д31 / 0 0 1 0 2 НТ СУ2 ДО2 \СИН Ъ К б' 3 \ В к S 2 0 0 1 1 3 КТ СУЗ ДОЗ j Д19 С L t ш С L т л_ 0 1 0 О 4 Д28 Д2Э Д04 Д20 Д m и у д м и ~ 4 0 1 0 7 5 ГТ Д05 ПС Д21 е п V м Е N V 5 0 1 / G 6 Д06 ВШ КБ Д22 ю f о W Ч ~У~\ 0 W 6 0 I ; 1 7 36 ДОТ АР2 кп 9 Р X ъ2-' б_ Р ! X 7 1 0 0 О 8 Д23 АН Д08 Д24 б h Я У ю "н О ! у 1 0 0 1 9 Д13 КН ДОЗ Д25 Л i г 2 I R 2 " 9 1 0 1 0 А ЛИ Д18 дю Д26 [ J I d к Б 3 1 0 1 7 е ВТ Д15 ДП Д27 • а » # л Ц И У Ш 1 1 О ~о с ПФ РФ дп СТП < * °/о (S) Ф м т Д Й П Ж Э 1 / О 1 V вк РГ ктм НЕТ ( - г г н Я ш. 7 7 7 0 £ РУС РЗ ДА ДЗО + > > = Ж Ф л Ь Ч 1 1 7 / F ЛАТ РЗ ЗВ зм 1 л1> ? ” и п 8 Г Ы i 36 Допускается—« (логическое ,, НЕ ") Допускаsn~c.p прописная бук 8а ,, Ъ ПРИЛОЖЕНИЕ 5 Макрокоманды управления данными Макрокоманда QSAM BSAM В PAM QISAM BISAM BDAM BLDL + BSP — + — — — — BUILD + + + + -b + BUILDRCD + — — — — — CHECK — + + — + + CLOSE + -b •f + + + CNTRL + + — — — — DCB + + + + + -I- DCBD + + + + 4- ESETL — — — + — FEOV + — — — — FIND — — -h — — — FREEBUF — + + — + + FREEDBUF — — — — + 4- FREEPOOL + + + + -b -I- GET + — — + — — GETBUF — + -i- — -i- -L GETPOOL + + + 4- -t- 4- NOTE — + + — — — OPEN + + + + л_ 4- POINT — + — — — PRTOV + + — — — — PUT + — — + — — PUTX + — — + — — READ — + + — -b 4- 208
П родолжекис Макрокоманда QSAM BSAM BP AM Q1SAM BISAM В DAM RELEX + RELSE + — — 4- — — SETL — — — + — — STOW — — + — — — SYNADAF + 4- + + + + SYNADRLS 4- 4- + 4- + + TRUNC + — — — — — WAIT — + + — + + WRITE — + + — + + Примечание. Знак « + » обозначает использование макрокоманды соответ¬ ствующим методом доступа. П Р И Л О Ж Е Н И Е 6 Операнды макрокоманды DCB Операнд Метод доступа QSAM BSAM BP AM QISAM BISAM BDAM BFALN + + 4- 4- 4- + BFTEK + + — — — + BLKSIZE + + 4- 4- — 4- BUFCB + 4- + 4- 4- 4- BUFL + 4- 4- 4- + 4- BUFNO + 4- 4- 4- 4- 4- CYLOFL — — — 4- — — DDNAME + 4- 4- 4- 4- DEVD + + — — — — DSORG + + 4- 4- + 4- EODAD + 4- 4- 4- — V EROPT + — — — — — EXLST 4- 4- 4* 4- 4- KEYLEN — 4- + + — 4- L1MCT — — — — — 4- LRECL + 4- 4- + — — MACRF 4- + 4- 4- 4- 4- MSHI — — — — -j_ — MSWA — — — — -b — NCP — 4- 4- — 4- — NTM — — — 4- — — OPTCD + 4- 4- 4- — 4- PECFM 4- 4- 4- + — 4- RKP — — — 4- — — SMS I — — — — 4- — SMSW — — — — 4- — SYNAD + 4- + + 1- 4- Примечания: 1. Знак « + » обозначает использование операнда соответствующим методом доступа. 2. Операнд BLKSIZE^32 760 байтов. 3. Операнд DEN используется только для магнитных лент. 4. Операнд CODE используется только для перфолент. 5. Оператор PRTSP используется только для АЦПУ. 6. Операнды MODE и STACK используются для перфокарточлых устройств. 14. Заказ 3414 . 209
СЛОВАРЬ ТЕРМИНОВ Асинхронный — лишенный регуляр¬ ной временной зависимости; момент возникновения асинхронного события во время выполнения последователь¬ ности команд программы нельзя пред¬ сказать. Базисный метод доступа — метод доступа, использующий макрокоман¬ ды READ и WRITE для перемеще¬ ния данных между оперативной па¬ мятью и периферийными устройства¬ ми и возлагающий на программиста ответственность за буферизацию и синхронизацию операций ввода-вы¬ вода с выполнением программы. Ба¬ зисный метод доступа позволяет об¬ рабатывать наборы данных на уров¬ не физических блоков. Библиотека — библиотечный набор данных. Библиотека задания — библиотеч¬ ный набор данных, указанный прог¬ раммистом на языке управления за¬ даниями и используемый в качестве первичного источника загрузочных модулей для данного задания. Библиотека пункта задания — биб¬ лиотечный набор данных, указанный программистом на языке управления заданиями и используемый в качест¬ ве первичного источника загрузочных модулей для данного пункта задания. Библиотечный набор данных — не¬ зависимые группы последовательно организованных данных, каждая из которых идентифицируется в оглав¬ лении именем. Блок (блок записей) — физическая единица данных, которая может со¬ держать одну или несколько логиче¬ ских записей или быть частью логи¬ ческой записи. Размер блока опреде¬ ляется физическими свойствами уст¬ ройств или средств передачи инфор¬ мации. Блок управления (или управляю¬ щий б/!ок)—таблица, содержащая управляющую информацию опреде¬ ленного типа. Блок управления данными (DCB) — блок управления, через который пере¬ дается необходимая информация программам методов доступа для ор¬ ганизации поиска, запоминания, вво¬ да и вывода данных. Блок управления набором данных (DSCB) — метка набора данных на томе прямого доступа. Блок управления событием (ЕСВ) — блок управлении, используемый для представления состояния события. Буфер — часть оперативной памя¬ ти, в которую вводятся данные или из которой данные выводятся. Внешняя ссылка — ссылка на имя, определенное в другом модуле. Вспомогательная память — см. Пе¬ риферийная память. Входная очередь заданий — очередь суммарных сведений об операторах языка управления заданиями, орга¬ низованная планировщиком заданий, из которой он выбирает задания и пункты задания для обработки. Входная точка — см. Точка входа. Входной поток заданий — последо¬ вательность управляющих операторов и данных, поступающих в операцион¬ ную систему с устройства системного ввода, специально выделенного для этой цели оператором. Выборка программ — поиск прог¬ раммы в библиотеке и загрузка ее в оперативную память с настройкой па месту, если это необходимо. Вычислительная система — сово¬ купность аппаратных и программных средств, позволяющих использовать вычислительную установку для реше¬ ния определенных задач; другими словами, это совокупность техниче¬ ских средств ЭВМ и математического обеспечения. Вычислительная установка — об¬ щий термин для обозначения отдель¬ ной вычислительной системы и лиц, которые с ней связаны (пользовате¬ ли, управляющий и обслуживающий персонал). Выходная очередь — очередь из управляющей информации, описыва¬ ющей системные выходные наборы данных для программы системного Еывода. Выходной поток — сообщения и другие данные, выдаваемые операци¬ онной системой и программой обра¬ ботки на устройства системного выво¬ да, выделенные оператором для этой цели. Главный планировщик — компонент управляющей программы, который отвечает на команды оператора, воз¬ буждает действия, которые запраши¬ вались в командах, выдает требуемую или запрашиваемую информацию и, 210
таким образом, является средством для управления работой вычислитель¬ ной системы. Граничный приоритет — максималь¬ ное значение диспетчерского приори¬ тета. Динамическая область — часть опе¬ ративной памяти, которая подразде¬ лена на зоны или разделы для ис¬ пользования программами пунктов заданий и системными задачами. Диспетчерский приоритет — число, присвоенное задачам и использую¬ щееся для определения порядка, в котором они получают управление, если одновременно обслуживается много задач. Загрузочный модуль (модуль за¬ грузки) — результат работы редакто¬ ра связей, программа в формате, при¬ годном для загрузки в основную па¬ мять для выполнения. Загрузчик — системная обрабаты¬ вающая программа, которая объеди¬ няет функции редактора связей и программы выборки в одном пункте задания. Она осуществляет загрузку программы в оперативную память. Загрузочные модули при этом в биб¬ лиотеку не записываются. Задание — выполнение вычислений для некоторого применения, включаю¬ щее одну или несколько связанных программ. Задача — программа или часть про¬ граммы, выполняемая одновременно с другими задачами. Для супервизо¬ ра задача является основной едини¬ цей работы. Задача пункта задания — задача, образованная при инициировании пункта задания. Инициатор — программа планиров¬ щика заданий, выбирающая задания и пункты заданий для выполнения, а также распределяющая устройства ввода-вывода для них. Инициатор передает управление программам пункта задания, завершает выполне¬ ние программ пунктов задания и пе¬ редает выходные наборы данных про¬ граммам системного вывода. Исходный модуль — серия выска¬ зываний на символическом языке программирования, которая представ¬ ляет входные данные для однократ¬ ного выполнения Ассемблера или компилятора. Каталог — набор данных, содержа¬ щий информацию о каталогизирован¬ ных наборах данных, такую, как имя набора данных, его местоположение в периферийной памяти и т. д. Ката¬ лог позволяет обращаться к набору данных, используя одно его имя. Каталогизированная процедура — набор операторов языка управления заданиями, помещенный в специаль¬ ный набор данных, имеющий назва¬ ние SYS1.PROCLIB; каталогизиро¬ ванная процедура может быть вызва¬ на по имени оператором ЕХЕС. Каталогизированный набор дан¬ ных — набор данных, имя и местопо¬ ложение которого занесены в каталог системы. Квантование времени — возмож¬ ность, которая позволяет указать, что задачи из группы квантующихся должны использовать центральный процессор в течение равных, заранее определенных интервалов времени, задаваемых либо при генерации, либо при начальной загрузке системы. Класс задания — параметр в опе¬ раторе JOB, который позволяет опре¬ делить тип задания и направить за¬ дание в ту очередь заданий, которая связана с указанным классом. Код возврата — значение, которое по системному соглашению заносится в определенный регистр (регистр кода возврата), когда программа завер¬ шается. Значение кода может влиять на выполнение дальнейших программ, а в случае аварийного завершения задачи — оно может быть напечатано для анализа программистом. Команда оператора — предложе¬ ние, которое управляющая програм¬ ма получает с консоли пишущей ма¬ шинки пульта и которое заставляет управляющую программу выполнять действия, заданные в команде. Личная библиотека — библиотеч¬ ный набор данных, не являющийся общей библиотекой. Макрокоманда — один из видов высказываний языка Ассемблера. Для каждого вхождения макрокоманды в исходную программу Ассемблер вы¬ рабатывает последовательность вы¬ сказываний в соответствии с макро¬ определением. Выработанная после¬ довательность обрабатывается затем подобно другим высказываниям язы¬ ка Ассемблера. Макроопределение — набор выска¬ зываний, содержащий информацию о мнемоническом коде операции и фор¬ мате макрокоманды, а также набор высказываний, в соответствии с кото¬ 211
рым Ассемблер вырабатывает после¬ довательность высказываний при каждом появлении макрокоманды в исходной программе. Макроопреде¬ ление может находиться в библиоте¬ ке макроопределений (системное мак¬ роопределение) и использоваться все¬ ми программами на языке Ассембле¬ ра. Кроме того, макроопределение может находиться в тексте исходной программы (макроопределение поль¬ зователя). Метка набора данных — совокуп¬ ность информации, описывающей свойства набора данных, обычно за¬ поминаемой вместе с набором дан¬ ных; общий термин для обозначения управляющих блоков наборов данных в памяти прямого доступа и меток ленточных наборов данных. Метод доступа — способ перемеще¬ ния данных между оперативной па¬ мятью и периферийными устройства¬ ми. Метод доступа с очередями — ме¬ тод доступа, использующий макро¬ команды GET и PUT для перемеще¬ ния данных между оперативной па¬ мятью и периферийными устройства¬ ми и осуществляющий автоматиче¬ скую буферизацию и синхронизацию операций ввода-вывода с выполнени¬ ем программы. Метод доступа с оче¬ редями позволяет обрабатывать набо¬ ры данных на уровне логических за¬ писей. Модуль — дискретный програм¬ мный блок, обрабатываемый одно¬ кратным выполнением Ассемблера, транслятора или редактора связей. Модуль загрузки — см. Загрузоч¬ ный модуль. Мультипрограммирование — общий термин, обозначающий использование вычислительной системы для однов- ;ременного выполнения двух или бо¬ лее программ, находящихся в опера¬ тивной памяти. Набор данных — основная едини¬ ца данных, обрабатываемая опера¬ ционной системой, представляющая собой поименованную совокупность данных, имеющих определенную ор¬ ганизацию. Независимость от устройств — спо¬ собность управлять операциями вво¬ да-вывода безотносительно к харак¬ теристикам устройств ввода-вывода. Обрабатывающая программа — программа, способная работать в ре¬ жиме проблемной программы. Сюда входят обрабатывающие программы, входящие в состав операционной сис¬ темы (см. Системные обрабатываю¬ щие программы), и программы, напи¬ санные пользователями (см. Прог¬ раммы пользователя). Общая библиотека — общедоступ¬ ный библиотечный набор данных, ко¬ торый используется (если не специ¬ фицируется что-либо другое) для выборки загрузочных модулей, на ко¬ торые производится ссылка в опера¬ торах ЕХЕС и в. макрокомандах ATTACH, LINK, LOAD и XCTL. Объектный модуль — результат об¬ работки компилятором исходного мо¬ дуля. Объектный модуль является входной информацией для редактора связей. Он состоит из одной или не¬ скольких программных секций в пе¬ ремещаемой, по еще не пригодной для выполнения форме, и соответствую¬ щего управляющего словаря. Оверлейная структура — структура загрузочного модуля, который был разделен на перекрывающиеся сег¬ менты и получил от редактора свя¬ зей информацию, позволяющую су¬ первизору осуществить необходимую загрузку сегментов. Оглавление тома — таблица на то¬ ме прямого доступа, описывающая содержимое тома. Оперативная память (или основ¬ ная память) — непосредственно ад¬ ресуемая память, из которой выбира¬ ются команды для выполнения, опе¬ ранды, загружаются регистры и т. д. Оператор задания (или оператор JOB) — управляющий оператор во входном потоке заданий, который идентифицирует начало серии опера¬ торов на языке управления задания¬ ми для одного задания. Оператор определения данных (или оператор DD) — оператор языка уп¬ равления заданиями, который описы¬ вает набор данных, связанный с оп¬ ределенным пунктом задания. Оператор пункта задания (опера¬ тор ЕХЕС) — оператор языка управ¬ ления заданиями, являющийся пер¬ вым оператором пункта задания. Он идентифицирует загрузочный модуль или каталогизированную процедуру, которую необходимо выполнить. Организация данных — термин, ко¬ торый относится к любому из согла¬ шений, принятому в управлении дан¬ ными об организации данных. 212
Основная память — ал. Оператив¬ ная память. Очередь заданий —см. Влодпая очередь заданий. Пакетная обработка — режим ис¬ пользования в ы числит ел ьпо й м а ш i \ - ны, при котором задания группиру¬ ются и веодятся в систему. Система автоматически обрабатывает задания и переходит от одного задания к дру¬ гому. Режим пакетной обработки от¬ личается от других режимов тем, что обработка заданий выполняется неза¬ висимо от времени и событий, возни¬ кающих вне системы. Псевдоним (или альтернативное имя)—дополнительное имя, которое можно использовать для обозначения отдельного раздела библиотечного набора данных; дополнительная точ¬ ка входа, с которой может начинать¬ ся выполнение программы. Периферийная память (или вспо¬ могательная память) — память, не являющаяся оперативной; запомина¬ ющие устройства на магнитных дис¬ ках, магнитных лептах, магнитных барабанах и т. д. Планировщик — общий термин для обозначения планировщика заданий и главного планировщика. Планировщик заданий — часть уп¬ равляющей программы, которая уп¬ равляет входными потоками заданий и системным выводом, распределяет устройства ввода-вывода для зада¬ ний и пунктов заданий, инициирует задачу пункта задания; другими сло¬ вами, регулирует использование вы¬ числительной системы заданиями. Повторно используемый — свойство загрузочного модуля, которое позво¬ ляет одну и ту же копию программы использовать двумя или несколькими задачами при условии, что запросы на использование будут удовлетво¬ ряться строго последовательно. Подзадача — задача, которая обра¬ зуется другой задачей по макроко¬ манде ATTACH. Пользовательские программы — об¬ рабатывающие программы, написан¬ ные пользователями. Проблемная программа — програм¬ ма, разработанная для решения оп¬ ределенной задачи, для решения ко¬ торой в конечном итоге предназначе¬ на вычислительная система. Проб¬ лемные программы выполняются в состоянии ПРОБЛЕМА и пользуют¬ ся услугами управляющих программ. Программа инициализации ядра— это программа, которая подготавли¬ вает ядро к работе. С се помощью можно изменить некоторые парамет¬ ры, специфицированные во время ге¬ нерации системы. Оператор задает эти изменения через консоль (пишу- щу ю м а 1 и и н к у п у л ьта). Программа начальной загрузки — программа, получающая управление при выполнении процедуры началь¬ ной загрузки. Программа начальном загрузки загружает в оперативную память ядро и программу инициали¬ зации ядра. Программа пользователя — см. Пользовательские ‘ программы. Программа прямого системного вы¬ вода— программа планировщика за¬ даний, которая управляет выводом выходных наборов данных задания непосредственно на устройство выво¬ да во время выполнения задания. Программа может быть использова¬ на только в мультипрограммных ре¬ жимах. Программа системного ввода — программа планировщика заданий, которая производит ввод и интерпре¬ тацию входного потока задании. Программа системного вывода — программа планировщика заданий для вывода выходных данных на устройства системного вывода. Программная секция — наимень¬ шая, отдельно размещаемая часть программы, т. е. такая часть програм¬ мы, которая определяется как единое целое и все элементы которой долж¬ ны загружаться в смежные ячейки оперативной памяти. Процедура начальной загрузки — процедура, осуществляющая загрузку и настройку ядра операционной систе¬ мы и подготовку системы к рабою. Прямой доступ — выборка или за¬ поминание данных по их местораспо¬ ложению в томе, а не относительно ранее выбиравшихся или запоминав¬ шихся данных. Пункт задания (или шаг зада¬ ния)— объем работы, который свя¬ зан с одной программой обработки и соответствующими данными. Ката¬ логизированная процедура может включать много пунктов заданий. Раздел —часть динамической обла¬ сти, которая выделяется пункту зада¬ ния или системной задаче. Регистр кода возврата — регистр, идентифицируемый по системному со¬ 213
глашению, в который заносится код завершения программы. Редактор связей — системная обра¬ батывающая программа, вырабатыва¬ ющая загрузочный модуль путем пре¬ образования объектных модулей в формат, приемлемый для загрузки модуля в оперативную память, ком¬ бинирования отдельно полученных объектных модулей и ранее обрабо¬ танных загрузочных модулей в еди¬ ный загрузочный модуль, определения значений символических перекрестных ссылок, замещения и добавления про¬ граммных секций автоматически по запросу, обеспечения возможности перекрытия для модулей, которым это требуется. Редактор связен поме¬ щает загрузочные модули в библио¬ теку. Реентерабельный — свойство загру¬ зочного модуля, позволяющее одну и ту же копию загрузочного модуля ис¬ пользовать одновременно двумя или большим количеством задач. Резидентный том системы — том, в котором размещаются ядро операци¬ онной системы и каталог системы или та его часть, которая является вхо¬ дом в каталог. Сегмент — наименьшая функцио¬ нальная единица (одна или несколь¬ ко секций), которая может быть за¬ гружена как логическое целое во вре¬ мя выполнения оверлейной програм¬ мы. Системная задача — задача, обра¬ зованная для выполнения функций у я р а в л я ющей п р о г р а м м ы. Системные обрабатывающие про¬ граммы — обрабатывающие програм¬ мы, входящие в состав операционной системы: трансляторы, сервисные и обслуживающие программы и т. д. Событие — момент, наступление ко¬ торого является существенным для выполнения задачи; обычно оконча¬ ние какой-либо асинхронной опера¬ ции, например операции ввода-выво¬ да. Супервизор — программа, которая распределяет, планирует и управляет использованием системных ресурсов. Программы супервизора выполняют¬ ся в состоянии СУПЕРВИЗОР. Сцепление наборов данных — сово¬ купность наборов данных, логически связанных в одни набор данных на уровне операторов DD языка управ¬ ления заданиями. 2*4 Текущий приоритет — см. Диспет¬ черский приоритет. Транслятор — общий термин для обозначения Ассемблера, компилято¬ ра или другой программы, которая, используя предложения на одном языке, вырабатывает эквивалентные предложения на другом языке. Том — физическая единица носите¬ ля данных (пакет дисков, магнитный барабан, бобина магнитной ленты). Точка входа — некоторая точка (или адрес) в программе, в которую может быть передано управление из другой программы. Управление данными — общий тер¬ мин, обозначающий функции управля¬ ющей программы, которые обеспечи¬ вают как обращение к наборам дан¬ ных, так и выполнение соглашении о наборах данных и регулируют ис¬ пользование устройств ввода-вывода. Управление задачами — общий тер¬ мин, описывающий совокупность фун¬ кций управляющей программы, кото¬ рые регулируют использование зада¬ чами центрального процессора и дру¬ гих ресурсов. Управляющая программа — общин термин для обозначения всех прог¬ рамм операционной системы, предназ¬ наченных для управления ресурсами, реализации различных организаций данных и обмена данными. Управляющий блок — см. Блок уп¬ равления. Устройство системного ввода — уст¬ ройство ввода, предназначенное для входного потока заданий. Устройство системного вывода — устройство вывода, используемое для вывода выходных данных всех зада¬ ний программой системного вывода. Участок (или экстент)—физически непрерывное пространство па томе прямого доступа, распределение для набора данных или его части. Физическая запись — см. Блок. Фиксированная область — та часть оперативной памяти, которую зани¬ мает резидентная часть управляющей программы (ядро). Шаг задания — см. Пункт задания. Экстент — см. Участок. Ядро — та часть управляющей про¬ граммы, которая загружается в фик¬ сированную область основной памяти из набора данных SYS1. NUELEUS во время процедуры начальной за¬ грузки и никогда не перекрывается другой частью операционной системы,
ОГЛАВЛЕНИЕ Предисловие . , 3 1. Общие сведения о системе математического обеспечения ЕС ЭВМ ... 5 1.1. Модели ЕС ЭВМ 5 1.2. Особенности системы математического обеспечения ЕС ЭВМ . . . 7 1.3. Операционные системы ЕС ЭВМ 10 1.4. Операционная система ОС-10 ЕС 12 1.5. Малая операционная система МОС ЕС . . 13 1.6. Дисковая операционная система ДОС ЕС 15 1.7. Операционная система ОС ЕС 17 1.8. Комплекс программ технического обслуживания 25 1.9. Пакеты прикладных программ . . 25 2. Операционная система ОС ЕС. Общие сведения 27 2.1. Основные составные части операционной системы ОС ЕС. Подго¬ товка системы к работе 27 2.2. Разработка программ 29 2.3. Методы комбинирования программ . . 33 2.4. Структуры программ . . 34 2.5. Повторное использование программ . , 39 2.6. Мультипрограммирование . . __41 2.7. Задание, пункт задания, задача -43 2.8. Обработка потоков заданий . 45 2.9. Режимы работы управляющей программы .... . 51 3. Язык управления заданиями ... .53 3.1. Общие сведения ... 58 3.2. Оператор задания ... 6i 3.3. Оператор пункта задания 65 3.4. Операторы описания данных 70 3.5. Операторы процедуры и конца процедуры 90 3.6. Процедуры 91 3.7. Операторы команд, комментариев, ограничительные и пустые опе¬ раторы 93 3.8. Примеры использования операторов языка управления заданиями. 93 4. Супервизор .96 4.1. Общие сведения ... 96 4.2. Соглашения о связях ... 97 4.3. Регистры связи ... 98 4.4. Сохранение регистров ... 99 4.5. Передачи управления ... 102 4.6. Распределение основной памяти . . ... 115 4.7. Образование подзадач ... 121 4.8. Организация повторного использования ресурсов . . ... 128 5. Организация данных 133 5.1. Основные понятия 133 5.2. Форматы логических записей 134 5.3. Организация данных на перфокартах . 136 235
5.4. Организация данных на перфоленте 13/ 5.5. Организация данных на магнитной ленте 138 5.6. Организация данных на томах прямого доступа 141 0. Управление наборами данных . . 147 6.1. Понятие метода доступа 147 6.2. Блок управления данными 148 Г 6.3. Буфер и буферный пул 154 6.4. Построение буферного пула 155 6.5. Управление буферами 156 6.6. Работа с последовательными наборами данных 158 6.7. Структура библиотечного набора данных . . . . 160 6.8. Методы работы с библиотеками 161 6.9. Структура индексно-последовательного набора данных и методы работы с ним 164 6.10. Структура наборов данных с прямой организацией и методы рабо¬ ты с ними 170 7. Особенности реализации языков программирования Алгола-60, Фортра¬ на IV, Кобола и ПЛ/1 для ОС ЕС ЭВМ 175 7.1. Структура системы программирования 175 7.2. Фортран IV ОС ЕС 175 7.3. Алгол-60 ОС ЕС 185 7.4. Кобол ЕС 187 7.5. ПЛ/1ЕС . . 189 7.6. Особенности компиляции - 190 7.7. Каталогизированные процедуры компиляторов 133 7.8. Соглашения об объектном модуле 135 7.9. Редактор связей 200 Приложения . . . , 206 Словарь терминов . 210 СИСТЕМА МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ ЕС ЭВМ Научный редактор Л. Д. Райков Редактор Л. Д. Григорьева Техн. редактор Г. А. Сидорова. Корректор Я. Б. Островский Худ. редактор Т. В. Стихно Переплет художника Э. С. Эрмана Сдано в набор 20/IV 1974 г. Подписано к печати 15/VIII 1974 г. Формат бумаги 60x90/16. Бумага №ч3.Объем 13,5 печ. л. Уч.-изд. л. 14,85. Тираж 100 000 экз. А 10714. (Тематич. план 1974 г. № 73). Заказ № 3414. Цена в переплете 87 коп., в обложке 75 коп. Издательство «Статистика», Москва, ул. Кирова, 39 Областная типография управления издательств, полиграфии и книжной торговли Ивановского облисполкома, г. Иваново-8, ул. Типографская, 6.
СТАТИСТИКА 1974