Cтраница 2
Библиотеки объектных модулей ПДО используются, как и объектные библиотеки ОС ЕС, для разрешения внешних ссылок при загрузке программы. [16]
Мы уже упоминали о том, что независимо скомпилированные программы могут быть собраны в единый модуль путем разрешения внешних ссылок. Однако в Multics связь между процедурами может устанавливаться динамически в процессе выполнения, когда одна из них обращается к другой. При вызове какой-либо процедуры выполняющимся процессом возможна активизация поискового механизма файловой системы. Если в результате просмотра справочной структуры указанная процедура будет обнаружена и обратившаяся к ней программа имеет необходимые права доступа, то найденная процедура передается в распоряжение этой программы. [17]
В работе Редактора связей выделяются два этапа, каждый из которых решает одну из двух главных задач - разрешение внешних ссылок и корректировку абсолютных объектов. [18]
Для вызова отдельных частей библиотеки используются различные возможности, заложенные в программе Редактор ОС, ЕС ЭВМ: аппарат автоматического разрешения внешних ссылок, управляющие параметры INCLUDE и REPLACE. При написании программ использованы различные методы оптимизации, которые трудно было бы реализовать при более мелком функциональном делении модулей. [19]
Перед загрузкой программы должна быть определена ( командой GLOBAL) служебная библиотека PL1L1B, содержащая резидентные и транзитные системные модули, а также все библиотеки объектных модулей пользователей, используемые при разрешении внешних ссылок. [20]
Таким образом, можно констатировать, что, несмотря на различия в ДОС и ОС, перед процессом редактирования стоят одни и те же задачи, которые можно объединить в две большие группы: разрешение внешних ссылок, корректировка абсолютных объектов. [21]
При создании языка Ада возможность проведения раздельной трансляции была предусмотрена заранее. Существенной особенностью языка Ада является то, что разрешение внешних ссылок между различными программными единицами полностью производится транслятором с языка Ада, а не откладывается на этап компоновки, во время которого обычно строится глобальное пространство имен всей программы. При этом имеется вероятность возникновения конфликта имен ( внешних, конечно) в не связанных друг с другом частях программы. [22]
Редактирование связей, выполняемое программой редактор, относится к процессу объединения программных модулей перед их выполнением. При загрузке происходит подготовка задания к реальной работе - разрешение внешних ссылок, настройка программы на работу в определенной области памяти, запись ее туда и инициация выполнения. [23]
Имя DD - имя оператора DD, в котором описывается дополнительная библиотека автовызова. В скобках указаны имена разделов, которые нужно просмотреть для разрешения внешних ссылок. [24]
Управляющий оператор INCLUDE задает файлы данных дополнительного ввода. Управляющий оператор LIBRARY указывает библиотеки автовызова, которые участвуют в разрешении внешних ссылок до просмотра системной библиотеки. В операторе LIBRARY можно перечислить также внешние имена, которые запрещается разрешать при помощи библиотек автовызова. [25]
Оператор DD с именем SYSLIB является необязательным. Он требуется в случае, если применяется автоматический вызов библиотеки для разрешения внешних ссылок, оставшихся неразрешенными после обработки основного ввода, и если задается режим RES общей области. Для данного оператора задается режим CALL или RES. Набор данных, определенный этим оператором, должен иметь библиотечную структуру и содержать объектные или загрузочные модули. Допускается использование сцепленных операторов DD, но при этом библиотечные наборы данных должны содержать либо объектные, либо загрузочные модули. [26]
Загрузка программы начинается с выдачи команд LOAD. Команда LOAD позволяет указать имена загружаемых модулей, область памяти ( область пользователя или транзитная область), в которую нужно осуществлять загрузку; адрес памяти, начиная с которого должна осуществляться загрузка; режимы, управляющие очисткой памяти перед загрузкой модулей, способом разрешения внешних ссылок, обработкой повторяющихся имен про-раммных секций, получением схемы загрузки программы. [27]
LKED устанавливает, что внешние ссылки не должны быть разрешены автоматическим вызовом библиотеки. Эта опция используется для экономии оперативной памяти, поскольку, препятствуя разрешению внешних ссылок во время редактирования связей, можно запоминать загрузочные модули PL / I без подходящих библиотечных программ на языке PL / I. Перед выполнением таких загрузочных модулей необходимо вновь их редактировать, чтобы разрешить внешние ссылки. Можно использовать этот метод, чтобы объединить отдельные скомпилированные процедуры на языке PL / I в единый загрузочный модуль. [28]
В языке Си единицей для раздельной трансляции является файл, содержащий исходный текст программы, написанной на языке Си, и некоторые данные. Файл при этом является на самом деле не понятием языка Си, а понятием файловой системы. Имя некоторого статического объекта, описанного в файле вне всех функций ( содержащихся в этом файле), может быть сделано доступным из других файлов путем объявления его внешним с помощью служебного слова external. Разрешение внешних ссылок осуществляется на этапе компоновки. Подход, используемый в языке Си, хорошо подходит для решения больших задач, но может оказаться неподходящим в случае очень больших задач. Проблема, по мнению автора, заключается в том, что компоновщик имеет дело с разделяемыми именами подпрограмм и статическими данными и образует единое пространство имен для всей задачи, что может привести к конфликту имен в не связанных друг с другом частях программы. [29]
Вызов программ для выполнения осуществляется в ПДО либо с помощью программы-загрузчика, либо с помощью программы выборки. Загрузчик вызывается по команде LOAD. Он загружает в память ВМ программы, представленные в виде объектных модулей. Адрес загрузки программы, адрес точки входа и перечень загружаемых модулей задаются в команде LOAD. В процессе работы загрузчик выполняет автоматический или управляемый пользователем поиск объектных модулей, необходимых для разрешения внешних ссылок, редактирование связей и настройку переместимых адресных констант. В силу того, что загруженная таким образом программа обычно является непереместимой, жестко привязанной к месту в основной памяти, ее называют абсолютным модулем. [30]