Абсолютная загрузка
Абсолютный загрузчик требует, чтобы данный загружаемый модуль всегда располагался в одном и том же месте в памяти. Следовательно, в модуле, передаваемом для загрузки, все обращения должны быть к конкретным, или абсолютным, адресам основной памяти.
Назначение определенных адресов ссылкам к памяти в программе может быть выполнено либо программистом, либо автоматически в процессе компиляции или ассемблирования (табл. 7.2,а). У такого подхода имеется ряд серьезных недостатков. Во-первых, каждый программист должен знать стратегию размещения модулей в основной памяти. Во-вторых, при любых изменениях в программе, которые включают вставку или удаление кода или данных, требуется соответствующим образом изменить все адреса. Поэтому желательно, чтобы все адреса в памяти были выражены символьно, с тем чтобы в процессе компиляции или ассемблирования разрешить эти символьные ссылки (см. рис. 7.15). Каждая ссылка на команду или элемент данных изначально представлена символом. При подготовке модуля к абсолютной загрузке ассемблер или компилятор преобразуют все эти ссылки в конкретные адреса, как показано на рис. 7.15,в.
Таблица 7.2. Связывание адресов
а) Загрузчик Этап связывания Действия Разработка Программист использует конкретные физические адреса непосредственно программы в программе Компиляция Программа содержит ссылки на символьные адреса, которые преобразуются в реальные физические адреса компилятором или ассемблером Загрузка Компилятор или ассемблер генерируют относительные адреса, которые транслируются в абсолютные в процессе загрузки программы Исполнение Загруженная программа использует относительные адреса, которые программы динамически конвертируются процессором в абсолютные |
б) Компоновщик Этап компоновки Действия Разработка Не разрешены никакие ссылки на внешний код или данные. Программист программы должен разместить в программе исходный код всех подпрограмм, на которые имеются ссылки Компиляция Код каждой подпрограммы, к которой имеется обращение, должен быть ассемблирован в качестве модуля Создание Все объектные модули ассемблируются с использованием относительных - загружаемого адресов. Эти модули связываются в одно целое, и все модуля ссылки пересчитываются относительно начала образующегося единого модуля Загрузка Внешние ссылки не разрешаются до тех пор, пока модуль не будет размещен в основной памяти. В это время динамически связываемые модули, к которым имеются обращения, добавляются к основному модулю, и в основной или виртуальной памяти размещается весь комплект целиком Исполнение Внешние ссылки не разрешаются до тех пор, пока внешний вызов не программы будет выполнен процессором. В этот момент процесс прерывается и необходимый модуль связывается с вызывающей программой |
Дата добавления: 2016-06-05; просмотров: 1769;