Настраивающий и динамический загрузчики

Компилятор (порождающий объектные файлы) и компоновщик (объединяющий объектные файлы в единое целое) не могут знать, в каких адресах физической памяти будет располагаться программа в момент ее выполнения. Поэтому они работают не с реальными адресами ячеек ОЗУ, а с относительными адресами, отсчитываемыми относительно некоей условной точки (например, начала сегмента данных или первого модуля программы). Таким образом, объектные модули строятся на основе относительных адресов. Поскольку для выборки команды или данных из памяти микропроцессор использует физический адрес ячейки памяти, программу, использующую относительные адреса, он выполнить не сможет. Поэтому, необходим модуль, который бы преобразовывал относительные адреса, используемые в программе в реальные адреса, непосредственно в момент запуска программы на выполнение. Этот процесс называется трансляцией адресов и выполняет его специальный модуль - загрузчик. Когда-то, давным-давно загрузчики существовали в виде отдельных модулей, которые выполняли трансляцию адресов и готовили программу к выполнению создавая загрузочный образ задачи. В настоящее время, загрузчик стал одним из модулей операционной системы и выполняет трансляцию адресов непосредственно в момент запуска программы. Такой загрузчик называется настраивающим загрузчиком. Для того, чтобы загрузчик мог выполнить трансляцию адресов, компоновщик должен подготовить для настраивающего загрузчика таблицу трансляции адресов, которая входит в состав исполняемого файла. Каждая операционная система содержит в себе свой настраивающий загрузчик и предусматривает свой формат таблицы трансляции адресов.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: