Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции СП.doc
Скачиваний:
9
Добавлен:
01.03.2025
Размер:
1.98 Mб
Скачать

Лекция 5. Назначение и функции программы загрузчика

 

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

Связывание - это связывание двух или более отдельных оттранслированных программ.

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

Функции загрузчика:

  1. распределение ОП;

  2. перемещение программы;

  3. связывание модулей;

  4. загрузка программ в ОП и запуск на выполнение.

 

Распределение ОП

Перемещение программы

Если внутри модулей имеются адресные константы, которые вычисляются от начала модуля, то адреса будут корректироваться относительно Базы.

 

Виды загрузчиков. Загрузчики типа «компиляция-выполнение».

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

Однако эта схема имеет ряд недостатков:

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

  • при каждом новом прогоне приходиться заново транслировать программу пользователя;

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

Достоинства:

  • распределение памяти выполняется автоматически;

  • одна и та же программа-компилятор выполняет функции перемещения и связывания, загрузки и запуска.

 

Абсолютный загрузчик

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

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

Абсолютные загрузчики просты в реализации, но имеют ряд особенностей:

  • задачу распределения ОП выполняет программист (с помощью директивы установки начального значения ОП);

  • задачу перемещения программы выполняет компилятор;

  • связывание модулей - решается программистом (call 600);

  • загрузка программ в ОП и запуск на выполнение.

Достоинства:

  • меньший объем загрузчика (по величине памяти);

  • разделение фазы компиляции и загрузки, что сокращает время на обработку модулей;

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

Недостатки:

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