Скачиваний:
70
Добавлен:
09.05.2014
Размер:
812.54 Кб
Скачать

1.2. Связи между модулями.

Связи между модулями бывают:

  1. по управлению

  2. по данным

Связь по управлению

Управление передается из одного модуля в другой путем вызова CALL < имя модуля >[ параметры ]

Вызов может быть многоуровневым (последовательно из одного модуля уходит в другой)

Связь по данным

  1. явная (через список параметров)

  2. через общие области ОП (переменные и массивы). Языки программирования имеют возможность определения этих общих переменных.

В обоих случаях при объединении модулей наличие связей по данным учитывается.

Управление, реализуемое через вызов типа CALL при программировании, на уровне команд реализуется через команды передачи управления с возвратом. Трансляторы должны обрабатывать ссылки специальным образом, чтобы потом при редактировании эту специальную форму превратить в выполняемую.

1.3. Структура объектного модуля

О

бъектные модули строятся по стандартной схеме. Транслятор создает для каждого объектного модуля совокупность команд, реализующихтело модуля, а также служебные части, используемые для настройки на точку загрузки, и осуществляет редактирование связей. Для настройки на определенную область памяти в составе модуля используютсяадресные константы8в виде неких базовых адресов. Вторая служебная часть –словарь внешних имен и ссылок- это таблица, содержащая:

  1. Внешние имена- имена, под которыми данный модуль известен (как минимум одно имя). Если в модуле имеется несколько точек входа, то каждой из них соответствует имя в словаре. Список точек входа - цель словаря.

  2. Список внешних ссылокпредставляет собой перечень имен модулей, которые вызываются из данного модуля. Ссылки представлены символически - там имеется имя, под которым модуль известен в библиотеке. Если нет обращений, то список внешних ссылок пуст.

1.3.1. Принцип редактирования связей9.

Тело модуля транслируется в относительных адресах10.

Каждый уровень вызова называется лексическим уровенем.

Редактор связей итерационно строит объединенный модуль. Число итераций равно числу лексических уровней. Итеративность состоит в следующем: просматривается список и, если обнаружена запрещенная ссылка, вновь идет итерация.

Первая итерация

Редактор связей начинает обработку с модуля MAIN и просматривает его словарь внешних ссылок. Когда он встречает М1, он извлекает его из файла и присоединяет тело модуля М1 к телу модуля MAIN. Определяется начальный относительный адрес тела модуля М1. Редактор связей объединяет словари внешних ссылок и внешних имен. Этим определяется содержимое косвенного адреса.

Вторая итерация

В словаре внешних ссылок содержится одна запрещенная ссылка (В1). Редактор связей присоединяет тело модуля В1 и объединяет словари внешних ссылок.

Третья итерация

Нет запрещенных ссылок процесс окончен.

При трансляции вызов превращается в передачу управления с возвратом по косвенному адресу, что предполагает, что в момент выполнения команды косвенный адрес будет определен.

  1. Процесс подключения, когда он идет итеративно, называется автовызовом.

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

  3. Обычно построенный модуль готовится в переместимой форме (допустим с нулевого начального адреса). Предполагается, что до начала выполнения модуль должен получить конкретный начальный адрес. Процесс получения модулем начального адреса называется загрузкой.

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

И

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

M

VS - Multiple Virtual Storage реализовала следующую идею: каждый процесс мультиобработки получает полное адресное пространство в свое распоряжение.

Пул (pool) – это область оперативной памяти, выделяемая для организации нескольких процессов.

Достоинства статического редактирования:

  1. редактирование связей происходит только один раз

  2. программа остается устойчивой, независимо от случайного или намеренного изменения модулей.

Недостатки статического редактирования:

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

  2. Многие модули повторяются (являются общими). При статическом подключении они копируются во все места программы, где они включены. Это приводит к потере памяти. Статическое редактирование снижает эффективность использования памяти.

  3. Многие компоненты программы являются избыточными и вызываются не всегда. Иногда процент избыточности превышает 50%

Статическое редактирование - путь к закрытым для развития системам.