Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Система математического обеспечения ЕС ЭВМ

..pdf
Скачиваний:
24
Добавлен:
22.10.2023
Размер:
10.92 Mб
Скачать

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

Редактор связей — одна из обрабатывающих программ ОС ЕС. Обработка редактором связей — обйзательный шаг, который следу­ ет после ассемблирования или трансляции любого исходного мо­ дуля. Редактор связи подготавливает результат трансляции — объектные модули для выполнения. Он редактирует модули и объ­ единяет их в единый загрузочный модуль, который может быть по­ мещен программой выборки в оперативную память для выполне­ ния. Загрузочный модуль может быть использован повторно редактором связей для объединения с другими объектами или за­ грузочными модулями. Кроме объединения модулей редактор свя­ зей выполняет ряд других функций: замену, исключение и пере­ группировку программных секций внутри модуля по указанию про­ граммиста, автоматический вызов подпрограмм из библиотеки, создание оверлейных структур программ, формирование характе­ ристик загрузочного модуля и запись их в оглавление библиотеки и т. п.

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

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

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

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

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

31

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

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

тики модуля и т. д.

 

исходной

Объемный

модуль (

модуль А

 

Г ~ 1

 

а

 

0

входные

Машинный код * управ

Машинный код * уп-

маш инный

яэыки

ляющие словари

равлянкцие словари

нод

Организация

Организация

Организация

Программа _

последовательная

последовательная

библиотечная

настроена для

или библиотечная

или библиотечная

 

выполнения

Рис.

6. Разработка программ в ОС ЕС

 

32

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

На рис. 6 показан пример разработки загрузочного модуля Е, который получается путем объединения объектных модулей А и В и загрузочного модуля С. Модуль Е записывается в библиотеку. Программа выборки загружает его в оперативную память для вы­ полнения. Для исходных, объектных и загрузочных модулей на рисунке изображены носители, на которых они могут находиться.

2.3. МЕТОДЫ КОМБИНИРОВАНИЯ ПРОГРАММ

Существует несколько видов комбинирования программ в бо­ лее крупные. Два из них — комбинирование во время редактиро­ вания связей и комбинирование программ во время выполнения—■ мы уже упоминали. Возможно также комбинирование программ во время трансляции и комбинирование во время ввода задания. Рассмотрим возможности комбинирования более подробно.

Комбинирование программ во время трансляции — наиболее простой метод комбинирования. Две или более подпрограммы, со­ ставленные разными авторами, перфорируются и затем объединя­ ются в один массив перфокарт для совместной трансляции.

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

Задание может состоять из нескольких пунктов. Комбинирова­ ние программ во время ввода задания заключается в том, что при выполнении пунктов одного и того же задания, которое в ОС ЕС может быть только последовательным, результаты предыдущего пункта передаются следующему пункту задания. Предположим, что задание состоит из трех пунктов: трансляции, редактирования связей и выполнения. Результатом работы первого пункта (транс­ ляции) является объектный модуль. Он передается второму пунк­ ту, результатом выполнения которого является загрузочный мо­ дуль. Загрузочный модуль передается третьему пункту, где он за­ гружается в основную память и выполняется. В общем случае пункт задания может выполнять любую работу. Пункт задания может состоять из выполнения некоторой проблемной программы пользователя или программы операционной системы.

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

3 З а к а з 3414.

33

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

2.4. СТРУКТУРЫ ПРОГРАММ

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

Загрузочный модуль может быть выполнен как пункт задания. Имя такого модуля указывается в описании задания на языке уп­ равления заданиями. Указанный модуль с помощью программы выборки считывается из библиотеки, загружается в память и по­ лучает управление как задача в системе.

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

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

Любой модуль начинается макрокомандой SAVE и заверша­ ется макрокомандой RETURN. Это связано с тем, что любой мо­ дуль может быть выполнен самостоятельно или может использо­ ваться как часть любой другой программы. Макрокоманда SAVE запоминает содержимое общих регистров в некоторой области па­ мяти, называемой областью сохранения. Макрокоманда RETURN

34

восстанавливает

исходное зна­

 

Передачи управления

чение регистров

и

передает

 

 

 

 

управление

в программу, ис­

А SAVE . . .

из супервизора

пользующую данный

модуль.

 

 

 

Этой программой

может быть

 

 

 

либо программа более старше­

CALL В

 

 

го уровня, либо

 

управляющая

RETURN

 

 

программа.

 

 

 

 

 

 

■в супервизор

 

простой

струк­

 

 

Программа

В SAVE

 

 

туры может содержать под­

 

 

 

 

 

программы.

Обращение

к ним

 

 

 

производится без участия су­

 

 

 

первизора с

помощью

макро­

RETURN

 

 

команды CALL

или

с

помо­

 

 

 

щью команд перехода.

Пример

Р и с . 7.

П р и м ер

м о д у л я п р остой

программы

простой структуры

 

ст р ук т ур ы

показан на

рис.

7.

 

 

 

 

 

 

 

 

Так как загрузочный модуль простой структуры содержит все коды, необходимые для выполнения задачи, программа, имеющая простую структуру, не использует динамически другие загрузочные модули, а, следовательно, эта программа не выдает макрокоман­ ды LINK, LOAD, XCTL или ATTACH. Перечисленные макрокоман­ ды требуют вмешательства управляющей программы. Однако про­ граммы с простой структурой можно динамически вызывать из других (динамических) загрузочных модулей.

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

Таким образом, при выполнении загрузочного модуля простой структуры операционная система выполняет следующие действия:

поиск модуля в библиотеке; выделение для него места в оперативной памяти;

загрузку модуля полностью и его настройку по месту в опера­ тивной памяти;

передачу управления в точку входа модуля; наблюдение за выполнением модуля;

завершение выполнения модуля (возврат управления, восста­ новление содержимого регистров, освобождение занимаемой мо­ дулем оперативной памяти и т. д.).

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

3*

35

О перат ивная п а м я т ь

Сегмент В

С егм ент А

Сегмент С

Р и с . 8. П р и м ер м о д у л я о в ер л ей н о й

ст р у к т у р ы

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

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

Оверлейная структура может быть представлена в виде дерева (рис. 8). Корнем дерева является сегмент, который всегда нахо­ дится в основной памяти (А). Сегменты В и С вызываются в ходе выполнения программы на одно и то же место памяти. Смена сег­ ментов, а также первый вызов сегмента производится с помощью супервизора. Если сегмент находится в памяти и к нему произво­ дится повторное обращение, то оно выполняется без помощи су­ первизора. Структура запланированного перекрытия создается ре­ дактором связи по соответствующему заданию.

Совмещаемые сегменты называются исключающими (В и С). Обмен информацией между исключающими сегментами произво­ дится через область памяти старшего (включающего) сегмента А.

Оверлейная структура позволяет экономить память, но приво­ дит к потере времени при смене сегментов.

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

загрузку и передачу управления корневому сегменту А; наблюдение за выполнением сегмента А; загрузку и передачу управления сегменту В; наблюдение за выполнением сегмента В;

перекрытие сегмента В сегментом С; передачу управления сег­ менту С;

наблюдение за выполнением сегмента С; завершение выполнения модуля.

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

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

36

А

в

С

Р и с . 9. И с п о л ь зо в а н и е м а к р о к о м а н д L IN K в ди н ам и ч еск и х п о сл ед о в а т ел ь н ы х ст р у к т у р а х

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

В динамических последовательных структурах для вызова мо­ дуля используются следующие макрокоманды супервизора: LINK, XCTL, LOAD и связанную с последней DELETE. В качестве одного из параметров этих макрокоманд указывается имя программного модуля.

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

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

37

А
Р и с . 10. И сп о л ь зо в а н и е м а к р о к о м а н д
L O A D , D E L E T E и L IN K в д и н а м и ­ ческ и х п о сл ед о в а т ел ь н ы х с т р у к т у р а х

Макрокоманда XCTL анало­ гична макрокоманде LINK, за исключением того, что управле­ ние возвращается не тому моду­ лю, который выдал макрокоман­ ду XCTL, а модулю более высо­ кого уровня. Память, занятая модулем, выдавшим макрокоман­ ду XCTL, считается свободной сразу после выдачи макрокоман­ ды. Возможно, что вызываемый модуль будет загружен в память, ранее занимаемую вызывающим модулем. Пример использования макрокоманд XCTL и LINK пред­ ставлен на рис. 11.

В рассмотренных выше струк­ турах программы выполняются последовательно. С помощью макрокоманды ATTACH можно ор­

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

LINK.

Организация параллельного выполнения программ имеет смысл только в том случае, если одна или обе программы имеют периоды ожидания каких-либо событий (например, завершения операций ввода-вывода) в процессе своего выполнения. Именно в эти перио­ ды может выполняться вторая программа. На рис. 12 представлен пример параллельного выполнения двух программ А и В, причем

В имеет период ожидания

завершения

операции ввода-вывода.

А

В

С

Р и с . 11. И сп о л ь зо в а н и е м а к р о к о м а н д X C T L и L IN K в

д и н а м и ч еск и х п о сл е д о в а т е л ь н ы х с т р у к т у р а х

38

Пунктирной линией отмечены периоды времени, когда соответ­ ствующая программа не выпол­ няется.

2.5. ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ ПРОГРАММ

ATTACH £Р*Ь

Ожидание \

ввода-вывода ^

Окончание

ввода-вывода

Повторное использование про­

 

 

грамм возможно только в режиме

 

Ожидание завер­

мультипрограммирования с пере­

 

шения В

 

 

менным числом задач. В зависи­

 

 

мости от возможности повторного

Р и с .

12. И с п о л ь зо в а н и е м а к р о к о м а н ­

использования программ сущест­

ды

A T T A C H в д и н а м и ч еск о й п а р а л ­

вуют три типа загрузочных моду5

 

л ел ь н ой ст р у к т у р е

лей: однократно используемые,

 

 

повторно используемые и реентерабельные. Тип модуля определя- ! ется во время редактирования связей по указанию программиста. 1 Это одна из характеристик модуля, формируемых редактором свя­ зей в оглавлении библиотеки. Однопрограммный режим и мульти­ программный режим с фиксированным числом задач рассматрива­ ют программы как однократно используемые, если они заносятся в память не по макрокоманде LOAD. При использовании макро­ команды LOAD в этих режимах предполагается, что программы являются реентерабельными.

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

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

Реентерабельные модули разрабатываются таким образом, что­ бы они не изменялись во время выполнения, т. е. они допускают «только чтение». Реентерабельные загрузочные модули, выбира­ емые из системной библиотеки, могут загружаться на участки па­ мяти, защищенные ключом защиты памяти супервизора.

39

XT SAVE..

 

 

Так как только управля­

 

Модуль А

ющая

программа

работает

 

u m 'e 'p l

 

с таким

ключом

защиты,

 

 

 

Область

 

 

реентерабельные

 

програм­

 

 

 

 

задачиА

 

 

 

мы защищены от случайных

 

RETURN

 

 

Рабочая облаете

 

 

изменений со стороны ка­

Область сохранения

 

кой-либо программы поль­

f l j

' s a w ...

 

 

зователя. Поскольку реен­

 

 

 

Модуль д

терабельный

загрузочный

Область,

LINK ЕР* С . . .

 

 

модуль

 

никогда

 

не

изменя­

эадачив

 

 

 

ется

 

во

 

время

выполнения,

 

RETURN. . .

 

\

он может загружаться один

 

 

 

Рабочая область

 

раз

и

свободно

использо­

Область сохранения

 

 

 

 

 

 

 

 

 

3

ваться любой задачей в си­

 

 

 

Л

 

 

I

стеме

в

любое

 

время. На­

 

 

 

пример,

 

он может использо­

ЁУ

 

 

 

 

 

 

 

ваться

одновременно

двумя

I#

 

 

 

(или более) задачами в

с \

S A V E ...

 

Регистр 1

мультипрограммных

режи­

 

Адрес рабоче

мах.

Прежде чем одна зада­

Ф инсиро•

еетшт.

 

 

о б л а с т и

данная

 

 

ча, первой обратившаяся к

область

 

 

 

 

R E TUR N ...

 

 

нему,

закончит

 

выполнение

 

 

 

 

модуля, по прерыванию мо­

 

 

 

 

жет

 

начаться

 

выполнение

Р и с . 1 3 . И с п о л ь зо в а н и е

 

р а б о ч и х о б л а с т е й

другой

задачи,

которая M O -

р е е н т е р а б е л ь н о й

п р о гр а м м о й

жет повторно войти в этот

 

 

 

 

модуль,

 

что не

помешает

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

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

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

40

Соседние файлы в папке книги из ГПНТБ