ЗАГРУЗЧИК - программа, которая подготавливает объектную программу к выполнению и инициирует ее выполнение.

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

· выделение места для программ в памяти (распределение);

· фактическое размещение команд и данных в памяти (загрузка);

· разрешение символических ссылок между объектами (связывание);

· настройка всех величин в модуле, зависящих от физических адресов в соответствии с выделенной памятью (перемещение);

· передача управления на входную точку программы (инициализация).

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

2. Функция загрузки сводится к считыванию образа программы с диска (или другого внешнего носителя) в оперативную память.

3. Функция связывания состоит в компоновке программы из многих объектных модулей. Поскольку каждый из объектных модулей в составе программы был получен в результате отдельного процесса трансляции, который работает только с одним конкретным модулем, обращения к процедурам и данным, расположенным в других модулях, в объектных модулях не содержат актуальных адресов. Загрузчик же "видит" все объектные модули, входящие в состав программы, и он может вставить в обращения к внешним точкам правильные адреса. Загрузчики, которые выполняют функцию связывания вместе с другими функциями, называются Связывающими Загрузчиками. Выполнение функции связывания может быть переложено на отдельную программу, называемую Редактором связей или Компоновщиком. Редактор связей выполняет только функцию связывания - сборки программы из многих объектных модулей и формирование адресов в обращениях к внешним точкам. На выходе Редактора связей мы получаем загрузочный модуль.

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

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

Структура записи каталога файловой системы FAT

Поле записи Размер поля (в байтах)
Имя файла
Расширение имени (тип файла)
Атрибуты (флаги)
Размер файла (в байтах)
Дата последнего изменения
Время последнего изменения
Резерв (не используется)
Номер первого кластера файла

Таблица FAT состоит из записей, количество которых равно количеству кластеров в области данных, а размер одной записи может быть равен 12, 16 или 32 битам.

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