И.А. Волкова, И.Г. Головин, Л.Е. Карпов - Системы программирования (1119414), страница 18
Текст из файла (страница 18)
В то же время каких-либо команд обращения к этим компонентамкомпиляторы для динамических библиотек вставить не могут. Вместо них в программывставляются команды обращения к функциям операционной системы, которыеобеспечивают обращения к компонентам динамических библиотек. Эти команды могутвставляться автоматически, что предполагает проведение динамической загрузки вмомент запуска основной программы, либо “вручную” самим разработчикомпрограммы, что обеспечит реализацию динамической загрузки в момент реальногообращения к библиотечным компонентам.
Компоненты, к которым завершены всеобращения, могут удаляться операционной системой из памяти машины. Вновь онипопадают в память только после очередного реального обращения к ним.Динамические библиотеки имеют множество преимуществ перед статическими.Их составляющие не должны включаться в состав исполняемых файлов программ, чтозначительно сокращает их размеры. Этого преимущества удается добиться за счетразработки специального механизма операционной системы, который выполняетподключение фрагментов одних программ к другим в момент их выполнения.Известным недостатком динамических библиотек является зависимостьпрограммного обеспечения от библиотечных объектов, непосредственно не связанныхс этим обеспечением, то есть зависимость программ пользователей от неизвестных имдинамических библиотек.
Для выполнения программ, основанных на динамическомподключении библиотек, необходимо принимать специальные меры, гарантирующиеналичие всех необходимых библиотечных компонентов в составе той вычислительнойсистемы, где предполагается исполнять эти программы. Одновременно возникаетзависимость самой логики работы программ от подключаемых к ней библиотек.Изменения в библиотеках осуществляются системными средствами, не зависящими отразработчиков прикладного обеспечения, а эти изменения могут влиять на работупрограмм, которые сами не менялись перед этим продолжительное время.65Это означает, что использование динамических библиотек налагаетобязательства, как на их разработчиков, так и на их пользователей.
Разработчикприкладной программы должен тщательно придерживаться правил, предложенныхразработчиками библиотек. В свою очередь, разработчики библиотек, внося вбиблиотеки изменения, должны предпринимать меры, чтобы эти измененияминимальным образом сказывались на прикладных программах, основанных напредыдущих версиях библиотеки. Одним из результатов таких мер является то, что всовременных библиотеках имеются специальные библиотечные компоненты, которыепозволяют точно определить версию данного библиотечного набора компонентов.Описанное повышение эффективности использования памяти вычислительнойсистемы происходит за счет увеличения времени выполнения программ, поскольку надинамическую загрузку приходится тратить дополнительное время.3.6.3. Основные типы библиотекНикакая современная система программирования не может обойтись безвстроенных в нее библиотечных средств.
Для широкого распространениябиблиотечных средств в программировании имеются, по крайней мере, две причины:••необходимость оказывать поддержку программам во время их исполнения навычислительной машине,потребность накапливать полезные программы и передавать их другимпользователям,нераскрываядеталейреализацииалгоритмов,запрограммированных в них.По функциональному наполнению все используемые в составе современныхсистем программирования библиотеки можно классифицировать следующим образом:•••библиотеки функций, процедур и макроопределений,библиотеки классов,библиотеки компонентов.3.6.3.1. Библиотеки функций, процедур и макроопределенийМногие программы, прошедшие компиляцию, нуждаются в поддержке во времявыполнения. Почти все языки программирования включают в себя некоторыеэлементы, реализация которых подразумевает, что во время выполнения программыдолжна обеспечиваться связь с операционной системой.
Наиболее нагляднымпримером может быть пример реализации операций, связанных с вводом и выводоминформации. В каждом языке программирования имеются операторы ввода/вывода,которые не могут быть реализованы никаким образом, кроме обращений к системнымпрограммам, собранным в библиотеку, представляющую собой коллекцию объектныхмодулей, сформированных заранее при разработке самого компилятора. Естественно,что нет никакой необходимости в том. чтобы программы, входящие в такиебиблиотеки, были написаны на том же языке программирования, с которого ведетсятрансляция.
Однако необходимо, чтобы компоненты библиотеки были написаны сучетом того, что к ним могут делаться обращения из программ, написанных наопределенном языке и транслируемых конкретным транслятором.Библиотеки связаны не только с целевой машиной и целевой вычислительнойсистемой, но даже с конкретным компилятором, которым выполнялось ихформирование. Однако некоторые языки программирования имеют настолько близкую66семантику вызовов процедур и представления данных, что компиляторы для них могутсоздавать программы, которые можно вызывать из программ, написанных на другихязыках.Необходимость оказания системной поддержки программам, проходящимобработку в системах программирования, повлияло на первоначальное наименованиебиблиотек, которые сначала назывались библиотеками системных программ илибиблиотеками стандартных программ.Параллельно с разработкой системных библиотек началась работа по разработкебиблиотек прикладных программ, которые со временем превратились в пакетыприкладных программ, то есть в совокупности программ, позволяющих выполнить веськомплекс операций по обработке информации.
Потребность создания прикладныхпакетов существует для каждой прикладной области. Например, в областиматематических расчетов созданы многочисленные пакеты программ, лидером средикоторых является пакет, принадлежащий международной Группе ЧисленныхАлгоритмов (The Numerical Algorithms Group). Прикладные программы, входящие вэтот пакет, предназначены для подключения к программам пользователей, написаннымна языке Си и разных вариантах языка Фортран (Фортран 77, Фортран 90, Фортран 95),причем для разных вычислительных систем (Intel x86-32, Intel x86-64, Compaq AlphaTru64, IBM RS/6000), операционных систем (Microsoft Windows, Linux, Sun Solaris,Silicon Graphics IRIX) и трансляторов (Intel Linux pgf77, Intel Linux g77).В Научно-исследовательском Вычислительном центре МГУ создана библиотекачисленного анализа для использования с трансляторами pgf77 и pgcc с языков Фортран77 и Си, разработанными Portland Group/STM.Созданы пакеты прикладных программ для автоматизации бухгалтерского учетаи обработки финансовой информации (многие из них используются для работы спрограммами, написанными на языке Кобол).
Широко известны пакеты прикладныхпрограмм для управления базами данных (СУБД) и издательских систем.В библиотеки могут включаться не только объектные модули системныхпрограмм, но и макроопределения. Поддержка, которая оказывается ими,осуществляется не на стадии выполнения программ, а на стадии их компиляции,поскольку макроопределения и соответствующие им макровызовы вставляютсянепосредственно в тексты компилируемых программ.Современные библиотеки содержат также интерфейсную информацию,предназначенную для чтения автоматизированными системами программирования.Такая информация может использоваться при передаче компилятору сведений осоставе входящих в библиотеку процедур и функций.
Обрабатывая эти файлы,компилятор автоматически получает всю необходимую информацию о компонентахбиблиотеки, причем эта информация поставляется в терминах входного языкакомпилятора. Тем самым автор компилируемой программы избавляется отнеобходимости вставлять в свои тексты описания библиотечных компонентов –функций, процедур, а также констант и переменных.3.6.3.2. Библиотеки классовСледующим шагом в развитии библиотек оказалось создание библиотек классовдля систем программирования, основанных на объектно-ориентированных языкахпрограммирования (Си++, Java). Библиотеки классов могут представлять собой•совокупности независимых классов,67••иерархии классов,иерархии шаблонов классов.Простые наборы описаний классов встречаются в системах программированиявсе реже и реже. Такие наборы могут оказаться полезными, но пользоваться иминелегко, так как они обычно плохо структурированы.Иерархические библиотеки оказывают своим пользователям лучшуюподдержку.