Выполнение программы

Системы IBM/360 или 370 обслуживают сотни пользователей ежедневно. Каждый пользователь может предложить несколько заданий, требующих различных средств ввода-вывода, компиляторов с различных языков и иных ресурсов. Во многих системах обработка всех этих заданий выполняется с использованием мультипрограммирования, т.е. такой организации вычислений, когда несколько заданий могут обслуживаться одновременно. Вследствие чрезвычайной сложности подобной системы управление ею никак не может быть непосредственно возложено на человека. Помощь человеку в выполнении этой задачи оказывает специальный набор программ, называемый операционной системой, осуществляющей управление ресурсами ЭВМ на протяжении выполнения программ пользователей.

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

Существуют три наиболее известные операционные системы для IBM 360 и 370. Ими являются, в порядке возрастания сложности, Дисковая операционная система (DOS), Операционная система (OS) и виртуальные системы (DOS/VSи OS/VS). Целесообразность использования какой-либо из этих систем на конкретной установке зависит от размеров вычислительной системы, количества и типов различных периферийных устройств и режима работы установки. В ЭВМ, имеющих относительно небольшую память, оснащенных небольшим количеством внешних устройств и использующихся преимущественно для решения экономических задач, в большинстве случаев применяется Дисковая операционная система. Мощные вычислительные системы общего назначения использующиеся, например, на вычислительных центрах университетов для выполнения административно-учетных работ, для обеспечения учебного процесса и для проведения исследовательских работ, работают с более развитой Операционной системой. Установки, аппаратура которых предусматривает работу с виртуальной памятью, оснащены виртуальными системами.

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

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

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

Большинство программ в своей работе используют результаты, получаемые другими программами. Например, выполнение операций ввода-вывода обычно возлагается на подпрограммы, представляющие собой отдельные законченные программы, что облегчает задачу программиста. Кроме того, программе в ее работе может требоваться информация, не содержащаяся непосредственно в данной программе. Вторым шагом обработки задания является шаг редактирования связей, на котором основная программа, все требуемые подпрограммы и данные поступают на вход так называемой программы-редактора связей, которая объединяет их в форме загрузочного модуля. Для выполнения помещенного в память загрузочного модуля требуется лишь помощь со стороны операционной системы.

 

Рис. 5.11. Обработка программы на языке ассемблера.

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

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

Для обработки программы, написанной на языке ФОРТРАН например, на первом шаге используется компилятор с ФОРТРАНа. Остальные шаги, выполняемые при обработке такой программы, те же.

Альтернативой трехшаговому выполнению задания является использование программы загрузчик. Шаги редактирования связей и выполнения в этом случае объединяются в один. Не производится создание отдельного загрузочного модуля, объектный модуль и соответствующие подпрограммы загружаются непосредственно в память, производится редактирование связей, и программа выполняется. В целом использование загрузчика напоминает рассмотренную трехшаговую схему.

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

Пока разница между OSи OS/VS для нас несущественна. Предложения языка управления заданиями, описываемые ниже, играют одинаковую роль в обеих системах.

Предложения этого языка, так же как и остальная входная информация, набиваются на карты и отличаются тем, что начинаются с двух характерных символов (//). Формат предложений совпадает с форматом предложений языка ассемблера, только начало их, очевидно, соответствует третьему, а не первому столбцу. Итак, первым полем является поле имени. Если имя указывается, то оно должно начинаться с третьего столбца, в противном случае этот столбец остается пустым. Затем следуют соответственно поле операции, поле операндов и поле комментария. Как и в предложениях языка ассемблера, каждое поле отделяется от соседних по меньшей мере одним пробелом.

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

// имя задания JOBучетная информация и возможности по выбору

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

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

Следующей картой задания является карта ЕХЕС. Формат этого предложения таков:

// имя шага EXECASMFCLG

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

ЕХЕС — это сокращение от слова EXECute(выполнить). Операндом в данном случае является имя программы на языке управления заданиями, или каталогизированной процедуры, которая должна быть выполнена. Каталогизированная процедура — это последовательность предложений языка управления заданиями, хранящаяся в системной библиотеке. Написав ЕХЕС-предложение с указанным операндом, мы запросили таким образом включение каталогизированной процедуры в наше задание.

Использование каталогизированной процедуры устраняет необходимость непосредственного указания содержащихся в ней предложений. Процедура ASMFCLGсодержит предложения, запрашивающие выполнения ассемблирования, редактирования связей и выполнения программы. От нас требуется только указание источников входных данных для ассемблера и нашей программы, а также место вывода выходной информации. Имя ASMFCLGможет быть проинтерпретировано как «Использовать ассемблер F, Compile(компилировать), Link-edit(редактировать связи) и GO(выполнить)». Можно запро-

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

Остальные предложения языка управления заданиями называются предложениями определения наборов данных (DataDefinition— DD- предложения). Эти предложения содержат сведения об источниках вводимой информации и размещении получаемых результатов. Исходная программа, являющаяся входными данными ассемблера, следует за предложением вида

// ASM.SYSINDD*

Ассемблер рассматривает информацию, следующую за DD-предложением с именем ASM.SYSIN, как исходную программу. Звездочка (*) означает, что далее следует программа, отперфорированная на картах. За предложением ENDпрограммы на языке ассемблера следует карта-ограничитель

/*

которая идентифицирует конец вводимых данных.

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

// GO.SYSPRINTDDSYSOUT=A

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

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

 // GO.SYSIN DD SYSOUT=A       

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

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

// GO.SYSINDD*

После последней карты данных должна следовать карта-ограничитель

/*

За этой картой обычно следует карта

//

идентифицирующая конец задания.

// CSC52R56 JOB(100 ,1105) ,' 10055 W. RUDD'

// COMPUTE EXEC ASMFCLG

// ASM.SYSIN DO *

ASSEMBLY LANGUAGE SOURCE PRCGRAM GOES HERE

END          PROGRAM,  END STATEMENT OF PROGRAM

/*

//GO.SYSPRINT DD SYSOUT=A

//GO.SYSUDUNP DD SYSOUT = A  (OPTIONAL)

//GO.SYSIN DD *

DATA CAROS GO HERE

/*

//

Рис. 5.12. Структура задания для операционных систем OSили OS/VS.

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

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

Первым предложением в любом задании, подготовленном для обработки системой DOS, является предложение JOB:

// JOB имя задания

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

Следующей картой является карта

// OPTION указания

В поле операндов здесь задаются возможности по выбору, которые будут использоваться при обработке этого конкретного задания операционной системой. Например, если мы хотим иметь распечатку (LIST— листинг) исходной программы на языке ассемблера, после ассемблирования провести редактирование связей (LINK-edition) и в случае прерывания выполнения программы из-за ошибки иметь распечатку полного дампа, то следует написать:

// OPTIONLIST,LINK,DUMP

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

// ЕХЕС ASSEMBLY

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

/*

Затем следуют предложения, запрашивающие выполнение редактирования связей

// ЕХЕСLNKEDT

// JCB CSCS2K56

// OPTION LIST,LINK,DUMP

// ЕХЕСASSEMBLY

ASSEMBLY LANGUAGE SOURCE PROGRAM GOES HE TO

/*

// EXEC LNKEDT

// EXEC

INPUT CARD DATA GOES HERE

 

Рис. 5.13. Структура задания для операционной системы DOS.

//CSC 52R56 JOB (100,1105),'10055W. RUDD'

//COMPUTE EXEC ASMFCLG

//ASM.SYSIN DD

AVERAGE START 0

START OF PROGRAM

PRINT NOGEN

DO NOT PRINT MACRO EXPANSIONS

INITIAL

BEGIN EXECUTION HERE

RWD 9

READ NUMBER OF NUMBERS TO USE

LR 10,9

KEEP A COPY IN REGISTER 10

L 6,=F'1'

DECREMENT FOR COUNTING

SR 5,5

START SUM AT 0

NEXTNUM RWD 2

READ A NUMBER

AR 5,2

ADD IT TO SUM

SR 9,6

DECREMENT LOOP COUNTER

BNM NEXTNUM

GO BACK FOR MORE IF NOT CONE

MR 4,6

PREPARE FOR DIVISION BY NUMBER OF

DR 4,10

NUMBERS TO COMPUTE AVERAGE

WWD 5

QUOTIENT IN REGISTER 5

WWD 4

AND REMAINDER IN REGISTER 4

EOJ

PROCESSING FINISHEC, STOP

END AVERAGE

END OF PROGRAM

/*

//GO.SYSPRINT DO SYSOUT=A

//GO.SYSUOUMP DO SY SOUT= A

//GO. SYSINDD*

5

-10

-30

1

3

/*

//

Рис. 5.14. Полностью подготовленное задание для операционной системы OS.

и предложение

// ЕХЕС

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

/*

И наконец, следует карта, идентифицирующая конец задания:

/&

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

На рис. 5.14 представлено задание, включающее в качестве своей основной части рассмотренную нами программу вычисления среднего арифметического и соответствующие данные. Язык управления заданиями в данном случае подразумевает использование системы OS. На рис. 5.15 представлено аналогичное задание для системы DOS.

// JOB CSC52R56

// OPTION LIST,LINK,DUMP

// EXEC ASSEMBLY

AVERAGE START 0

START OF PROGRAM

PRINT NOGEN

DC NOT PRINT MACRO EXPANSIONS

INITIAL

BEGIN EXECUTION HERE

RWD 9

READ NUMBER OF NUMBERS TO USE

LR 10,9

KEEP A COPY IN REGISTER 10

L 6,=F'1'

DECREMENT FOR COUNTING

SR 5,5

START SUM AT 0

NEXTNUM RWD 2

READ A NUMBER

AR 5,2

ADD IT TO SUM

SR 9,6

DECREMENT LOOP COUNTER

BNM NEXTNUM

GO BACK FOR MORE IF NOT DONE

MR 4,6

PREPARE FOR DIVISION BY NUMBER OF

DR 4,10

NUMBERS TO COMPUTE AVERAGE

WWD 5

QUOTIENT IN REGISTER 5

WWD 4

AND REMAINDER IN REGISTER 4

EOJ

PROCESSING FINISHED. STOP

END AVERAGE

EM) OF PROGRAM

/*

// EXEC LNKEDT

// EXEC

5

-10

500

-30

1

3

/*

//

Рис. 5.15. Полностью подготовленное задание для операционной системы DOS.

В некоторых системах используется ассемблер G, созданный на факультете вычислительных наук университета Ватерлоо в Канаде, или система ASSIST, разработанная в университете штата Пенсильвания в США. Могут использоваться и некоторые другие специальные виды ассемблеров. Но вам будет несложно разобраться в особенностях их применения, если это потребуется.

{toc_noshowall}

Расскажи друзьям
 
Статьи раздела