Cтраница 1
Внешняя процедура может динамически загружаться в основную память либо при выполнении оператора FETCH, либо при обращении к процедуре-подпрограмме оператором CALL или вызове функции. Однако в последних двух случаях загрузка будет выполняться, если имена входов этих внешних процедур указаны в операторах FETCH или RELEASE, находящихся в вызывающей процедуре. [1]
Внешняя процедура загружается в основную память только тогда, если ее еще там нет. Если же загружаемая процедура уже находится в основной памяти, то оператор FETCH эквивалентен пустому. После динамической загрузки процедура может оставаться в основной памяти до конца выполнения программы. Если этого не требуется, то с помощью оператора RELEASE область памяти, занимаемая ею, может быть вновь освобождена. [2]
Внешняя процедура может быть вызвана любой другой процедурой, как внешней, так и внутренней. Она может быть вызвана по первичной точке входа или по вторичной точке входа, если такие имеются. [3]
Внешние процедуры служат в ряде версий языка тем средством, с помощью которого обеспечивается работа с подпрограммами, написанными на других языках, в том числе на языке ассемблера. [4]
Внешние процедуры и функции не должны иметь в качестве параметров параметры-функции и сами не могут быть переданы в качестве параметров. [5]
Внешняя процедура может использоваться рекурсивно и передана как параметр только процедуре, декларированной внутри нов самой. [6]
Внешняя процедура или функция не имеет соответствующего определения PUBLIC в объектном файле. Убедитесь, что указаны все объектные файлы в директивах L Файл. [7]
Внешние процедуры и функции хранятся в виде самостоятельных загрузочных модулей в библиотеках. [8]
Внешняя процедура написана на каком-либо другом языке. [9]
Внешние процедуры контроля включают в себя следующие действия. [10]
Внешние процедуры типа библиотечных программ ( например, программы решения систем линейных уравнений) могут постоянно находиться в ОЗУ для использования их различными процессами в режиме мультипрограммной работы. Для этого необходимо, чтобы процедурный сегмент любой программы был организован так, что ни одна его ячейка не изменится в процессе решения. Обращение к процедуре извне должно осуществляться только по ее идентификатору, а ее работа должна быть инвариантной к размещению в памяти. При выполнении этих требований процесс может обратиться к процедуре, сегмент которой еще не включен в сегмент основных кодовых слов. [11]
Каждая внешняя процедура, определяемая отдельным модулем, может иметь как статические, так и динамические параметры. В операторе вызова подпрограммы задаются только те фактические параметры, которые соответствуют динамическим параметрам подпрограммы, а настройка подпрограммы на ее статические параметры производится во время загрузки. [12]
Каждая внешняя процедура образует исходный модуль, который транслируется независимо. [13]
Две внешние процедуры транслируются отладочным транслятором, затем они редактируются и выполняются с помощью команды LOADGO. Главная процедура находится в наборе данных BMO. PLI, другая внешняя процедура, используемая как подпрограмма, - в наборе BMO. Трансляция выполняется с помощью команды PLIC с операндами NORUN и LOAD. Операнд NORUN гарантирует, что управление в конце трансляции будет передано на АП. Операнд LOAD указывает, что объектный модуль и интерпретируемый код, полученные во время трансляции, должны быть сохранены в наборе данных. При трансляции главной процедуры в операнде LOAD не указаны имена наборов. [14]
Две внешние процедуры ( PR1 и PR2) находятся в наборах данных MASTER. Первая процедура транслируется отладочным транслятором, вторая ( подпрограмма) - оптимизирующим. Затем они редактируются и выполняются с помощью команды LOADGO. Так как в командах PLIC и PLI ( которая используется для вызова оптимизирующего транслятора), не указаны имена наборов, где будут храниться объектные модули и интерпретируемый код, система сама построит эти имена. Для процедуры PR1 эти имена соответствуют MASTER. [15]