Автоматический поиск в библиотеках 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Автоматический поиск в библиотеках



Многие связывающие загрузчики допускают автоматическое включение библиотечных подпрограмм в загружаемую программу. В большинстве случаев для этой цели используется некоторая стандартная библиотека. Другие библиотеки могут подключаться с помощью специальных управляющих директив или передаваться загрузчику в качестве параметров. Этот механизм позволяет программисту использовать подпрограммы из одной или нескольких библиотек (например, математические или статистические подпрограммы) почти так же, как если бы они были составной частью языка программирования. Подпрограмма, вызываемая из загружаемой программы пользователя, автоматически выбирается из библиотеки, связывается с главной программой и загружается в оперативную память. От программиста не требуется ничего, кроме как перечислить имена используемых подпрограмм в исходной программе в списке внешних имен. В некоторых системах данный механизм называется автоматическим библиотечным вызовом (automatic library call). Мы используем термин библиотечный поиск (library search) для того, чтобы не путать его со средствами вызова, которые имеются в большинстве языков программирования.

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

Заметим, что библиотечные подпрограммы, в свою очередь, могут иметь внешние ссылки. Поэтому поиск в библиотеках надо проводить до тех пор, пока не будут разрешены все внешние ссылки (или пока дальнейшее разрешение ссылок станет невозможным). Если после завершения поиска в библиотеках останутся неразрешенные внешние ссылки, то их следует рассматривать как ошибки.

Описанный процесс позволяет программисту замещать стандартные библиотечные подпрограммы своими собственными подпрограммами. Предположим, например, что главная программа ссылается на стандартную подпрограмму SQRT. Обычно подпрограмма с этим именем выбирается из библиотеки и подключается автоматически. Если программист по каким-то соображениям захочет использовать другую версию подпрограммы SQRT, то он может просто включить ее во входной поток. После завершения первого просмотра загрузчика ссылка на SQRT будет определена, и поэтому ее не потребуется искать в библиотеках.

Загрузчик обычно работает с библиотеками, которые содержат ассемблированные или откомпилированные версии подпрограмм (т. е. объектные программы). Просмотр библиотек можно осуществлять с помощью сканирования записей-определений всех объектных программ библиотеки, но это крайне неэффективно. Обычно для библиотек используется специальная файловая структура. Она содержит каталог (директорий), в котором перечислены имена всех подпрограмм и имеются указатели на их месторасположения в файле. Если подпрограмма допускает вызов по нескольким именам (используя различные входные точки), то все ее альтернативные имена также присутствуют в каталоге. Конечно, сама объектная программа хранится в единственном экземпляре, а все альтернативные имена указывают на одну и ту же копию программы. Таким образом, фактически библиотечный поиск сводится к просмотру каталога и последующему чтению найденной объектной программы. Некоторые операционные системы могут постоянно хранить каталоги наиболее часто используемых библиотек в оперативной памяти. Это позволяет ускорить процесс поиска, если требуется обработать большое количество внешних ссылок.

Мы рассмотрели библиотечный поиск применительно к разрешению ссылок на подпрограммы. Очевидно, что те же технические приемы могут быть одинаково хорошо применимы для разрешения любых других типов внешних ссылок.



Поделиться:


Последнее изменение этой страницы: 2017-02-17; просмотров: 128; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.22.169 (0.003 с.)