русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 882; Нарушение авторских прав


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

На вход Загрузчика обязательно подается список объектных модулей, из которых составляется программа. Этот список может быть параметром программы-Загрузчика или находиться в отдельном файле. На первом проходе Загрузчик просматривает все объектные модули по списку и решает 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.
Кросс-системы



<== предыдущая лекция | следующая лекция ==>
Формат объектного модуля | Вычислительные системы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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