Активация - подпрограмма - Большая Энциклопедия Нефти и Газа, статья, страница 2
Жизнь похожа на собачью упряжку. Если вы не вожак, картина никогда не меняется. Законы Мерфи (еще...)

Активация - подпрограмма

Cтраница 2


Общее планирование подпрограмм, как было обнаружено в языках моделирования, вызывает наибольшие трудности при обработке ссылок. Любая подпрограмма может существовать одновременно во многих активациях, каждая из которых может находиться на разных стадиях выполнения. Окончание любой активат ии по ппогпнммы может произойти в ппоизволь-ный момент по отношению к другим активациям той же и других подпрограмм. Таким образом, не существует какого-либо правила вложенности вызовов и окончаний подпрограмм. Кроме того, активации подпрограмм могут приостанавливаться и возобновляться наподобие сопрограмм.  [16]

Привлекательность стекового метода управления памятью легко объясняется характерной для многих языков строго вложенной структурой входов в подпрограммы и выходов из них, подчиняющейся правилу последний вошел - первый вышел. Многие элементы программы и данных, требующие памяти, связаны с активациями подпрограмм. Часто оказывается, что стековую память можно использовать как для точек возврата из подпрограмм, так и для таблиц локальной среды подпрограмм, о которых говорилось в предыдущих главах. Кроме того, выделение памяти для временных переменных, используемых при вычислении выражений и передаче параметров, в большинстве случаев также может быть связано с активациями подпрограмм. Обычно транслятор может определить число временных переменных, требуемых для каждой активации подпрограммы.  [17]

18 Стек таблиц среды при выполнении Р (. [18]

Нелокальные ссылки, однако, приводят к сложным задачам. Рассмотрим вновь рис. 6.8. На рис. 6.9 показано содержимое стека в момент, когда в процессе выполнения при первом вызове Р мы подошли к присваиванию X: X У. Обратите внимание на трудность нахождения подходящей ассоциации для У, поскольку подходящей является не та ассоциация, которая была создана позднее всего. Теперь уже недостаточно просто просмотреть стек сверху вниз. Проблема заключается в том, что последовательность локальных таблиц в стеке представляет динамическую вложенность активаций подпрограмм, вложенность, основанную на цепи вызовов во время выполнения. Но теперь нелокальную среду определяет статическая вложенность определений подпрограмм, а стек, как мы его сейчас построили, не содержит информацию о статической вложенности.  [19]

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

В основе типичной реализации АПЛ лежит чисто программ-ная интерпретация выполняемой программы. Программы хранятся по существу в том виде, в котором вводятся, подвергнувшись лишь минимальной трансляции. Выделяются две статические области памяти: одна для системных программ и одна для рабочей области, используемой программистом в данный момент. С системными программами обычно работают сразу несколько пользователей, однако у каждого из них имеется своя собственная рабочая область. Память, выделяемая под рабочую область, включает статическую подобласть, содержащую системные данные и три динамические подобласти: стек для записей активаций подпрограмм ( локальные среды ссылок и точки возврата), куча для массивов и тел определений подпрограмм и таблица ассоциаций для глобальных идентификаторов. Когда необходимо, выполняется сбор мусора и полное уплотнение памяти. Для хранения массивов применяется обычное последовательное представление с полными дескрипторами, используемыми во время выполнения программы.  [21]

Совсем другое решение принято в Алголе ( без own), Лиспе, Сноболе 4 и АПЛ. При вызове подпрограммы создается совершенно новая локальная среда. При возврате управления вызывающей программе локальная среда уничтожается. Новый вход в ту же подпрограмму вызывает создание другой локальной среды. Вспомнив различие между определением подпрограммы и активацией подпрограммы ( см. гл. В основе первого метода лежит наличие только одной локальной среды для каждого определения подпрограммы независимо от числа активаций этой подпрограммы во время выполнения.  [22]



Страницы:      1    2