Очевидно, что ни одно сколько-нибудь сложное программное изделие не может быть реализовано в виде единственного модуля. Модульность программ и данных является необходимым условием структурного программирования при применении его как нисходящего, так и восходящего вариантов.
Преимущества модульного конструирования могут, однако, в полной мере проявиться только, если обеспечивается раздельная компиляция модулей. Но если результаты раздельной компиляции представляют собой также отдельные объектные модули, то должен быть этап в подготовке программы, который бы компоновал из объектных модулей единую программу, готовую к выполнению, – загрузочный модуль. Кроме того, если компилятор обрабатывает каждый модуль отдельно, он не имеет возможности полностью выполнить функцию именования, – в объектном модуле остаются непреобразованными обращения к процедурам и данным, определенным в других модулях. Обеспечение обращений к внешним по отношению к модулю именам называется связыванием. Операции компоновки и связывания выполняются специальными программами-компоновщиками (синоним – редактор связей, linker) и связывающими загрузчиками.
Qt Дизайн. Компоновка. Часть 2. Компоновка программными средствами
В соответствии с декларированной нами в предыдущей главе «свободой выбора» операцию связывания можно выполнять на разных этапах подготовки программы:
- статическое связывание этапа подготовки – выполняется компоновщиком, вызываемые модули включаются в загрузочный модуль программы;
- статическое связывание этапа загрузки – выполняется связывающим загрузчиком, вызываемые модули подключаются к программе уже в оперативной памяти;
- динамическое связывание этапа загрузки – отличается от предыдущего варианта тем, что обеспечивает совместное использование одних и тех же копий модулей в памяти разными программами;
- динамическое связывание этапа выполнения – загрузка модулей и установка связей происходит при выполнении программы и управляет ими сама программа.
Статическое связывание обеспечивается соглашениями о формате объектных модулей. В любых вариантах эти форматы предусматривают наличие в объектном модуле двух таблиц – таблицы входов и таблицы внешних ссылок. В первой перечисляются имена и относительные адреса в модуле тех процедур и элементов данных, к которым разрешены обращения из других модулей. Во второй – имена внешних точек, к которым имеются обращения из данного модуля, с каждым таким именем связан также список адресов внутри модуля, которые содержат обращения к этому внешнему имени. При статическом связывании создается таблица входных точек – глобальная для всей программы. По мере компоновки программы из входящих в нее модулей их входные точки заносятся в эту таблицу, а их локальные адреса в модуле заменяются адресами в общем адресном пространстве программы. Затем в каждом модуле находятся (по таблице внешних ссылок) обращения к внешним модулям и имена в этих обращениях заменяются на адреса, получаемые из глобальной таблицы входных точек. При статическом связывании может происходить также и формирование оверлейной структуры адресного пространства программы, рассмотренное в предыдущей главе. Вспомним, что на этапе загрузки может происходить также трансляция виртуальных адресов программы в физические адреса. В этом случае загрузочный модуль должен содержать таблицу перемещений – список тех адресов в программе, которые должны быть модифицированы при загрузке базовым адресом программы. Эти операции выполняются перемещающим загрузчиком, пример такого загрузчика – загрузчик EXE-файлов в MS DOS. Статическое связывание и загрузка выполняются системными утилитами, не входящими в ядро ОС, они не составляют основной предмет нашего рассмотрения. Алгоритмы функционирования редакторов связей и перемещающих загрузчиков подробно рассматриваются, например, в [3, 13], здесь же мы остановимся на проблемах динамического связывания, выполняемого ОС. Современные ОС позволяют сочетать статическую компоновку с динамической. Хотя в литературе, посвященной этим ОС, возможность динамического связывания описывается как принципиально новая, на самом деле она была впервые реализована еще в 1965 году в ОС MULTICS [30], и с тех пор ее механизмы не претерпели значительных изменений. В современных ОС модули, подключаемые к программам динамически, носят название библиотек динамической компоновки (dynamic link library), соответственно, файлы, содержащие образы таких модулей имеют расширения DLL. Выполнение динамической компоновки иллюстрируется рисунком 4.1. Структуры данных динамической компоновки в принципе сходны со структурами для компоновки статической. Для модуля основной программы компоновщик создает таблицу, функционально идентичную таблице внешних ссылок. В этой таблице указывается имя файла для каждого динамически подключаемого модуля и имена тех процедур в модуле, к которым имеются обращения в программе. Вызовы процедур в теле программы содержат обращения к соответствующим элементам этой таблицы. С другой стороны, при компоновке модуля, предназначенного для динамического подключения, для него создается таблица входов. При компоновке загрузчик (на этапе загрузки) или ядро ОС (на этапе выполнения) выполняет установку связей: находит в памяти или загружает в память динамически подключаемый модуль и по его таблице входов находит требуемую процедуру. Строка таблицы внешних ссылок модифицируется – теперь она содержит переход по адресу найденной процедуры. Последующие обращения к этой же входной точке уже не вызывают каких-либо дополнительных действий.

Информатика 7 класс (Урок№7 — Программное обеспечение компьютера.)
Источник: studfile.net
Инструментальные программы. Инструментальные системы программирования. Инструментальная система программирования — это система
Инструментальные системы программирования предоставляют пользователям средства разработки программ. В них входят:
· компилятор и/или интерпретатор;
· интегрированная среда разработки;
· средства создания и редактирования текстов программ;
· библиотеки стандартных программ и функций;
- отладочные программы, помогающие находить и устранять ошибки в
· диалоговая среда для пользователя;
· графические библиотеки и утилиты для работы с библиотеками
· и другие средства.
К инструментальным системам программирования относятся – Turbo Basic, Quick Basic, Turbo Pascal, Turbo C, Delphy, Builder.
Язык Бейсик был создан как язык для начинающих для написания простых программ.
Язык Паскаль был разработан Никласом Виртом как язык обучения студентов программированию.
Паскаль — язык структурного программирования, упрощающего разработку сложных программ. Расширенный вариант этого языка – Turbo Pascal.
Язык Си соединяет свойства языка высокого уровня с возможностями использования программирования как на языке Ассемблера. Язык Си позволяет создавать сложные и эффективные программы.
Сейчас получили распространение системы программирования Borland и Delphi, ориентированные на создание Windows-приложений.
· пакет Borland Delphi ( Дельфи) — наследник семейства компиляторов Borland Pascal, предоставляющий удобные средства визуальной разработки.
· пакет Microsoft Visual Basic —инструмент для создания Windows-программ с использованием визуальных средств.
· пакет Borland C++ — одно из самых распространённых средств для разработки Windows приложений.
Инструментальные программные средства — это программы, которые используются в ходе разработки, корректировки или развития других прикладных или системных программ. |
По своему назначению они близки к инструментальным системам программирования. К инструментальным программам, например, относятся:
· средства компоновки программ;
· отладочные программы, т.е. программы, помогающие находить и устранять ошибки в программе;
· вспомогательные программы, реализующие часто используемые системные действия;
· графические пакеты программ и т.п.
Инструментальные программные средства используются на всех стадиях разработки ПО.
Источник: studopedia.su
Компоновка программы
После устранения ошибок и получения объектного модуля можно приступать к следующему этапу — созданию исполняемого (загрузочного) модуля, или, как еще называют этот процесс, к компоновке программы. Главная цель этого этапа — преобразовать код и данные в объектных файлах в их перемещаемое выполняемое отображение.
Чтобы понять, в чем здесь суть, нужно разобраться, зачем вообще разделяют процесс создания исполняемого модуля на два этапа — трансляцию и компоновку. Это сделано намеренно, чтобы можно было объединять вместе модули, написанные на одном и том же или на разных языках.
Формат объектного файла позволяет при определенных условиях объединить несколько отдельно отранслированных исходных модулей в один модуль. При этом в функции компоновщика входит разрешение внешних ссылок (ссылок на внешние процедуры и переменные) в этих модулях. Результатом работы компоновщика является создание загрузочного файла с расширением.ехе. После этого операционная система может загрузить такой файл в память и выполнить его.
Полный формат командной строки для запуска компоновщика довольно сложен (в этой и в большинстве следующих глав мы в основном будем использовать упрощенный формат):
TLINK[ключи] список_объектных_файлов [,имя_загрузочного_модуля]
[,имя_файла_карты][,имя_файла_библиотеки] [,имя_файла_определений],имя_ресурного_файла)
Параметры командной строки для запуска компоновщика перечислены далее.
— ключи — необязательные параметры, управляющие работой компоновщика. Список наиболее часто используемых ключей приведен в приложении В (h|Hwww.piter.com/doWnload). Каждому ключу должен предшествовать символ- (дефис) или / (слеш). При задании имен ключей имеет значение регистр символов.
— список_объектных_файлов — обязательный параметр, содержащий список компонуемых файлов с расширением.obj. Файлы должны быть разделены пробелами или знаком + (плюс), например:
tlink /v prog + mdf + fdr
При необходимости имена файлов снабжают указанием пути к ним.
— имя_загрузочного_модуля — необязательный параметр, обозначающий имя формируемого загрузочного модуля. Если оно не указано, то имя загрузочного модуля будет совпадать с первым именем в списке имен объектных файлов.
— имя_файла_карты — необязательный параметр, наличие которого обязывает ком- поновщик создать специальный файл с картой загрузки. В ней перечисляются имена, адреса загрузки и размеры всех сегментов, входящих в программу.
— имя_файла_библиотеки — необязательный параметр, который представляет собой путь к файлу библиотеки (.lib). Этот файл создается и обслуживается специальной утилитой tlib.exe пакета TASM. Утилита позволяет объединить часто используемые подпрограммы в виде объектных модулей в один файл. В дальнейшем можно просто указывать в командной строке tlink.exe имена нужных для компоновки объектных модулей и файл библиотеки, в котором следует искать эти подпрограммы. Если компонуется Windows-приложение, то на месте параметра имя_файла_библиотеки должно указываться имя библиотеки импорта (глава 16).
— имя_файла_определений — необязательный параметр, который представляет собой путь к файлу определений (.def). Этот файл используется при компоновкеWindows-приложений (глава 16).
— имя_ресурсного_файла — необязательный параметр, который представляет собой путь к файлу с ресурсами Windows-приложения (.res). Этот файл используется при компоновке Windows-приложений (глава 16).
Рассмотренный нами формат командной строки используется и для 32-разрядного варианта компоновщика tlink32.exe.
Существует возможность задания параметров командной строки компоновщика в текстовом файле. Для этого нужно создать файл с именем tlink.cfg (tlink32.cfg). При вызове компоновщика tlink.exe с параметром tlihk.cfg (ttink32.exetlirik32.cfg) ему будет передано содержимое файла tlink.cfg (tlink32.cfg). Например, текст конфигурационного файла tlink32.cfg для создания исполняемого файла Wmdows-приложения с отладочной информацией должен выглядеть так:
/v ‘
/Twe
Так же как и в случае команды tasm.exe, совсем не обязательно запоминать подробно синтаксис команды tlink.exe. Для того чтобы получить список ключей программы tlink.exe, достаточно просто запустить ее без параметров.
Для выполнения нашего примера запустим программу tlink.exe командной строкой вида
tlink.exe /v prg_6_l.obj.
В результате вы получите исполняемый модуль с расширением.ехе — рrg_6_1.ехе.
Получив исполняемый модуль, не спешите радоваться. К сожалению, устранение синтаксических ошибок еще не гарантирует, что программа будет хотя бы запускаться, не говоря уже о ее правильной pa6oтe. Поэтому обязательным этапом процесса разработки является отладка?
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru