Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Связывающий загрузчик




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

Связывающий загрузчик разбивается на два модуля:

  1. Редактор связей.
  2. Перемещающий загрузчик.

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

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

Основная задача редактора связей, это:

  1. Распределение памяти для модулей программы.
  2. Определение значений внешних переменных.
  3. Модификация кода программы в местах, где использованы внешние ссылки или перемещаемое выражение.

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

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

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

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

Задача первого просмотра:

  1. Определение длины модуля.
  2. Определение внешних переменных и их значений в модулях.
  3. Определение внешних ссылок модуля.
  4. Распределение памяти для модулей и расчет значений внешних переменных в программе.

Задачи второго просмотра:

  1. Загрузка кода программы в оперативную память.
  2. Модификация кода программы в соответствии со значениями внешних переменных.
  3. Передача управления загруженной программе.

Структура данных, используемых связывающим загрузчиком

1. Таблица распределения памяти. Содержит поля: ключ → имя модуля, длина модуля, адрес в оперативной памяти.

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

3. Список внешних ссылок (таблица). Содержит поля: имя внешней переменной, имя модуля.

Алгоритм первого просмотра

Задачей первого просмотра является формирование таблицы распределения памяти, таблицы внешних переменных и списка внешних ссылок. Для их формирования используются карты объектного модуля:

- для таблицы распределения памяти (Н);

- для таблицы внешних переменных (D);

- для списка внешних ссылок.

Алгоритм:

  1. Выделение памяти для двух таблиц и списка.
  2. Открытие очередного файла с объектным модулем. Если нет, то к п.10.
  3. Чтение очередной карты модуля.
  4. Если карта Н, то определение имени модуля и его длины и запись их в таблицу распределения памяти (ТРП), переход к п.3.
  5. Если карта D, то определение имени внешней переменной, ее значения и перемещаемость, запись новой строки в таблицу внешних переменных (ТВП), переход к п.3.
  6. Если карта R, то определение имени внешней ссылки, запись новой строки в список внешних ссылок (СВС), переход к п.3.
  7. Если карта Е, то закрыть файл объектного модуля и перейти к п.2.
  8. Пропустить карты Т, М, переход к п.3.
  9. Проверка на разрешимость внешних ссылок. Для всех имен внешних ссылок нужно найти соответствующие внешние переменные. Если имеются ссылки без переменных, то программа содержит ошибки, формирование сообщения, завершение работы загрузчика.
  10. Конец.

Алгоритм второго просмотра

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

При втором просмотре обрабатываются карты Н, Т, М и Е для главного модуля.

  1. Расчет длины программы. Это сумма длин всех модулей.
  2. Заказ в операционной системе блока памяти, равного длине программы. Если блок выделен, то адрес программы равен адресу выделенного блока, иначе сообщение об ошибке и завершение работы программы.
  3. Расчет адресов модулей в оперативной памяти. Первый модуль равен адресу программы, последний – адресу предыдущего модуля + его длина.
  4. Расчет значений внешних переменных. Для всех перемещаемых внешних переменных их значение увеличивается на адрес загрузки их модуля.
  5. Открытие очередного файла с оперативным модулем, переход к п.2.
  6. Чтение очередной карты.
  7. Если карта Н, то определение имени модуля и выборка адреса модуля по ТРП, переход к п.6.
  8. Если карта Т, то определение адреса и длины данных, загрузка данных из карты по адресу: адрес данных + адрес модуля. Переход к п.6.
  9. Если карта М, то определение адреса и длины модифицированных данных, выделение из карты фрагмента формулы модификации (???). Определяется значение внешней ссылки по таблице внешних переменных и прибавляется ими вычитается соответствующее значение по адресу: адрес данных + адрес модуля с учетом длины модифицируемых данных. Переход к п.6.
  10. Если карта Е или модуль является главным, то сформировать адрес первой выполняемой команды, который равен: точка входа + адрес модуля. Закрываем файл объектного модуля, переход к п.5.
  11. Если карты D, R, то пропустить их и переход к п.6.
  12. Конец.

Имя главного модуля является заранее определенным (например, в Си ‘main’, в Паскале - ‘program’ и т.д.) или главным модулем является первый модуль в списке объектных модулей (например, Ассемблер).

 




Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 2010; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.