Операционная система OS2 Warp


Библиотеки динамической компоновки


При компоновке программы DOS в загрузочный exe-файл добавляется программный код функций, взятых из стандартных библиотек транслятора или из дополнительных библиотек. Этот метод компоновки называется статическим. При его использовании файл программы DOS содержит в себе все, необходимое для работы,€ за исключением кода функций DOS и BIOS, вызываемого с помощью программных прерываний.

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

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

Библиотеки динамической компоновки

Рис. 1.13. При статической компоновке в памяти может находиться одновременно несколько копий одной и той же функции

В IBM OS/2, как и в других мультизадачных операционных системах, применяется динамическая компоновка, исключающая дублирование кода функций в описанной выше ситуации.

Для этого группы используемых вместе функций объединяются в файлы с расширением имени .dll , которые называются библиотеками динамической компоновки, динамическими библиотеками или просто dll-библиотеками.

В процессе компоновки код внешних функций, расположенных в dll -библиотеке, не включается в загрузочный exe-файл программы. Вместо этого там располагается ссылка на внешние функции, которая разрешается во время работы программы.

Когда запускается первая программа, использующая функцию из dll -библиотеки, вся библиотека загружается в оперативную память. Если теперь пользователь запускает вторую копию этой же программы или другую программу, вызывающую эту же функцию, будет использован код функции, уже загруженный в память в процессе работы первой программы (рис. 1.14).

Библиотеки динамической компоновки

Рис. 1.14. При использовании динамической компоновки в память загружается только одна копия функции

Так достигается значительная экономия памяти, поэтому библиотеки динамической компоновки очень широко используются в практике программирования для IBM OS/2. Скажем даже больше - ядро IBM OS/2 в основном состоит именно из dll -библиотек, поэтому многие функции ядра доступны программам через механизм динамической компоновки.



Содержание раздела