ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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
Макрокоманда 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