- •Гуманитарная Академия Дистанционное образование
- •Оглавление
- •Дидактический план
- •Литература
- •Перечень компетенций
- •Тематический обзор
- •1 Понятие системы программирования
- •1.1 Классификация систем программирования
- •1.2 Средства автоматизированной разработки программ
- •1.3 Пакеты прикладных программ
- •1.4 Объектно-ориентированные системы программирования
- •2 Основные концепции трансляторов
- •2.1 Введение в методы трансляции
- •2.2 Разновидности языкового процессора
- •2.3 Компиляторы как класс программного обеспечения
- •2.4 Среда разработки компилятора
- •2.5 Упрощенная модель компилятора
- •2.6 Лексический анализ
- •2.7 Синтаксический анализ
- •2.8 Семантический анализ
- •2.9 Конечный автомат
- •2.10 Контексно-свободная грамматика
- •2.11 Атрибутные транслирующие грамматики
- •2.12 Генерация кода
- •2.13 Распределение памяти
- •3 Редактор связей
- •3.1 Управляющий язык редактора связей
- •3.2 Предложения определения секций
- •3.3 Спецификации файлов
- •3.4 Выходная секция
- •3.5 Создание и определение имен при редактировании связей
- •3.6 Размещение секций в именованных областях памяти
- •3.7 Инициализация пустот и секций .Bss
- •3.8 Определение точки входа
- •3.9 Библиотеки объектных файлов
- •3.10 Алгоритм размещения
- •3.11 Инкрементальное редактирование связей
- •3.12 Синтаксис управляющего языка редактора связей
- •4 Отладчик
- •4.1 Отладчик Turbo Debugger
- •4.2 Отладчик Турбо Паскаль
- •4.3 Отладка программ в системе Delphi 7
- •Задания для самостоятельной работы
- •Тренинг компетенций
- •Глоссарий
- •Системное программное обеспечение (курс 1) юнита 2
3 Редактор связей
Управляющий язык редактора связей предоставляет следующие возможности:
– описание конфигурации памяти целевого компьютера;
– объединение секций объектного файла в порядке, отличном от подразумеваемого;
– назначение для секций определенных адресов или диапазона адресов памяти;
– определение или переопределение глобальных имен.
Управляющий язык используется, когда необходимо детально контролировать ход и результат работы редактора связей.
Предложения управляющего языка редактора связей помещаются в файл, имя которого указывается в командной строке ld(1). Если файл указан в командной строке и не опознан в качестве объектного модуля или библиотеки, то предполагается, что он содержит предложения управляющего языка.
Для целей размещения программ и данных виртуальная память целевого компьютера подразделяется на конфигурируемую и неконфигурируемую. По умолчанию вся память считается конфигурируемой, то есть допускается ее использование редактором связей. В микропроцессор-ных приложениях области памяти, расположенные по разным адресам, зачастую неоднородны. Например, с нулевого адреса может располагаться память постоянного запоминающего устройства размером 3K, а с адреса 20K – постоянное запоминающее устройство на 8K. Память в диапазоне от 3K до 20K-1 целесообразно сделать неконфигурируемой, то есть запретить редактору связей ld(1) использовать ее. Ничто и никогда не может быть связано с неконфигурируемой памятью. Указание того, что некоторая область памяти неконфигурируема, делает соответствующие адреса некорректными или несуществующими с точки зрения редактора связей. Конфигурацию памяти, отличную от подразумеваемой, необходимо специфицировать явно.
Если не оговорено противное, все дальнейшие рассуждения о памяти и адресах относятся к конфигурируемым областям адресного пространства.
Секция объектного файла должна занимать непрерывный участок памяти и является минимальным объектом, который подвергается перемещению. Координатами секции являются ее начальный адрес и длина. В начале файла располагаются заголовки секций, описывающие все секции этого файла. В процессе обработки из секций входных файлов вырабатываются выходные секции, которые могут содержать команды, данные или смесь того и другого. Как между входными, так и между выходными секциями могут быть пустоты ("дыры"). Однако в пределах одной выходной секции память выделяется последовательно и с пустотами перекрываться не может.
Применительно к редактированию внешних связей термин “физический адрес” трактуется нестандартным образом. Физический адрес секции или имени определяется как смещение относи-тельно начала (нулевого адреса) адресного пространства. Физический адрес объекта не обязательно совпадает с тем адресом, по которому объект будет помещен во время выполнения. Так, в системах со страничной виртуальной памятью адрес есть смещение относительно нулевого адреса виртуальной памяти, которое затем преобразуется аппаратурой и/или операционной системой.
Часто бывает необходимо, чтобы начало секции приходилось на определенный, заранее известный адрес. Установление соответствия между объектом и начальным адресом называется связыванием. В таком случае говорят, что объект связан с определенным адресом. Обычно связыванию подвергаются выходные секции. Однако имеется возможность связывать с адресами и абсолютные глобальные имена, для чего используется оператор присваивания управляющего языка ld(1).
Объектные файлы генерирует как ассемблер, вызываемый каким-либо компилятором, так и редактор внешних связей ld(1). Редактор связей, получая на вход настраиваемые объектные файлы, создает выходной объектный файл, который может требовать, а может и не требовать дополнительной настройки. При определенных условиях объектные файлы, подаваемые на вход ld(1), могут быть и абсолютными.
Файлы, которые создаются компиляторами, могут содержать секции с именами .text и .data. Секция .text содержит выполняемые команды, а секция .data – инициализированные данные.