Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Алгоритм работы Непосредственно Связывающего Загрузчика





Наиболее простой алгоритм работы Загрузчика — двухпроходный.

На вход Загрузчика обязательно подается список объектных модулей, из которых составляется программа. Этот список может быть параметром программы-Загрузчика или находиться в отдельном файле. На первом проходе Загрузчик просматривает все объектные модули по списку и решает 2 задачи:

u определяет общий объем области памяти, необходимый для программы и размещение объектных модулей в этой области;

u составляет Глобальную таблицу внешних имен программы.

Структура элемента Глобальной таблицы — такая же, как и Таблицы внешних символов каждого модуля. В нее заносятся только входные точки всех модулей. Поскольку Загрузчик уже знает в каком месте области памяти, выделяемой для программы, будет размещаться тот или иной модуль, он заносит в Глобальную таблицу адреса входных точек относительно начала всей программы. В конце 1-го прохода Загрузчик выделяет память и, уже зная фактический начальный адрес программы в памяти корректирует все адреса в Глобальной таблице внешних символов.

На 2-м проходе Загрузчик снова читает все объектные модули по списку. При этом он уже размещает коды модуля в памяти и формирует для каждого модуля Таблицу внешних символов (локальную для модуля) и Таблицу перемещений. Адресные поля в этих таблицах он заполняет или корректирует с учетом фактического адреса модуля в памяти и содержимого Глобальной таблицы внешних символов. Затем он выполняет обработку Таблицы перемещений, используя для коррекции адресных кодов в программе значения из Локальной Таблицы внешних символов.

Алгоритм выполнения 1-го прохода — следующий:

 

 

F Блок1: 1-й проход Загрузчика.

F Блок2: Начальные установки. Создание пустой Глобальной таблицы. Стартовый адрес=пусто. Относительный адрес 1-го сегмента — 0. Размер программы — 0.

F Блок3: Выборка следующего имени из списка объектных модулей. Если весь список объектных модулей обработан — переход на окончание 1-го прохода.

F Блок4: Чтение заголовка очередной записи объектного модуля, если объектный модуль обработан полностью — переход к следующему модулю.

F Блок5: Чтение остальной части записи (размер записи содержится в ее заголовке).

F Блок6: Разветвление в зависимости от типа записи.

F Блок7: При обработке записи окончания проверяется, имеется ли в записи стартовый адрес. Если стартового адреса нет — никакая другая обработка записи не производится.

F Блок8: Если в записи есть стартовый адрес, проверяется, не был ли он уже установлен.

F Блок9: Если стартовый адрес не был установлен, он устанавливается.

F Блок10: Если стартовый адрес был установлен, выдается сообщение об ошибке. (Ни эта, ни последующие рассмотренные ошибки не приводят к немедленному завершению 1-го прохода, однако, если на 1-м проходе были ошибки, 2-й проход не выполняется).

F Блок11: При обработке записи связывания выполняется перебор элементов Таблицы внешних символов...

F Блок12:...и разветвление — в зависимости от типа элемента.

F Блок13: Для элемента — сегмента вычисляется начальный адрес следующего сегмента и длина сегмента прибавляется к общему размеру программы.

F Блок14: Для элемента — входной точки ищется имя точки в Глобальной таблице.

F Блок15: Если имя не найдено в Глобальной таблице, в таблицу добавляется новый элемент.

F Блок16: Если имя найдено в Глобальной таблице, — ошибка, неуникальное внешнее имя.

F Блок17: При окончании 1-го прохода проверяется, установился ли адрес стартовой точки программы.

F Блок18: Если этот адрес не установлен — ошибка.

F Блок19: Если этот адрес установлен и в ходе выполнения 1-го прохода не было других ошибок, Загрузчик продолжает работу.

F Блок20: Выделяется память для программы в соответствии с ее размером.

F Блок21: В Глобальную таблицу внешних символов записываются фактические адреса.

F Блок22: Выполняется 2-й проход.

F Блок23: Освобождается Глобальная таблица

F Блок24: Если не было ошибок на 2-м проходе

F Блок25:...управление передается на стартовый адрес программы

F Блок26: Загрузчик завершает работу.

Алгоритм выполнения 2-го прохода — следующий:

 

F Блок1: 2-й проход Загрузчика

F Блок2: Установка на начало списка имен объектных модулей.

F Блок3: Выборка следующего имени из списка объектных модулей. Если весь список объектных модулей обработан — переход на окончание 2-го прохода.

F Блок4: Создание для модуля Локальной таблицы внешних символов и Таблицы перемещений — пустых.


F Блок5: Чтение заголовка очередной записи объектного модуля, если все записи модуля прочитаны — переход к обработке перемещений в модуле.

F Блок6: Чтение остальной части записи (размер записи содержится в ее заголовке).

F Блок7: Разветвление в зависимости от типа записи.

F Блок8: Для кодовой записи считывается относительный адрес записи и переводится в фактический.

F Блок9: Тело кодовой записи считывается и размещается в памяти по фактическому адресу.

F Блок10: Для записи связывания перебираются находящиеся в ней элементы Таблицы имен

F Блок11: Обработка разветвляется в зависимости от типа имени.

F Блок12: Для имен сегментов или входных точек относительный адрес переводится в фактический.

F Блок13: Имя внешней точки ищется в Глобальной таблице внешних имен.

F Блок14: Если имя не найдено в Глобальной таблице, выдается сообщение об ошибке.

F Блок15: Если имя найдено в Глобальной таблице, в значение адреса из Глобальной таблицы становится значением этого имени.

F Блок16: Элемент с откорректированным адресом заносится в Локальную таблицу имен.

F Блок17: Для записи перемещения перебираются находящиеся в ней элементы Таблицы перемещения.

F Блок18: Относительный адрес в элементе заменяется на фактический...

F Блок19:...и элемент добавляется в Таблицу перемещений.

F Блок20: После того, как весь модуль прочитан, выполняется перебор Таблицы перемещений модуля.

F Блок21: Для каждого элемента Таблицы перемещений имя, записанное в его поле имени ищется в Локальной таблице имен и из Локальной таблицы имен выбирается связанный с этим именем адрес.

F Блок22: Из кода программы выбирается код, адрес и длина которого записаны в элементе Таблицы перемещений.

F Блок23: Над выбранным кодом и адресом, выбранным из Таблицы имен выполняется операция сложения или вычитания, результат записывается на место кода.

F Блок24: После перебора всей Таблицы перемещений, освобождаются Таблица перемещений и Локальная таблица имен модуля, и управление передается на обработку следующего модуля.

F Блок25: После обработки всех объектных модулей 2-й проход заканчивается.

 

 

Лекция 17.
Кросс-системы







Date: 2015-05-22; view: 647; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.012 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию