Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.417


Таненбаум Э.- Архитектура компьютера. стр.417

Динамическая компоновка

Стратегия компоновки, которую мы обсуждали в подразделе «Задачи компоновщика», имеет одну особенность: все процедуры, требуемые программе, компонуются до начала работы программы. Однако если мы будем устанавливать все связи до начала работы программы в компьютере с виртуальной памятью, то мы не используем всех возможностей виртуальной памяти. Многие программы содержат процедуры, которые вызываются только при определенных обстоятельствах. Например, компиляторы содержат процедуры для компиляции редко используемых операторов или исправления редко встречающихся ошибок.

Более гибкий способ компоновки раздельно скомпилированных процедур — компоновка каждой процедуры в тот момент, когда она впервые вызывается. Этот процесс называется динамической компоновкой. Впервые он был применен в системе MULTICS. Давайте рассмотрим примеры динамической компоновки в нескольких системах.

Динамическая компоновка в MULTICS

В системе MULTICS с каждой программой соотносится сегмент, так называемый сегмент компоновки (linkage segment). Он содержит один информационный блок для каждой процедуры, которая может быть вызвана. Этот блок начинается со слова, зарезервированного для виртуального адреса процедуры, за ним следует имя процедуры, которое сохраняется в виде символьной строки.

При динамической компоновке вызовы процедур во входном языке транслируются в команды, которые путем косвенной адресации обращаются к первому слову соответствующего блока, как показано на рис. 7.6, а. Компилятор заполняет это слово либо недействительным адресом либо специальным набором битов, который вызывает исключение.

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

Все последующие обращения к этой процедуре будут выполняться без ошибок, поскольку недействительное ранее слово теперь содержит правильный виртуальный адрес. Следовательно, при динамической компоновке компоновщик вызывается только тогда, когда процедура вызывается впервые. Вызывать его повторно уже не нужно.

Таненбаум Э.- Архитектура компьютера.

Рис. 7.6. Динамическая компоновка: процедура EARTH до вызова (а); процедура EARTH

после вызова и компоновки (б)

Динамическая компоновка в Windows

Все версии Windows, в том числе Windows NT, поддерживают динамическую компоновку. При динамической компоновке используется специальный файловый формат, который называется DLL (Dynamic Link Library — библиотека

динамической компоновки). Библиотеки динамической компоновки могут содержать процедуры, данные или то и другое вместе. Обычно они применяются для того, чтобы два и более процессов могли разделять процедуры и данные библиотеки. Большинство DDL-файлов имеют расширение .dll, но встречаются и другие расширения, например .drv (для библиотек драйверов — driver libraries) и .fon (для библиотек шрифтов — font libraries).


⇐ Предыдущая страница| |Следующая страница ⇒

.