Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО лекции.docx
Скачиваний:
21
Добавлен:
01.08.2019
Размер:
92.68 Кб
Скачать

Программы связывания и загрузки

- программа, выполняющая одну или несколько следующих функций:

1. функция перемещения – настройка адресов программы на реальный адрес загрузки

2. функция связывания – объединение нескольких модулей в единый загрузочный модуль с обработкой перекрестных ссылок.

3. функция загрузки – запись машинного кода в оперативную память и запуск программы на выполнение.

Различают несколько видов программ связанной загрузки:

  1. абсолютный загрузчик

на вход АЗ подается модуль в абсолютном формате(МАФ). На выходе – ничего. Функции – только загрузка.

  1. Перемещающий загрузчик(ПЗ).

Вход: 1 МПФ(модуль в перемещаемом формате)

Выход: -

Функции: перемещение и загрузка

  1. связывающий загрузчик(СЗ)

вход: 1 или несколько модулей в полном перемещаемом формате(МППФ)

выход:-

функции: связывание, перемещение, загрузка

  1. чистый компоновщик(ЧК)

вход: 1 ли несколько МППФ

выход: 1 МПФ или 1 МАФ

функции: связывание и частичное перемещение

рис3

Структура и алгоритм работы АЗ

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

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

  3. обрабатываем запись конец модуля, адрес точки входа заносим в счетчик команд.

Структура и алгоритм работы ПЗ

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

2. получаем адрес загрузки у ОП и заносим в какую-то специальную переменную

3. обрабатываем тело модуля: к относительному адресу загрузки записи прибавляем адрес загрузки получаем реальный адрес загрузки записи по которому загружаем данную запись.

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

5. обрабатываем запись конец модуля: к относительному адресу точки входа прибавляем адрес загрузки и полученным значением инициализируем счетчик команд.

Структура и алгоритм работы сз

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

2. получаем адрес загрузки у ОП и заносим в какую-то специальную переменную

3. обрабатываем тело модуля: к относительному адресу загрузки записи прибавляем адрес загрузки получаем реальный адрес загрузки записи по которому загружаем данную запись.

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

5. обрабатываем запись конец модуля: к относительному адресу точки входа прибавляем адрес загрузки и полученным значением инициализируем счетчик команд.

26.03.

Лекция №7

Работа ???

ТВИ

Табл 1

АЗМ – адрес загрузки текущего модуля

1й проход

  1. АЗМ = АЗ(адрес загрузки – то, что запросили у операционной системы)

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

    1. считываем заголовок модуля, имя модуля заносим в ТВИ и ему сопоставляем адрес из АЗМ (Н)

    2. обрабатываем раздел внешних имен модуля – заносим все имена в ТВИ с проверкой на уникальность, при этом назначаемый адрес получается как сумма относительного адреса внешнего имени + АЗМ(D)

    3. значение переменной АЗМ увеличивается на длину модуля

  3. заканчиваем работу, когда закончились все модули

2й проход: выполнить перемещение(настройка адресов на реальный адрес загрузки), воспользовавшись ТВИ настроить адресную часть

  1. (организуем цикл по обработке входного потока модулей, каждый модуль которого обрабатывается следующим образом:). Обрабатываем запись типа Т: ОАЗЗ+АЗМ=РАЗЗ и по этому адресу загружаем в оперативную память тело записи

  2. обрабатываем раздел модификаторов: к относительному адресу модифицированной команды прибавляем адрес загрузки модуля = реальный адрес загрузки модулчя, по этому адресу входим в ОП и настраиваем операндную часть следующим образом: к относительному адресу операндов прибавляем адрес загрузки модуля, получаем реальный адрес операнда. Если в команде встретилась использование внешняя ссылка, то осуществляем ее поиск в ТВИ. Если поиск неудачен – ошибка, если поиск удачен, то заменяем внешнюю ссылку адресом из ТВИ.

  3. обрабатываем запись конец: к относительному адресу точки входа прибавляем АЗМ получаем реальный адрес 1й выполняемой команды, которым инициализировано значение счетчика команд

рис1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]