Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Автоматический поиск в библиотеках
Многие связывающие загрузчики допускают автоматическое включение библиотечных подпрограмм в загружаемую программу. В большинстве случаев для этой цели используется некоторая стандартная библиотека. Другие библиотеки могут подключаться с помощью специальных управляющих директив или передаваться загрузчику в качестве параметров. Этот механизм позволяет программисту использовать подпрограммы из одной или нескольких библиотек (например, математические или статистические подпрограммы) почти так же, как если бы они были составной частью языка программирования. Подпрограмма, вызываемая из загружаемой программы пользователя, автоматически выбирается из библиотеки, связывается с главной программой и загружается в оперативную память. От программиста не требуется ничего, кроме как перечислить имена используемых подпрограмм в исходной программе в списке внешних имен. В некоторых системах данный механизм называется автоматическим библиотечным вызовом (automatic library call). Мы используем термин библиотечный поиск (library search) для того, чтобы не путать его со средствами вызова, которые имеются в большинстве языков программирования. Связывающие загрузчики, поддерживающие библиотечный поиск, должны иметь список всех внешних имен, на которые есть ссылки, но которые не были определены во входном потоке загрузчика. Проще всего это можно сделать, занося каждое имя, содержащееся в записях-определениях, в таблицу внешних имен (ESTAB) еще до того, как оно будет фактически определено. Такие элементы таблицы помечаются специальным маркером, показывающим, что данное внешнее имя еще не определено. Когда встретится определение имени, то соответствующий ему адрес заносится в таблицу и имя становится полностью определенным. В конце первого просмотра все неопределенные имена, оставшиеся в ESTAB, представляют собой неразрешенные внешние ссылки. Для их разрешения загрузчик должен просмотреть все заданные библиотеки и обработать найденные в них подпрограммы точно так же, как если бы они являлись частью входного потока. Заметим, что библиотечные подпрограммы, в свою очередь, могут иметь внешние ссылки. Поэтому поиск в библиотеках надо проводить до тех пор, пока не будут разрешены все внешние ссылки (или пока дальнейшее разрешение ссылок станет невозможным). Если после завершения поиска в библиотеках останутся неразрешенные внешние ссылки, то их следует рассматривать как ошибки.
Описанный процесс позволяет программисту замещать стандартные библиотечные подпрограммы своими собственными подпрограммами. Предположим, например, что главная программа ссылается на стандартную подпрограмму SQRT. Обычно подпрограмма с этим именем выбирается из библиотеки и подключается автоматически. Если программист по каким-то соображениям захочет использовать другую версию подпрограммы SQRT, то он может просто включить ее во входной поток. После завершения первого просмотра загрузчика ссылка на SQRT будет определена, и поэтому ее не потребуется искать в библиотеках. Загрузчик обычно работает с библиотеками, которые содержат ассемблированные или откомпилированные версии подпрограмм (т. е. объектные программы). Просмотр библиотек можно осуществлять с помощью сканирования записей-определений всех объектных программ библиотеки, но это крайне неэффективно. Обычно для библиотек используется специальная файловая структура. Она содержит каталог (директорий), в котором перечислены имена всех подпрограмм и имеются указатели на их месторасположения в файле. Если подпрограмма допускает вызов по нескольким именам (используя различные входные точки), то все ее альтернативные имена также присутствуют в каталоге. Конечно, сама объектная программа хранится в единственном экземпляре, а все альтернативные имена указывают на одну и ту же копию программы. Таким образом, фактически библиотечный поиск сводится к просмотру каталога и последующему чтению найденной объектной программы. Некоторые операционные системы могут постоянно хранить каталоги наиболее часто используемых библиотек в оперативной памяти. Это позволяет ускорить процесс поиска, если требуется обработать большое количество внешних ссылок. Мы рассмотрели библиотечный поиск применительно к разрешению ссылок на подпрограммы. Очевидно, что те же технические приемы могут быть одинаково хорошо применимы для разрешения любых других типов внешних ссылок.
|
|||||
Последнее изменение этой страницы: 2017-02-17; просмотров: 128; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.22.169 (0.003 с.) |