Организация ЭВМ и систем: Курс лекций (Позиционные системы счисления. Процессоры семейства IA-32. Лазерные принтеры), страница 63

Все версии ОС Microsoft Windows поддерживают динамическое связывание. Динамически подключаемые модули используют специальный формат, который называется Dynamic Link Library, DLL. Динамически подключаемые библиотеки могут содержать исполнимый код, данные или то и другое вместе. Большинство файлов динамически подключаемых библиотек имеют расширение dll, но есть и другие, например, drv (библиотеки драйверов), fon (библиотеки шрифтов).

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

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

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

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

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

В ОС типа UNIX используется сходный механизм, основанный на так называемых библиотеках коллективного доступа. Данный механизм поддерживает только неявное связывание, поэтому библиотека коллективного доступа состоит из двух частей: главной библиотеки (host library), которая статически компонуется с исполняемым файлом, и целевой библиотеки (target library), которая вызывается во время работы программы. Целевые библиотеки содержатся в файлах с расширением, как правило, «so» (shared object).