Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



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

 Абсолютный загрузчик выполняет запись объектов программы в ОП и передачу управления на адрес начала ее исполнения. Поскольку от абсолютного загрузчика не требуется выполнения связывания и перемещения программ его работа очень простая. Все выполняется за один просмотр. В начале для того чтобы удостоверится, что программа, переданная для загрузки, корректна и что для нее достаточно места в ОП, просматривается запись-заголовок. Затем последовательно считываются записи тело программы, и содержащийся в них объектный код помещается в ОП по указанному адресу. И как только будет прочитана запись-конец, загрузчик передает управление по адресу, заданному в качестве адреса начала исполнения программы. Одним из очевидных недостатков абсолютных загрузчиков является то, что требуется определить фактически адрес начала загрузки программы до ее ассемблирования. Абсолютные загрузчики благодаря своей простоте используются в качестве начальных загрузчиков ОС.

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

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

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

Таблица определения символов перечисляет все символы класса, каждая запись таблицы – это пара (DName[i],DVal[i]), где DName содержит символы, а DVal – соответствующие им значения. Значением символа обычно является перемещаемый адрес А команды или данных в пределах сегмента. Когда сегмент перемещается загрузчиком, элементы сегмента с перемещаемым адресом настраиваются единообразно на место в памяти с абсолютным адресом, определяемым символом этого элемента.

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

Таблица использования состоит из списка всех внешних символов, на которые имеются ссылки в сегменте.

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

1. Перемещаемые с помощью записей-модификаторов – для описания каждого фрагмента объектного кода, требующего изменения при перемещении используется специальная запись-модификатор. Каждая запись-модификатор определяет начальный адрес и длину поля, значение которого необходимо изменить, а также тип требуемой модификации. Записи-модификаторы являются удобным средством для задания информации о перемещаемой программе. Алгоритм работы загрузчика, использующего записи-модификаторы состоит из следующих этапов:

a. Прочитать запись-заголовок;

b. Проверить имя и длину программы;

c. Получить PROGADDR от ОС;

d. Прочитать первую запись тела программы;

e. Пока тип записи не равен «Е» выполнить следующие шаги:

i. Если объектный код задан в символическом виде, то преобразовать его во внутреннее представление;

ii. Если тип записи равен «Т», то переписать объектный код в заданное место ОП;

iii. Если тип записи равен «N», то модифицировать заданное поле, т.е. прибавить к нему значение PROGADDR;

iv. Прочитать следующую запись объектной программы;

f. Передать управление по адресу, заданному в записи конец, т.е. тип записи «Е» плюс PROGADDR.

2. Перемещение с помощью маски – эффективен на компьютерах, где используется прямая адресация и фиксированный командный формат. Формат записей тела программы тот же, что и ранее, за исключением того, что теперь с каждым словом объектного кода связан разряд перемещения. Эти разряды собираются вместе и образуют маску, которая записывается после указателя длины каждой записи тела программы. Если разряд перемещения установлен в единицу, то при перемещении программы начальный адрес программы добавляется к слову, соответствующему этому разряду. Значение разряда перемещения равное нулю показывает, что никаких преобразований при перемещении делать не нужно.

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

 

Выполняют связывание и перемещение во время загрузки.

 

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

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

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

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

Обычно ESTAB организуется в виде КЭШ-таблицы. Двумя другими важными переменными являются PROGADDR и CSADDR – начальный адрес той управляющей секции, которая обрабатывается загрузчиком в данный момент. Этот адрес добавляется к всем относительным адресам данной управляющей секции для того, чтобы преобразовать их в фактические адреса.

Во время первого просмотра загрузчик обрабатывает только запись-заголовок и записи определения управляющих секций. PROGADDDR становится начальным адресом первой управляющей секции входного потока. Имя управляющей секции, полученное из записи-заголовка, записывается в ESTAB и ему присваивается текущее значение CSADDR.

Все внешние имена из записей-определений также заносятся в ESTAB. Значения их адресов получается путем сложения значения из записи-определения с CSADDR.

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

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

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

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

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


 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 506; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.013 с.)
Главная | Случайная страница | Обратная связь