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

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

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

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

Добавлен: 17.10.2024

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

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

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

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

Сегмент В

С егм ент А

Сегмент С

Р и с . 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