Системное программирование. Конспект лекций


Основные понятия - часть 2


На выходе Редактора связей мы получаем загрузочный модуль.

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

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

  • функция распределения не выполняется, так как реальное адресное пространство, в котором размещается программа предполагается свободным;
  • функция загрузки, конечно, выполняется, но она предельно проста;
  • функция связывания может быть исключена из Абсолютного Загрузчика: поскольку все адреса программы известны заранее, адреса, по которым происходят обращения к внешним точкам, могут быть определены заранее;
  • функция перемещения исключается;
  • функция инициализации остается.

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

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

Основные типы Загрузчиков - настраивающие и непосредственно связывающие.




- Начало -  - Назад -  - Вперед -