Операционные системы и программное обеспечение на платформе zSeries

Средства разработки и управления приложениями

Разбить на страницы
Показывать лекцию целиком

В состав z/OS входят все необходимые средства, с помощью которых можно создавать, модифицировать, хранить и распространять новое прикладное программное обеспечение на различных языках программирования, включая HL Assembler и языки высокого уровня (High Level Languages), такие как С, С++, COBOL, PL/1, Fortran, Ada, Java и др. Помимо базовых средств разработки, включающих набор компиляторов, редакторы связей и средства загрузки программ, в z/OS реализована универсальная языковая среда Language Environment, содержатся многочисленные библиотеки программ и классов, представлен менеджер сопровождения разработки программного обеспечения (ISPF/SCLM). Кроме того, выпускается целый ряд продуктов, таких как IBM Visual Age, IBM Application Development Tool, которые поставляются вне z/OS и служат для автоматизации и повышения эффективности процесса разработки приложений.

Базовые средства создания программ

На рис. 5.59 представлены классическая последовательность этапов и базовые средства разработки программного обеспечения в операционной системе z/OS .

Исходный модуль, содержащий текст программы на одном из поддерживаемых языков программирования, может быть создан средствами TSO/ISPF/UNIX shell или подготовлен, а затем импортирован с рабочей станции. Для размещения исходного модуля может быть использован последовательный или библиотечный (PDS, PDSE) набор данных или файл z/OS UNIX. Компиляция исходного текста программы осуществляется встроенным языковым компилятором или ассемблером. z/OS включает как новые 64-разрядные компиляторы для таких языков, как, например, С/С++ и Cobol, так и множество старых версий. Компиляторы, которые могут запускаться как в пакетном, так и в интерактивном режиме, формируют объектный модуль, содержащий откомпилированный код и необходимые вспомогательные таблицы. Объектные модули обычно размещаются в наборе данных (библиотеке объектных модулей) или файле UNIX для последующего связывания с другими объектными модулями, размещенными в системных или пользовательских библиотеках. Компиляторы языков С/С++ и Cobol, а также HL Assembler дают возможность получить объектные модули расширенных форматов XOBJ или GOFF (Generalized Object File Format), допускающих использование длинных внешних имен (до 32767 байт).

(рис 5.59) Базовые средства разработки приложений в z/OS

Процедура редактирования связей (link edit) объединяет все необходимые объектные модули в единый загрузочный модуль, готовый к выполнению. Для хранения загрузочных модулей создаются специальные PDS- или PDSE-библиотеки, использующие формат записей RECFM=U. Ранее отмечалось, что в конфигурации z/OS обычно предусматривается несколько системных библиотек загрузочных модулей ( SYS1.LINKLIB и др.), описываемых в разделе LNKLST реестра SYS1.PARMLIB.

z/OS включает два редактора связей: стандартный Linkage Editor и усовершенствованный Program Management Binder (или просто BinderПроисходит от англ. bind - связывать. ). Стандартный редактор связей служит для построения загрузочных модулей "старого" формата, ориентированных на размещение в PDS-библиотеках и поддерживающих только 24- и 31-разрядные режимы адресации с ограничением общего объема кода в 16 MB. Binder обеспечивает возможность связывания объектных и загрузочных модулей в загрузочные модули нового формата - программные объекты (program object). Программные объекты включают все возможности стандартных загрузочных модулей и, кроме того, поддерживают режим 64-разрядной адресации и объектные модули расширенного формата, а также допускают увеличение объема кода до 1 GB. Программные объекты могут размещаться только в библиотечных наборах данных типа PDSE или в файлах HFS UNIX. Отметим, что Binder позволяет также создавать стандартные загрузочные модули, размещаемые в PDS, а с помощью утилиты IEBCOPY можно производить преобразование загрузочных модулей в программные объекты и обратно.

На этапе редактирования связей программный объект можно настроить определенным образом с помощью специальных параметров (опций), среди которых следует выделить следующие:

  • AMODE - устанавливает используемый режим адресации (24, 31 или 64 бит);
  • RMODE - устанавливает область размещения в адресном пространстве (ниже границы 16 MB или произвольно);
  • REUS - устанавливает режим повторного использования (реентерабельный, используемый последовательно, обновляемый).
  • Редактор связей и Binder позволяют создавать динамические загрузочные модули (программные объекты), которые во время выполнения могут обращаться к внешним модулям с помощью макровызовов LOAD, LINK, XCTL, ATTACH.

    Готовая к выполнению программа (загрузочный модуль или программный объект) запускается на выполнение универсальной программой загрузчиком (Program Management Loader). Загрузчик производит размещение программы в виртуальном адресном пространстве и подготавливает ее к выполнению, осуществляя настройку адресных констант. Обычно сразу же после загрузки программа получает управление, то есть начинает выполняться под управлением ОС.

    Как видно из рис. 5.59, существует возможность выполнять загрузку программ, минуя стадию сохранения загрузочного модуля (программного объекта) в библиотеке. Для этой цели может использоваться Binder или же специальный пакетный загрузчик (Batch Loader), который на основе объектного модуля строит загрузочный модуль "старого" формата и размещает его в виртуальной памяти.

    Универсальная языковая среда Language Environment

    Базовый компонент z/OS Language Environment (LE) поддерживает единую универсальную среду выполнения (run-time environment) для приложений, созданных на языках программирования высокого уровня (HLL) C/C++, COBOL, PL/1 и Fortran . Языковая среда LE включает наиболее существенные и часто используемые сервисы времени выполнения, такие как формирование сообщений, обработка событий, управление памятью, поддержка функций даты и времени и т.п. Эти сервисы доступны всем приложениям, независимо от используемого языка программирования. Кроме того, LE упрощает взаимодействие между приложениями, написанными на разных языках или для разных операционных сред, за счет специальных интерфейсных средств.

    Языковая среда z/OS V1R4 поддерживает приложения, полученные с помощью следующих версий компиляторов:

  • z/OS C/C++, C/C++ Compiler for MVS/ESA, AD/Cycle C/370 Compiler;
  • Enterprise COBOL for z/OS and OS/390, COBOL for OS/390 VM, COBOL for MVS VM;
  • Enterprise PL/I for z/OS and OS/390, PL/I for MVS VM, VisualAge PL/I for OS/390;
  • VS Fortran, Fortran IV;
  • VisualAge for Java, Enterprise Edition for OS/390.
  • Приложения, написанные на HL Assembler, также могут использовать средства LE через соответствующие макровызовы.

    Языковая среда LE состоит из следующих элементов (рис. 5.60):

  • базовые программы (basic routines), обеспечивающие универсальную обработку сообщений, запуск и завершение программ, динамическое распределение памяти, обработку событий (в том числе ошибок) времени выполнения, взаимодействие между программами, написанными на разных языках;
  • общие библиотеки (common library service), содержащие набор модулей для поддержки математических функций и функций даты и времени, реализуемых на основе стандартного интерфейса вызовов функций LE (callable services);
  • специфические библиотеки (language specific RTL), содержащие модули, применяемые только для одного из поддерживаемых языков HLL.
  • (рис 5.60) Универсальная среда выполнения программ Language Environment

    Создаваемые с использованием универсальных модулей LE-приложения могут выполняться в различных операционных средах, включая как внутрисистемные (TSO, пакетный режим, UNIX shell), так и среды промежуточного слоя (DB2, CICS, IMS). Следует отметить, что программы, входящие в состав библиотек LE, делятся на две группы: резидентные и динамические. Резидентные программы при редактировании связей включаются в загрузочный модуль приложения. Они представлены в библиотечных наборах данных SCEELKED и SCEEBIND. К ним относятся, например, программы запуска и завершения. Динамические программы, размещаемые в библиотеках SCEERUN и SCEERUN2, не включаются в загрузочный код, а загружаются при вызове во время выполнения.

    Объединяя средства, доступные в программах, написанных на разных языках, Language Environment устанавливает единую универсальную модель среды выполнения приложений, основанную на целом ряде понятий и терминов, которые следует освоить программисту:

  • Enclave - программа (главная программа вместе с подпрограммами);
  • Routine - подпрограмма, функция;
  • Process - программный код, данные и ресурсы, связанные с выполняющейся программой;
  • Thread - поток, независимо диспетчеризуемая часть процесса;
  • Local data - локальные данные подпрограммы;
  • External data - данные, доступные для любых элементов анклава.
  • Средства разработки пакетного режима

    Традиционный способ разработки программ, применяемый программистами в течение десятилетий, основан на использовании средств пакетного режима, реализуемых в сеансе TSO/E или ISPF/PDF. Ключевым элементом данного способа является использование стандартных процедур JCL, хранящихся в системной библиотеке SYS1.PROCLIB и предназначенных для компиляции, редактирования связей и исполнения различных HLL-программ. В таблице 5.9 представлен список некоторых таких процедур.

    Стандартные процедуры для разработки приложений
    Язык программированияКомпиляцияКомпиляция и редактированиеКомпиляция, редактирование и выполнение
    HL Assembler ASMAC ASMACL ASMACLG
    C++ CBCC CBCСB, CBCCL CBCCBG, CBCCLG
    C EDCC EDCСB, EDCСL EDCCBG, EDCСLG
    COBOL IGYWC IGYWCL IGYWCLG
    Pl/1 IEL1C IEL1CL, IBMZCB IEL1CLG, IBMZCBG

    Процедуры, предназначенные только для компиляции (имя процедуры заканчивается символом "C"- Compile), служат для создания и сохранения объектного модуля программы. Процедуры компиляции и редактирования служат для создания загрузочного модуля и сохранения его в библиотеке. Символы "CL" или "CB" в имени процедуры указывают на применение соответственно стандартного редактора связей Linkage Editor или редактора Binder. Последняя группа процедур (имена заканчиваются на "CLG" или "CBG") предназначена для выполнения программы, представленной в исходном коде, причем объектный и загрузочный модули могут не сохраняться в постоянных наборах данных.

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

    Процедура ASMACLG состоит из трех шагов. На первом шаге ( C ) вызывается компилятор ассемблера ASMA90, на втором шаге ( L ) - редактор связей IEWL, а на третьем ( G ) - запускается созданный загрузочный модуль. Процедура не содержит символических параметров, поскольку необходимые средства настройки доступны через модификацию DD и EXEC операторов. С помощью модификации операторов DD можно определить собственные наборы данных для размещения исходного текста программы ( C.SYSIN ), объектного ( C.SYSLIN ) и загрузочного ( L.SYSLMOD ) модулей, исходных данных программы ( G.SYSIN ). Для задания требуемого набора опций компилятора и редактора связей следует модифицировать параметр PARM соответствующего оператора EXEC ( PARM.C и PARM.L ).

    (рис 5.61) Каталогизированная процедура ASMACLG

    Рассмотрим некоторые варианты применения процедуры ASMACLG при разработке ассемблерных программ:

  • исходный модуль и исходные данные разрабатываемой программы представлены во входном потоке:
    //TEST	JOB	...
    //			EXEC	ASMACLG,PARM.C=LIST,PARM.L=NOMAP
    //C.SYSIN	DD *
    строки исходной программы
    ...
    /*
    //G.SYSIN	DD *
    исходные данные
    ...
  • исходный модуль и исходные данные представлены в заранее подготовленных каталогизированных наборах данных USER.ASM и USER.DATA:
    //TEST	JOB	...
    //			EXEC	ASMACLG,PARM.C=LIST,PARM.L=NOMAP
    //C.SYSIN	DD DSN=USER.ASM(PRG3),DISP=OLD
    //G.SYSIN	DD DSN=USER.DATA(TABL1),DISP=OLD
  • При работе в среде ISPF/PDF текст задания формируется с помощью текстового редактора EDIT. Запуск задания можно производить прямо из редактора с помощью команды SUBMIT. Отчет о выполнении задания можно получить и просмотреть либо с помощью утилиты Outlist, либо средствами компонента SDSF.

    Средства разработки программ в ISPF/PDF

    Наряду с традиционным способом создания приложений на основе пакетных заданий, ISPF/PDF поддерживает два специальных режима разработки, доступных через главное меню: интерактивный (Foreground) и пакетный (Batch). Эти режимы предназначены для компиляции исходных программ и получения объектных модулей для множества поддерживаемых в z/OS языков программирования (ассемблер, Fortran, COBOL, С/С++, PL/I, REXX, DTL и др.). Помимо средств компиляции, здесь доступны также интерактивные отладчики для языков COBOL и Fortran, редакторы связей (Binder и Linkage editor), а также утилита для определения связей между модулями программы (Member Parts List).

    Рассмотрим более подробно функцию 4 ISPF/PDF "Интерактивный режим" (Foreground), которая обеспечивает поддержку средств разработки программ в интерактивном режиме . Главная панель функции представлена на рис. 5.62. Пользователь может выбрать интересующую его программу, введя соответствующий номер в командную строку и нажав клавишу ВВОД. Если исходный набор данных упакован и выбранная функция поддерживает работу с упакованными данными (не отмечена звездочкой), предварительно следует установить переключатель Source Data Packed.

    (рис 5.62) Главная панель функции интерактивного режима (Foreground)

    Рассмотрим особенности использования компиляторов в интерактивном режиме на примере HL Assembler. В этом случае на главной панели следует ввести 1, нажать ВВОД и перейти к панели настройки параметров компиляции, представленной на рис. 5.63. Исходный текст программы для выбранного компилятора может быть представлен двумя способами: в виде раздела библиотеки ISPF или как произвольный набор данных (например, как последовательный набор данных).

    (рис 5.63) Панель настройки параметров ассемблера

    Если исходный модуль представлен в виде раздела библиотечного набора данных, существует возможность определить дополнительные исходные библиотеки, в которых могут находиться включаемые фрагменты текста (например, описываемые с помощью директивы INCLUDE ). Имена дополнительных исходных библиотек вводятся в поле Additional input libraries с использованием апострофов:

    ===" 'ABC.MACROS'

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

    Отчет (листинг), сформированный компилятором, будет размещен в наборе данных, имя которого выбирается автоматически в соответствии с шаблоном:

    [prefix.]userid.listid.LIST

    где prefix - префикс для наборов данных, установленный в пользовательском профиле TSO, userid - идентификатор пользователя, с которым он открыл сеанс работы, listid - имя, заданное пользователем в одноименном поле панели. Если префикс TSO совпадает с идентификатором пользователя, то квалификатор prefix не используется.

    Если исходный набор данных является последовательным, то поле List ID обязательно должно быть заполнено. Для раздела библиотечного набора данных значение listid по умолчанию совпадает с именем исходного раздела.

    Одно из полей панели предназначено для ввода параметров настройки (опций) используемого компилятора ( Assembler Options ). Следует обратить внимание, что для любого компилятора две опции считаются установленными по умолчанию:

  • опция OBJECT - требует сохранить объектный код в наборе данных;
  • опция LIST - требует сохранить выходной отчет в наборе данных.
  • Остальные опции устанавливаются в соответствии с допустимым перечнем, описанным в руководстве по соответствующему компилятору.

    После определения всех необходимых параметров следует нажать клавишу ВВОД. Через некоторое время в нижней части экрана появится сообщение:

    HIGH LEVEL ASSEMBLER STARTED
    ***

    Требуется вновь нажать клавишу ВВОД.

    При выполнении компиляции и ассемблирования автоматически создается сохраняемый объектный модуль. Если исходный модуль определен в виде раздела библиотеки ISPF c именем вида PROJECT.GROUP.TYPE(MEMBER), то объектный код будет записан в раздел MEMBER библиотечного набора данных с именем PROJECT.GROUP.OBJ. Если исходный модуль задан как произвольный набор данных, объектный модуль будет сформирован в наборе данных такого же типа и с таким же именем, только последний квалификатор имени примет значение OBJ.

    Если процедура компиляции завершится нормально, на экране автоматически будет отображен выходной отчет в режиме просмотра BROWSE. После выхода из режима просмотра пользователь может произвести обработку отчета с помощью утилиты печати ( Foreground Print Options ). Если же процедура компиляции завершится некорректно, будет выдано короткое сообщение о причине, и перехода в режим просмотра и печати отчета не произойдет.

    Особый интерес представляет использование в интерактивном режиме процедуры редактирования связей. Функция редактирования связей предназначена для получения загрузочного модуля на основе созданного на этапе компиляции объектного модуля и других объектных модулей, содержащихся в системных и пользовательских библиотеках. Панель настройки параметров редактирования связей представлена на рис. 5.64.

    (рис 5.64) Панель настройки параметров редактора связей

    Объектный код программы может быть задан двумя способами: в виде раздела библиотеки ISPF или как произвольный набор данных (например, последовательный набор данных). Дополнительные библиотеки объектных и загрузочных модулей, необходимые для работы редактора, задаются путем ввода их имен в поля, помеченные как SYSLIB и SYSLIN.

    В поле Linkage editor/binder options можно указать опции выбранного редактора связей. При этом следует иметь в виду, что ISPF всегда автоматически устанавливает следующие опции:

  • LOAD - требует сохранить загрузочный модуль в библиотечном наборе данных;
  • LIB - определяет последовательность обработки входных наборов данных;
  • PRINT - требует сохранить выходной отчет в наборе данных.
  • Тип используемого редактора связей (Binder или Linkage editor) задается с помощью списка выбора Processor. Значение поля List ID служит для формирования имени набора данных, содержащего листинг редактора связей. Имя формируется по шаблону [prefix.]userid.listid.LINKLIST в соответствии с правилами, изложенными выше.

    Создаваемый в результате загрузочный модуль будет размещен в наборе данных с именем, заканчивающимся квалификатором LOAD (по аналогии с образованием имен объектных модулей).

    Практически все описанные выше средства интерактивного режима доступны и при использовании функции 5 ISPF/PDF "Пакетный режим" (Batch), которая обеспечивает поддержку средств разработки программ в пакетном режиме (рис. 5.65). Основное отличие от интерактивного режима заключается в том, что терминал освобождается для выполнения другой работы сразу же после запуска пакетного задания.

    (рис 5.65) Панель настройки параметров ассемблера

    При вызове компилятора или редактора связей в пакетном режиме ISPF автоматически генерирует текст задания, включая в него все необходимые инструкции в соответствии с параметрами, определенными пользователем. Пользователь может непосредственно описать несколько инструкций, в том числе инструкцию JOB, работая с полями панели Job Statement Information.

    Отчет о выполнении задания может быть помещен в указанный набор данных или направлен на печать путем настройки в выбранной панели компилятора или ассемблера. Первая возможность связана с установкой параметра List ID и описана выше. Вторая возможность реализуется при вводе выходного класса задания в поле SYSOUT class. В этом случае просмотр отчета можно произвести с помощью утилиты Outlist или SDSF, как было описано выше.

    Выход из функции Batch с использованием команд END, RETURN или прямого перехода ( = ) приведет к автоматическому запуску сформированного задания ( SUBMIT ).

    Страницы:

    В состав z/OS входят все необходимые средства, с помощью которых можно создавать, модифицировать, хранить и распространять новое прикладное программное обеспечение на различных языках программирования, включая HL Assembler и языки высокого уровня (High Level Languages), такие как С, С++, COBOL, PL/1, Fortran, Ada, Java и др. Помимо базовых средств разработки, включающих набор компиляторов, редакторы связей и средства загрузки программ, в z/OS реализована универсальная языковая среда Language Environment, содержатся многочисленные библиотеки программ и классов, представлен менеджер сопровождения разработки программного обеспечения (ISPF/SCLM). Кроме того, выпускается целый ряд продуктов, таких как IBM Visual Age, IBM Application Development Tool, которые поставляются вне z/OS и служат для автоматизации и повышения эффективности процесса разработки приложений.

    Базовые средства создания программ

    На рис. 5.59 представлены классическая последовательность этапов и базовые средства разработки программного обеспечения в операционной системе z/OS .

    Исходный модуль, содержащий текст программы на одном из поддерживаемых языков программирования, может быть создан средствами TSO/ISPF/UNIX shell или подготовлен, а затем импортирован с рабочей станции. Для размещения исходного модуля может быть использован последовательный или библиотечный (PDS, PDSE) набор данных или файл z/OS UNIX. Компиляция исходного текста программы осуществляется встроенным языковым компилятором или ассемблером. z/OS включает как новые 64-разрядные компиляторы для таких языков, как, например, С/С++ и Cobol, так и множество старых версий. Компиляторы, которые могут запускаться как в пакетном, так и в интерактивном режиме, формируют объектный модуль, содержащий откомпилированный код и необходимые вспомогательные таблицы. Объектные модули обычно размещаются в наборе данных (библиотеке объектных модулей) или файле UNIX для последующего связывания с другими объектными модулями, размещенными в системных или пользовательских библиотеках. Компиляторы языков С/С++ и Cobol, а также HL Assembler дают возможность получить объектные модули расширенных форматов XOBJ или GOFF (Generalized Object File Format), допускающих использование длинных внешних имен (до 32767 байт).

    (рис 5.59) Базовые средства разработки приложений в z/OS

    Процедура редактирования связей (link edit) объединяет все необходимые объектные модули в единый загрузочный модуль, готовый к выполнению. Для хранения загрузочных модулей создаются специальные PDS- или PDSE-библиотеки, использующие формат записей RECFM=U. Ранее отмечалось, что в конфигурации z/OS обычно предусматривается несколько системных библиотек загрузочных модулей ( SYS1.LINKLIB и др.), описываемых в разделе LNKLST реестра SYS1.PARMLIB.

    z/OS включает два редактора связей: стандартный Linkage Editor и усовершенствованный Program Management Binder (или просто BinderПроисходит от англ. bind - связывать. ). Стандартный редактор связей служит для построения загрузочных модулей "старого" формата, ориентированных на размещение в PDS-библиотеках и поддерживающих только 24- и 31-разрядные режимы адресации с ограничением общего объема кода в 16 MB. Binder обеспечивает возможность связывания объектных и загрузочных модулей в загрузочные модули нового формата - программные объекты (program object). Программные объекты включают все возможности стандартных загрузочных модулей и, кроме того, поддерживают режим 64-разрядной адресации и объектные модули расширенного формата, а также допускают увеличение объема кода до 1 GB. Программные объекты могут размещаться только в библиотечных наборах данных типа PDSE или в файлах HFS UNIX. Отметим, что Binder позволяет также создавать стандартные загрузочные модули, размещаемые в PDS, а с помощью утилиты IEBCOPY можно производить преобразование загрузочных модулей в программные объекты и обратно.

    На этапе редактирования связей программный объект можно настроить определенным образом с помощью специальных параметров (опций), среди которых следует выделить следующие:

  • AMODE - устанавливает используемый режим адресации (24, 31 или 64 бит);
  • RMODE - устанавливает область размещения в адресном пространстве (ниже границы 16 MB или произвольно);
  • REUS - устанавливает режим повторного использования (реентерабельный, используемый последовательно, обновляемый).
  • Редактор связей и Binder позволяют создавать динамические загрузочные модули (программные объекты), которые во время выполнения могут обращаться к внешним модулям с помощью макровызовов LOAD, LINK, XCTL, ATTACH.

    Готовая к выполнению программа (загрузочный модуль или программный объект) запускается на выполнение универсальной программой загрузчиком (Program Management Loader). Загрузчик производит размещение программы в виртуальном адресном пространстве и подготавливает ее к выполнению, осуществляя настройку адресных констант. Обычно сразу же после загрузки программа получает управление, то есть начинает выполняться под управлением ОС.

    Как видно из рис. 5.59, существует возможность выполнять загрузку программ, минуя стадию сохранения загрузочного модуля (программного объекта) в библиотеке. Для этой цели может использоваться Binder или же специальный пакетный загрузчик (Batch Loader), который на основе объектного модуля строит загрузочный модуль "старого" формата и размещает его в виртуальной памяти.

    Универсальная языковая среда Language Environment

    Базовый компонент z/OS Language Environment (LE) поддерживает единую универсальную среду выполнения (run-time environment) для приложений, созданных на языках программирования высокого уровня (HLL) C/C++, COBOL, PL/1 и Fortran . Языковая среда LE включает наиболее существенные и часто используемые сервисы времени выполнения, такие как формирование сообщений, обработка событий, управление памятью, поддержка функций даты и времени и т.п. Эти сервисы доступны всем приложениям, независимо от используемого языка программирования. Кроме того, LE упрощает взаимодействие между приложениями, написанными на разных языках или для разных операционных сред, за счет специальных интерфейсных средств.

    Языковая среда z/OS V1R4 поддерживает приложения, полученные с помощью следующих версий компиляторов:

  • z/OS C/C++, C/C++ Compiler for MVS/ESA, AD/Cycle C/370 Compiler;
  • Enterprise COBOL for z/OS and OS/390, COBOL for OS/390 VM, COBOL for MVS VM;
  • Enterprise PL/I for z/OS and OS/390, PL/I for MVS VM, VisualAge PL/I for OS/390;
  • VS Fortran, Fortran IV;
  • VisualAge for Java, Enterprise Edition for OS/390.
  • Приложения, написанные на HL Assembler, также могут использовать средства LE через соответствующие макровызовы.

    Языковая среда LE состоит из следующих элементов (рис. 5.60):

  • базовые программы (basic routines), обеспечивающие универсальную обработку сообщений, запуск и завершение программ, динамическое распределение памяти, обработку событий (в том числе ошибок) времени выполнения, взаимодействие между программами, написанными на разных языках;
  • общие библиотеки (common library service), содержащие набор модулей для поддержки математических функций и функций даты и времени, реализуемых на основе стандартного интерфейса вызовов функций LE (callable services);
  • специфические библиотеки (language specific RTL), содержащие модули, применяемые только для одного из поддерживаемых языков HLL.
  • (рис 5.60) Универсальная среда выполнения программ Language Environment

    Создаваемые с использованием универсальных модулей LE-приложения могут выполняться в различных операционных средах, включая как внутрисистемные (TSO, пакетный режим, UNIX shell), так и среды промежуточного слоя (DB2, CICS, IMS). Следует отметить, что программы, входящие в состав библиотек LE, делятся на две группы: резидентные и динамические. Резидентные программы при редактировании связей включаются в загрузочный модуль приложения. Они представлены в библиотечных наборах данных SCEELKED и SCEEBIND. К ним относятся, например, программы запуска и завершения. Динамические программы, размещаемые в библиотеках SCEERUN и SCEERUN2, не включаются в загрузочный код, а загружаются при вызове во время выполнения.

    Объединяя средства, доступные в программах, написанных на разных языках, Language Environment устанавливает единую универсальную модель среды выполнения приложений, основанную на целом ряде понятий и терминов, которые следует освоить программисту:

  • Enclave - программа (главная программа вместе с подпрограммами);
  • Routine - подпрограмма, функция;
  • Process - программный код, данные и ресурсы, связанные с выполняющейся программой;
  • Thread - поток, независимо диспетчеризуемая часть процесса;
  • Local data - локальные данные подпрограммы;
  • External data - данные, доступные для любых элементов анклава.
  • Средства разработки пакетного режима

    Традиционный способ разработки программ, применяемый программистами в течение десятилетий, основан на использовании средств пакетного режима, реализуемых в сеансе TSO/E или ISPF/PDF. Ключевым элементом данного способа является использование стандартных процедур JCL, хранящихся в системной библиотеке SYS1.PROCLIB и предназначенных для компиляции, редактирования связей и исполнения различных HLL-программ. В таблице 5.9 представлен список некоторых таких процедур.

    Стандартные процедуры для разработки приложений
    Язык программированияКомпиляцияКомпиляция и редактированиеКомпиляция, редактирование и выполнение
    HL Assembler ASMAC ASMACL ASMACLG
    C++ CBCC CBCСB, CBCCL CBCCBG, CBCCLG
    C EDCC EDCСB, EDCСL EDCCBG, EDCСLG
    COBOL IGYWC IGYWCL IGYWCLG
    Pl/1 IEL1C IEL1CL, IBMZCB IEL1CLG, IBMZCBG

    Процедуры, предназначенные только для компиляции (имя процедуры заканчивается символом "C"- Compile), служат для создания и сохранения объектного модуля программы. Процедуры компиляции и редактирования служат для создания загрузочного модуля и сохранения его в библиотеке. Символы "CL" или "CB" в имени процедуры указывают на применение соответственно стандартного редактора связей Linkage Editor или редактора Binder. Последняя группа процедур (имена заканчиваются на "CLG" или "CBG") предназначена для выполнения программы, представленной в исходном коде, причем объектный и загрузочный модули могут не сохраняться в постоянных наборах данных.

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

    Процедура ASMACLG состоит из трех шагов. На первом шаге ( C ) вызывается компилятор ассемблера ASMA90, на втором шаге ( L ) - редактор связей IEWL, а на третьем ( G ) - запускается созданный загрузочный модуль. Процедура не содержит символических параметров, поскольку необходимые средства настройки доступны через модификацию DD и EXEC операторов. С помощью модификации операторов DD можно определить собственные наборы данных для размещения исходного текста программы ( C.SYSIN ), объектного ( C.SYSLIN ) и загрузочного ( L.SYSLMOD ) модулей, исходных данных программы ( G.SYSIN ). Для задания требуемого набора опций компилятора и редактора связей следует модифицировать параметр PARM соответствующего оператора EXEC ( PARM.C и PARM.L ).

    (рис 5.61) Каталогизированная процедура ASMACLG

    Рассмотрим некоторые варианты применения процедуры ASMACLG при разработке ассемблерных программ:

  • исходный модуль и исходные данные разрабатываемой программы представлены во входном потоке:
    //TEST	JOB	...
    //			EXEC	ASMACLG,PARM.C=LIST,PARM.L=NOMAP
    //C.SYSIN	DD *
    строки исходной программы
    ...
    /*
    //G.SYSIN	DD *
    исходные данные
    ...
  • исходный модуль и исходные данные представлены в заранее подготовленных каталогизированных наборах данных USER.ASM и USER.DATA:
    //TEST	JOB	...
    //			EXEC	ASMACLG,PARM.C=LIST,PARM.L=NOMAP
    //C.SYSIN	DD DSN=USER.ASM(PRG3),DISP=OLD
    //G.SYSIN	DD DSN=USER.DATA(TABL1),DISP=OLD
  • При работе в среде ISPF/PDF текст задания формируется с помощью текстового редактора EDIT. Запуск задания можно производить прямо из редактора с помощью команды SUBMIT. Отчет о выполнении задания можно получить и просмотреть либо с помощью утилиты Outlist, либо средствами компонента SDSF.

    Средства разработки программ в ISPF/PDF

    Наряду с традиционным способом создания приложений на основе пакетных заданий, ISPF/PDF поддерживает два специальных режима разработки, доступных через главное меню: интерактивный (Foreground) и пакетный (Batch). Эти режимы предназначены для компиляции исходных программ и получения объектных модулей для множества поддерживаемых в z/OS языков программирования (ассемблер, Fortran, COBOL, С/С++, PL/I, REXX, DTL и др.). Помимо средств компиляции, здесь доступны также интерактивные отладчики для языков COBOL и Fortran, редакторы связей (Binder и Linkage editor), а также утилита для определения связей между модулями программы (Member Parts List).

    Рассмотрим более подробно функцию 4 ISPF/PDF "Интерактивный режим" (Foreground), которая обеспечивает поддержку средств разработки программ в интерактивном режиме . Главная панель функции представлена на рис. 5.62. Пользователь может выбрать интересующую его программу, введя соответствующий номер в командную строку и нажав клавишу ВВОД. Если исходный набор данных упакован и выбранная функция поддерживает работу с упакованными данными (не отмечена звездочкой), предварительно следует установить переключатель Source Data Packed.

    (рис 5.62) Главная панель функции интерактивного режима (Foreground)

    Рассмотрим особенности использования компиляторов в интерактивном режиме на примере HL Assembler. В этом случае на главной панели следует ввести 1, нажать ВВОД и перейти к панели настройки параметров компиляции, представленной на рис. 5.63. Исходный текст программы для выбранного компилятора может быть представлен двумя способами: в виде раздела библиотеки ISPF или как произвольный набор данных (например, как последовательный набор данных).

    (рис 5.63) Панель настройки параметров ассемблера

    Если исходный модуль представлен в виде раздела библиотечного набора данных, существует возможность определить дополнительные исходные библиотеки, в которых могут находиться включаемые фрагменты текста (например, описываемые с помощью директивы INCLUDE ). Имена дополнительных исходных библиотек вводятся в поле Additional input libraries с использованием апострофов:

    ===" 'ABC.MACROS'

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

    Отчет (листинг), сформированный компилятором, будет размещен в наборе данных, имя которого выбирается автоматически в соответствии с шаблоном:

    [prefix.]userid.listid.LIST

    где prefix - префикс для наборов данных, установленный в пользовательском профиле TSO, userid - идентификатор пользователя, с которым он открыл сеанс работы, listid - имя, заданное пользователем в одноименном поле панели. Если префикс TSO совпадает с идентификатором пользователя, то квалификатор prefix не используется.

    Если исходный набор данных является последовательным, то поле List ID обязательно должно быть заполнено. Для раздела библиотечного набора данных значение listid по умолчанию совпадает с именем исходного раздела.

    Одно из полей панели предназначено для ввода параметров настройки (опций) используемого компилятора ( Assembler Options ). Следует обратить внимание, что для любого компилятора две опции считаются установленными по умолчанию:

  • опция OBJECT - требует сохранить объектный код в наборе данных;
  • опция LIST - требует сохранить выходной отчет в наборе данных.
  • Остальные опции устанавливаются в соответствии с допустимым перечнем, описанным в руководстве по соответствующему компилятору.

    После определения всех необходимых параметров следует нажать клавишу ВВОД. Через некоторое время в нижней части экрана появится сообщение:

    HIGH LEVEL ASSEMBLER STARTED
    ***

    Требуется вновь нажать клавишу ВВОД.

    При выполнении компиляции и ассемблирования автоматически создается сохраняемый объектный модуль. Если исходный модуль определен в виде раздела библиотеки ISPF c именем вида PROJECT.GROUP.TYPE(MEMBER), то объектный код будет записан в раздел MEMBER библиотечного набора данных с именем PROJECT.GROUP.OBJ. Если исходный модуль задан как произвольный набор данных, объектный модуль будет сформирован в наборе данных такого же типа и с таким же именем, только последний квалификатор имени примет значение OBJ.

    Если процедура компиляции завершится нормально, на экране автоматически будет отображен выходной отчет в режиме просмотра BROWSE. После выхода из режима просмотра пользователь может произвести обработку отчета с помощью утилиты печати ( Foreground Print Options ). Если же процедура компиляции завершится некорректно, будет выдано короткое сообщение о причине, и перехода в режим просмотра и печати отчета не произойдет.

    Особый интерес представляет использование в интерактивном режиме процедуры редактирования связей. Функция редактирования связей предназначена для получения загрузочного модуля на основе созданного на этапе компиляции объектного модуля и других объектных модулей, содержащихся в системных и пользовательских библиотеках. Панель настройки параметров редактирования связей представлена на рис. 5.64.

    (рис 5.64) Панель настройки параметров редактора связей

    Объектный код программы может быть задан двумя способами: в виде раздела библиотеки ISPF или как произвольный набор данных (например, последовательный набор данных). Дополнительные библиотеки объектных и загрузочных модулей, необходимые для работы редактора, задаются путем ввода их имен в поля, помеченные как SYSLIB и SYSLIN.

    В поле Linkage editor/binder options можно указать опции выбранного редактора связей. При этом следует иметь в виду, что ISPF всегда автоматически устанавливает следующие опции:

  • LOAD - требует сохранить загрузочный модуль в библиотечном наборе данных;
  • LIB - определяет последовательность обработки входных наборов данных;
  • PRINT - требует сохранить выходной отчет в наборе данных.
  • Тип используемого редактора связей (Binder или Linkage editor) задается с помощью списка выбора Processor. Значение поля List ID служит для формирования имени набора данных, содержащего листинг редактора связей. Имя формируется по шаблону [prefix.]userid.listid.LINKLIST в соответствии с правилами, изложенными выше.

    Создаваемый в результате загрузочный модуль будет размещен в наборе данных с именем, заканчивающимся квалификатором LOAD (по аналогии с образованием имен объектных модулей).

    Практически все описанные выше средства интерактивного режима доступны и при использовании функции 5 ISPF/PDF "Пакетный режим" (Batch), которая обеспечивает поддержку средств разработки программ в пакетном режиме (рис. 5.65). Основное отличие от интерактивного режима заключается в том, что терминал освобождается для выполнения другой работы сразу же после запуска пакетного задания.

    (рис 5.65) Панель настройки параметров ассемблера

    При вызове компилятора или редактора связей в пакетном режиме ISPF автоматически генерирует текст задания, включая в него все необходимые инструкции в соответствии с параметрами, определенными пользователем. Пользователь может непосредственно описать несколько инструкций, в том числе инструкцию JOB, работая с полями панели Job Statement Information.

    Отчет о выполнении задания может быть помещен в указанный набор данных или направлен на печать путем настройки в выбранной панели компилятора или ассемблера. Первая возможность связана с установкой параметра List ID и описана выше. Вторая возможность реализуется при вводе выходного класса задания в поле SYSOUT class. В этом случае просмотр отчета можно произвести с помощью утилиты Outlist или SDSF, как было описано выше.

    Выход из функции Batch с использованием команд END, RETURN или прямого перехода ( = ) приведет к автоматическому запуску сформированного задания ( SUBMIT ).

    Вернуться к учебному плану