Операционные системы. Курс лекций




Компоновщики и загрузчики ОС. Форматы COFF (command object file format) и PE (portable executable).


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

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

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

Различают статическое и динамическое связывание.

Статическое связывание бывает внешним и внутренним. Оно обеспечивается на стадии формирования исполняемого модуля еще до этапа выполнения программы.

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

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

Компоновщик формирует необходимые структуры для работы с динамическими библиотеками и образует статические структуры.

Особенностью компоновщика exe-модулей для Windows является то, что он берет на себя часть функций загрузчика. Это сделано для того, чтобы максимально упростить загрузчик ОС, увеличив скорость загрузки программы и для упрощения процесса распределения памяти для различных программных модулей.

Поэтому компоновщик должен самостоятельно подготовить практически все необходимые структуры для выполнения программы.




Содержание  Назад  Вперед